diff core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php	Wed Nov 29 16:09:58 2017 +0000
@@ -0,0 +1,65 @@
+<?php
+
+namespace Drupal\dblog\Tests\Rest;
+
+use Drupal\Component\Serialization\Json;
+use Drupal\Core\Url;
+use Drupal\rest\Tests\RESTTestBase;
+
+/**
+ * Tests the watchdog database log resource.
+ *
+ * @group dblog
+ */
+class DbLogResourceTest extends RESTTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['hal', 'dblog'];
+
+  protected function setUp() {
+    parent::setUp();
+    // Enable REST API for the watchdog resource.
+    $this->enableService('dblog');
+  }
+
+  /**
+   * Writes a log messages and retrieves it via the REST API.
+   */
+  public function testWatchdog() {
+    // Write a log message to the DB.
+    $this->container->get('logger.channel.rest')->notice('Test message');
+    // Get the ID of the written message.
+    $id = db_query_range("SELECT wid FROM {watchdog} WHERE type = :type ORDER BY wid DESC", 0, 1, [':type' => 'rest'])
+      ->fetchField();
+
+    // Create a user account that has the required permissions to read
+    // the watchdog resource via the REST API.
+    $account = $this->drupalCreateUser(['restful get dblog']);
+    $this->drupalLogin($account);
+
+    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => $id, '_format' => $this->defaultFormat]), 'GET');
+    $this->assertResponse(200);
+    $this->assertHeader('content-type', $this->defaultMimeType);
+    $log = Json::decode($response);
+    $this->assertEqual($log['wid'], $id, 'Log ID is correct.');
+    $this->assertEqual($log['type'], 'rest', 'Type of log message is correct.');
+    $this->assertEqual($log['message'], 'Test message', 'Log message text is correct.');
+
+    // Request an unknown log entry.
+    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 9999, '_format' => $this->defaultFormat]), 'GET');
+    $this->assertResponse(404);
+    $decoded = Json::decode($response);
+    $this->assertEqual($decoded['message'], 'Log entry with ID 9999 was not found', 'Response message is correct.');
+
+    // Make a bad request (a true malformed request would never be a route match).
+    $response = $this->httpRequest(Url::fromRoute('rest.dblog.GET.' . $this->defaultFormat, ['id' => 0, '_format' => $this->defaultFormat]), 'GET');
+    $this->assertResponse(400);
+    $decoded = Json::decode($response);
+    $this->assertEqual($decoded['message'], 'No log entry ID was provided', 'Response message is correct.');
+  }
+
+}