// View the node.
$this->
drupalGet('node/' .
$nid);
$this->
assertCacheContext('user.roles:authenticated'
);
// JavaScript present to record the node read.
$settings =
$this->
getDrupalSettings();
$libraries =
explode(',',
$settings['ajaxPageState'
]['libraries'
]);
$this->
assertContains('history/mark-as-read',
$libraries, 'history/mark-as-read library is present.'
);
$this->
assertEquals([$nid => TRUE
],
$settings['history'
]['nodesToMarkAsRead'
], 'drupalSettings to mark node as read are present.'
);
// Simulate JavaScript: perform HTTP request to mark node as read.
$response =
$this->
markNodeAsRead($nid);
$this->
assertEquals(200,
$response->
getStatusCode());
$timestamp = Json::
decode($response->
getBody());
$this->
assertIsNumeric($timestamp);
// Retrieve "last read" timestamp for test node, for the current user.
$response =
$this->
getNodeReadTimestamps([$nid]);
$this->
assertEquals(200,
$response->
getStatusCode());
$json = Json::
decode($response->
getBody());
$this->
assertSame([1 =>
$timestamp],
$json, 'The node has been read.'
);
// Failing to specify node IDs for the first endpoint should return a 404.