Version 1
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Database / TaggingTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\Database;
4
5 /**
6  * Tests the tagging capabilities of the Select builder.
7  *
8  * Tags are a way to flag queries for alter hooks so they know
9  * what type of query it is, such as "node_access".
10  *
11  * @group Database
12  */
13 class TaggingTest extends DatabaseTestBase {
14
15   /**
16    * Confirms that a query has a tag added to it.
17    */
18   public function testHasTag() {
19     $query = db_select('test');
20     $query->addField('test', 'name');
21     $query->addField('test', 'age', 'age');
22
23     $query->addTag('test');
24
25     $this->assertTrue($query->hasTag('test'), 'hasTag() returned true.');
26     $this->assertFalse($query->hasTag('other'), 'hasTag() returned false.');
27   }
28
29   /**
30    * Tests query tagging "has all of these tags" functionality.
31    */
32   public function testHasAllTags() {
33     $query = db_select('test');
34     $query->addField('test', 'name');
35     $query->addField('test', 'age', 'age');
36
37     $query->addTag('test');
38     $query->addTag('other');
39
40     $this->assertTrue($query->hasAllTags('test', 'other'), 'hasAllTags() returned true.');
41     $this->assertFalse($query->hasAllTags('test', 'stuff'), 'hasAllTags() returned false.');
42   }
43
44   /**
45    * Tests query tagging "has at least one of these tags" functionality.
46    */
47   public function testHasAnyTag() {
48     $query = db_select('test');
49     $query->addField('test', 'name');
50     $query->addField('test', 'age', 'age');
51
52     $query->addTag('test');
53
54     $this->assertTrue($query->hasAnyTag('test', 'other'), 'hasAnyTag() returned true.');
55     $this->assertFalse($query->hasAnyTag('other', 'stuff'), 'hasAnyTag() returned false.');
56   }
57
58   /**
59    * Confirms that an extended query has a tag added to it.
60    */
61   public function testExtenderHasTag() {
62     $query = db_select('test')
63       ->extend('Drupal\Core\Database\Query\SelectExtender');
64     $query->addField('test', 'name');
65     $query->addField('test', 'age', 'age');
66
67     $query->addTag('test');
68
69     $this->assertTrue($query->hasTag('test'), 'hasTag() returned true.');
70     $this->assertFalse($query->hasTag('other'), 'hasTag() returned false.');
71   }
72
73   /**
74    * Tests extended query tagging "has all of these tags" functionality.
75    */
76   public function testExtenderHasAllTags() {
77     $query = db_select('test')
78       ->extend('Drupal\Core\Database\Query\SelectExtender');
79     $query->addField('test', 'name');
80     $query->addField('test', 'age', 'age');
81
82     $query->addTag('test');
83     $query->addTag('other');
84
85     $this->assertTrue($query->hasAllTags('test', 'other'), 'hasAllTags() returned true.');
86     $this->assertFalse($query->hasAllTags('test', 'stuff'), 'hasAllTags() returned false.');
87   }
88
89   /**
90    * Tests extended query tagging "has at least one of these tags" functionality.
91    */
92   public function testExtenderHasAnyTag() {
93     $query = db_select('test')
94       ->extend('Drupal\Core\Database\Query\SelectExtender');
95     $query->addField('test', 'name');
96     $query->addField('test', 'age', 'age');
97
98     $query->addTag('test');
99
100     $this->assertTrue($query->hasAnyTag('test', 'other'), 'hasAnyTag() returned true.');
101     $this->assertFalse($query->hasAnyTag('other', 'stuff'), 'hasAnyTag() returned false.');
102   }
103
104   /**
105    * Tests that we can attach metadata to a query object.
106    *
107    * This is how we pass additional context to alter hooks.
108    */
109   public function testMetaData() {
110     $query = db_select('test');
111     $query->addField('test', 'name');
112     $query->addField('test', 'age', 'age');
113
114     $data = [
115       'a' => 'A',
116       'b' => 'B',
117     ];
118
119     $query->addMetaData('test', $data);
120
121     $return = $query->getMetaData('test');
122     $this->assertEqual($data, $return, 'Correct metadata returned.');
123
124     $return = $query->getMetaData('nothere');
125     $this->assertNull($return, 'Non-existent key returned NULL.');
126   }
127
128 }