TaggingTest.php 3.7 KB

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