Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\dblog\Tests\Rest;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Serialization\Json;
|
Chris@0
|
6 use Drupal\Core\Url;
|
Chris@0
|
7 use Drupal\rest\Tests\RESTTestBase;
|
Chris@0
|
8
|
Chris@0
|
9 /**
|
Chris@0
|
10 * Tests the watchdog database log resource.
|
Chris@0
|
11 *
|
Chris@0
|
12 * @group dblog
|
Chris@0
|
13 */
|
Chris@0
|
14 class DbLogResourceTest extends RESTTestBase {
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Modules to enable.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @var array
|
Chris@0
|
20 */
|
Chris@0
|
21 public static $modules = ['hal', 'dblog'];
|
Chris@0
|
22
|
Chris@0
|
23 protected function setUp() {
|
Chris@0
|
24 parent::setUp();
|
Chris@0
|
25 // Enable REST API for the watchdog resource.
|
Chris@0
|
26 $this->enableService('dblog');
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Writes a log messages and retrieves it via the REST API.
|
Chris@0
|
31 */
|
Chris@0
|
32 public function testWatchdog() {
|
Chris@0
|
33 // Write a log message to the DB.
|
Chris@0
|
34 $this->container->get('logger.channel.rest')->notice('Test message');
|
Chris@0
|
35 // Get the ID of the written message.
|
Chris@0
|
36 $id = db_query_range("SELECT wid FROM {watchdog} WHERE type = :type ORDER BY wid DESC", 0, 1, [':type' => 'rest'])
|
Chris@0
|
37 ->fetchField();
|
Chris@0
|
38
|
Chris@0
|
39 // Create a user account that has the required permissions to read
|
Chris@0
|
40 // the watchdog resource via the REST API.
|
Chris@0
|
41 $account = $this->drupalCreateUser(['restful get dblog']);
|
Chris@0
|
42 $this->drupalLogin($account);
|
Chris@0
|
43
|
Chris@0
|
44 $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => $id, '_format' => $this->defaultFormat]), 'GET');
|
Chris@0
|
45 $this->assertResponse(200);
|
Chris@0
|
46 $this->assertHeader('content-type', $this->defaultMimeType);
|
Chris@0
|
47 $log = Json::decode($response);
|
Chris@0
|
48 $this->assertEqual($log['wid'], $id, 'Log ID is correct.');
|
Chris@0
|
49 $this->assertEqual($log['type'], 'rest', 'Type of log message is correct.');
|
Chris@0
|
50 $this->assertEqual($log['message'], 'Test message', 'Log message text is correct.');
|
Chris@0
|
51
|
Chris@0
|
52 // Request an unknown log entry.
|
Chris@0
|
53 $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 9999, '_format' => $this->defaultFormat]), 'GET');
|
Chris@0
|
54 $this->assertResponse(404);
|
Chris@0
|
55 $decoded = Json::decode($response);
|
Chris@0
|
56 $this->assertEqual($decoded['message'], 'Log entry with ID 9999 was not found', 'Response message is correct.');
|
Chris@0
|
57
|
Chris@0
|
58 // Make a bad request (a true malformed request would never be a route match).
|
Chris@0
|
59 $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 0, '_format' => $this->defaultFormat]), 'GET');
|
Chris@0
|
60 $this->assertResponse(400);
|
Chris@0
|
61 $decoded = Json::decode($response);
|
Chris@0
|
62 $this->assertEqual($decoded['message'], 'No log entry ID was provided', 'Response message is correct.');
|
Chris@0
|
63 }
|
Chris@0
|
64
|
Chris@0
|
65 }
|