3 namespace Drupal\Tests\entity\Kernel\QueryAccess;
5 use Drupal\entity\QueryAccess\Condition;
6 use Drupal\entity\QueryAccess\ConditionGroup;
7 use Drupal\KernelTests\KernelTestBase;
10 * Tests the condition group class.
12 * ConditionGroup uses \Drupal\Core\Cache\Cache internally, which makes it
13 * impossible to use a unit test (due to Cache accessing the global container).
15 * @coversDefaultClass \Drupal\entity\QueryAccess\ConditionGroup
18 class ConditionGroupTest extends KernelTestBase {
21 * ::covers getConjunction
22 * ::covers addCondition
23 * ::covers getConditions
26 public function testGetters() {
27 $condition_group = new ConditionGroup();
28 $condition_group->addCondition('uid', '2');
29 $this->assertEquals('AND', $condition_group->getConjunction());
30 $expected_conditions = [
31 new Condition('uid', '2'),
33 $this->assertEquals($expected_conditions, $condition_group->getConditions());
34 $this->assertEquals(1, $condition_group->count());
35 $this->assertEquals("uid = '2'", $condition_group->__toString());
37 $condition_group = new ConditionGroup('OR');
38 $condition_group->addCondition('type', ['article', 'page']);
39 $condition_group->addCondition('status', '1', '<>');
40 $this->assertEquals('OR', $condition_group->getConjunction());
41 $expected_conditions = [
42 new Condition('type', ['article', 'page']),
43 new Condition('status', '1', '<>'),
47 " type IN ['article', 'page']",
52 $this->assertEquals($expected_conditions, $condition_group->getConditions());
53 $this->assertEquals(2, $condition_group->count());
54 $this->assertEquals(implode("\n", $expected_lines), $condition_group->__toString());
56 // Nested condition group with a single condition.
57 $condition_group = new ConditionGroup();
58 $condition_group->addCondition('type', ['article', 'page']);
59 $condition_group->addCondition((new ConditionGroup('AND'))
60 ->addCondition('status', '1')
62 $expected_conditions = [
63 new Condition('type', ['article', 'page']),
64 new Condition('status', '1'),
68 " type IN ['article', 'page']",
73 $this->assertEquals($expected_conditions, $condition_group->getConditions());
74 $this->assertEquals('AND', $condition_group->getConjunction());
75 $this->assertEquals(2, $condition_group->count());
76 $this->assertEquals(implode("\n", $expected_lines), $condition_group->__toString());
78 // Nested condition group with multiple conditions.
79 $condition_group = new ConditionGroup();
80 $condition_group->addCondition('type', ['article', 'page']);
81 $nested_condition_group = new ConditionGroup('OR');
82 $nested_condition_group->addCondition('uid', '1');
83 $nested_condition_group->addCondition('status', '1');
84 $condition_group->addCondition($nested_condition_group);
85 $expected_conditions = [
86 new Condition('type', ['article', 'page']),
87 $nested_condition_group,
91 " type IN ['article', 'page']",
100 $this->assertEquals($expected_conditions, $condition_group->getConditions());
101 $this->assertEquals('AND', $condition_group->getConjunction());
102 $this->assertEquals(2, $condition_group->count());
103 $this->assertEquals(implode("\n", $expected_lines), $condition_group->__toString());