3f129258a515f7fe31b4334ff3704e15b394d44f
[yaffs-website] / web / modules / contrib / devel / tests / src / Kernel / DevelQueryDebugTest.php
1 <?php
2
3 namespace Drupal\Tests\devel\Kernel;
4
5 use Drupal\KernelTests\KernelTestBase;
6 use Drupal\user\Entity\Role;
7 use Drupal\user\Entity\User;
8
9 /**
10  * Tests query debug.
11  *
12  * @group devel
13  */
14 class DevelQueryDebugTest extends KernelTestBase {
15
16   /**
17    * {@inheritdoc}
18    */
19   public static $modules = ['devel', 'system', 'user'];
20
21   /**
22    * The user used in test.
23    *
24    * @var \Drupal\user\UserInterface
25    */
26   protected $develUser;
27
28   /**
29    * {@inheritdoc}
30    */
31   protected function setUp() {
32     parent::setUp();
33
34     $this->installSchema('system', 'sequences');
35     $this->installConfig(['system', 'devel']);
36     $this->installEntitySchema('user');
37
38     $devel_role = Role::create([
39       'id' => 'admin',
40       'permissions' => ['access devel information'],
41     ]);
42     $devel_role->save();
43
44     $this->develUser = User::create([
45       'name' => $this->randomMachineName(),
46       'roles' => [$devel_role->id()],
47     ]);
48     $this->develUser->save();
49   }
50
51   /**
52    * Tests devel_query_debug_alter() for select queries.
53    */
54   public function testSelectQueryDebugTag() {
55     // Clear the messages stack.
56     $this->getDrupalMessages();
57
58     // Ensures that no debug message is shown to user without the adequate
59     // permissions.
60     $query = \Drupal::database()->select('users', 'u');
61     $query->fields('u', ['uid']);
62     $query->addTag('debug');
63     $query->execute();
64
65     $messages = $this->getDrupalMessages();
66     $this->assertEmpty($messages);
67
68     // Ensures that the SQL debug message is shown to user with the adequate
69     // permissions. We expect only one status message containing the SQL for
70     // the debugged query.
71     \Drupal::currentUser()->setAccount($this->develUser);
72     $expected_message = "SELECT u.uid AS uid\nFROM \n{users} u";
73
74     $query = \Drupal::database()->select('users', 'u');
75     $query->fields('u', ['uid']);
76     $query->addTag('debug');
77     $query->execute();
78
79     $messages = $this->getDrupalMessages();
80     $this->assertTrue(!empty($messages['status']));
81     $this->assertCount(1, $messages['status']);
82     $this->assertEquals(strip_tags($messages['status'][0]), $expected_message);
83   }
84
85   /**
86    * Tests devel_query_debug_alter() for entity queries.
87    */
88   public function testEntityQueryDebugTag() {
89     // Clear the messages stack.
90     $this->getDrupalMessages();
91
92     // Ensures that no debug message is shown to user without the adequate
93     // permissions.
94     $query = \Drupal::entityQuery('user');
95     $query->addTag('debug');
96     $query->execute();
97
98     $messages = $this->getDrupalMessages();
99     $this->assertEmpty($messages);
100
101     // Ensures that the SQL debug message is shown to user with the adequate
102     // permissions. We expect only one status message containing the SQL for
103     // the debugged entity query.
104     \Drupal::currentUser()->setAccount($this->develUser);
105     $expected_message = "SELECT base_table.uid AS uid, base_table.uid AS base_table_uid\nFROM \n{users} base_table";
106
107     $query = \Drupal::entityQuery('user');
108     $query->addTag('debug');
109     $query->execute();
110
111     $messages = $this->getDrupalMessages();
112     $this->assertTrue(!empty($messages['status']));
113     $this->assertCount(1, $messages['status']);
114     $this->assertEquals(strip_tags($messages['status'][0]), $expected_message);
115   }
116
117   /**
118    * Retrieves the drupal messages.
119    *
120    * @return array
121    *   The messages
122    */
123   protected function getDrupalMessages() {
124     return drupal_get_messages();
125   }
126
127 }