You are here

public function DbLogResourceTest::testWatchdog in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php \Drupal\dblog\Tests\Rest\DbLogResourceTest::testWatchdog()

Writes a log messages and retrieves it via the REST API.

File

core/modules/dblog/src/Tests/Rest/DbLogResourceTest.php, line 37
Contains \Drupal\dblog\Tests\Rest\DbLogResourceTest.

Class

DbLogResourceTest
Tests the watchdog database log resource.

Namespace

Drupal\dblog\Tests\Rest

Code

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, array(
    ':type' => 'rest',
  ))
    ->fetchField();

  // Create a user account that has the required permissions to read
  // the watchdog resource via the REST API.
  $account = $this
    ->drupalCreateUser(array(
    '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['error'], 'Log entry with ID 9999 was not found', 'Response message is correct.');
}