3 namespace Drupal\Tests\devel\Kernel;
5 use Drupal\KernelTests\KernelTestBase;
6 use Drupal\user\Entity\Role;
7 use Drupal\user\Entity\User;
14 class DevelQueryDebugTest extends KernelTestBase {
19 public static $modules = ['devel', 'system', 'user'];
22 * The user used in test.
24 * @var \Drupal\user\UserInterface
31 protected function setUp() {
34 $this->installSchema('system', 'sequences');
35 $this->installConfig(['system', 'devel']);
36 $this->installEntitySchema('user');
38 $devel_role = Role::create([
40 'permissions' => ['access devel information'],
44 $this->develUser = User::create([
45 'name' => $this->randomMachineName(),
46 'roles' => [$devel_role->id()],
48 $this->develUser->save();
52 * Tests devel_query_debug_alter() for select queries.
54 public function testSelectQueryDebugTag() {
55 // Clear the messages stack.
56 $this->getDrupalMessages();
58 // Ensures that no debug message is shown to user without the adequate
60 $query = \Drupal::database()->select('users', 'u');
61 $query->fields('u', ['uid']);
62 $query->addTag('debug');
65 $messages = $this->getDrupalMessages();
66 $this->assertEmpty($messages);
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";
74 $query = \Drupal::database()->select('users', 'u');
75 $query->fields('u', ['uid']);
76 $query->addTag('debug');
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);
86 * Tests devel_query_debug_alter() for entity queries.
88 public function testEntityQueryDebugTag() {
89 // Clear the messages stack.
90 $this->getDrupalMessages();
92 // Ensures that no debug message is shown to user without the adequate
94 $query = \Drupal::entityQuery('user');
95 $query->addTag('debug');
98 $messages = $this->getDrupalMessages();
99 $this->assertEmpty($messages);
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";
107 $query = \Drupal::entityQuery('user');
108 $query->addTag('debug');
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);
118 * Retrieves the drupal messages.
123 protected function getDrupalMessages() {
124 return drupal_get_messages();