3 namespace Drupal\KernelTests\Core\Database;
6 * Tests the tagging capabilities of the Select builder.
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".
13 class TaggingTest extends DatabaseTestBase {
16 * Confirms that a query has a tag added to it.
18 public function testHasTag() {
19 $query = db_select('test');
20 $query->addField('test', 'name');
21 $query->addField('test', 'age', 'age');
23 $query->addTag('test');
25 $this->assertTrue($query->hasTag('test'), 'hasTag() returned true.');
26 $this->assertFalse($query->hasTag('other'), 'hasTag() returned false.');
30 * Tests query tagging "has all of these tags" functionality.
32 public function testHasAllTags() {
33 $query = db_select('test');
34 $query->addField('test', 'name');
35 $query->addField('test', 'age', 'age');
37 $query->addTag('test');
38 $query->addTag('other');
40 $this->assertTrue($query->hasAllTags('test', 'other'), 'hasAllTags() returned true.');
41 $this->assertFalse($query->hasAllTags('test', 'stuff'), 'hasAllTags() returned false.');
45 * Tests query tagging "has at least one of these tags" functionality.
47 public function testHasAnyTag() {
48 $query = db_select('test');
49 $query->addField('test', 'name');
50 $query->addField('test', 'age', 'age');
52 $query->addTag('test');
54 $this->assertTrue($query->hasAnyTag('test', 'other'), 'hasAnyTag() returned true.');
55 $this->assertFalse($query->hasAnyTag('other', 'stuff'), 'hasAnyTag() returned false.');
59 * Confirms that an extended query has a tag added to it.
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');
67 $query->addTag('test');
69 $this->assertTrue($query->hasTag('test'), 'hasTag() returned true.');
70 $this->assertFalse($query->hasTag('other'), 'hasTag() returned false.');
74 * Tests extended query tagging "has all of these tags" functionality.
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');
82 $query->addTag('test');
83 $query->addTag('other');
85 $this->assertTrue($query->hasAllTags('test', 'other'), 'hasAllTags() returned true.');
86 $this->assertFalse($query->hasAllTags('test', 'stuff'), 'hasAllTags() returned false.');
90 * Tests extended query tagging "has at least one of these tags" functionality.
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');
98 $query->addTag('test');
100 $this->assertTrue($query->hasAnyTag('test', 'other'), 'hasAnyTag() returned true.');
101 $this->assertFalse($query->hasAnyTag('other', 'stuff'), 'hasAnyTag() returned false.');
105 * Tests that we can attach metadata to a query object.
107 * This is how we pass additional context to alter hooks.
109 public function testMetaData() {
110 $query = db_select('test');
111 $query->addField('test', 'name');
112 $query->addField('test', 'age', 'age');
119 $query->addMetaData('test', $data);
121 $return = $query->getMetaData('test');
122 $this->assertEqual($data, $return, 'Correct metadata returned.');
124 $return = $query->getMetaData('nothere');
125 $this->assertNull($return, 'Non-existent key returned NULL.');