diff --git a/core/modules/history/src/Tests/HistoryTest.php b/core/modules/history/tests/src/Functional/HistoryTest.php similarity index 53% rename from core/modules/history/src/Tests/HistoryTest.php rename to core/modules/history/tests/src/Functional/HistoryTest.php index b74ba6b454..1837348401 100644 --- a/core/modules/history/src/Tests/HistoryTest.php +++ b/core/modules/history/tests/src/Functional/HistoryTest.php @@ -1,16 +1,21 @@ user = $this->drupalCreateUser(['create page content', 'access content']); $this->drupalLogin($this->user); $this->testNode = $this->drupalCreateNode(['type' => 'page', 'uid' => $this->user->id()]); + + + $domain = parse_url($this->getUrl(), PHP_URL_HOST); + $session_id = $this->getSession()->getCookie($this->getSessionName()); + $this->cookies = CookieJar::fromArray([$this->getSessionName() => $session_id], $domain); + $this->client = $this->getSession()->getDriver()->getClient()->getClient(); } /** @@ -49,34 +74,23 @@ protected function setUp() { * @param array $node_ids * An array of node IDs. * - * @return string - * The response body. + * @return \Psr\Http\Message\ResponseInterface + * The response object. */ protected function getNodeReadTimestamps(array $node_ids) { - // Build POST values. - $post = []; - for ($i = 0; $i < count($node_ids); $i++) { - $post['node_ids[' . $i . ']'] = $node_ids[$i]; - } - - // Serialize POST values. - foreach ($post as $key => $value) { - // Encode according to application/x-www-form-urlencoded - // Both names and values needs to be urlencoded, according to - // http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 - $post[$key] = urlencode($key) . '=' . urlencode($value); - } - $post = implode('&', $post); // Perform HTTP request. - return $this->curlExec([ - CURLOPT_URL => \Drupal::url('history.get_last_node_view', [], ['absolute' => TRUE]), - CURLOPT_POST => TRUE, - CURLOPT_POSTFIELDS => $post, - CURLOPT_HTTPHEADER => [ - 'Accept: application/json', - 'Content-Type: application/x-www-form-urlencoded', + $url = Url::fromRoute('history.get_last_node_view') + ->setAbsolute() + ->toString(); + return $this->client->post($url, [ + 'body' => http_build_query(['node_ids' => $node_ids]), + 'cookies' => $this->cookies, + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/x-www-form-urlencoded', ], + 'http_errors' => FALSE, ]); } @@ -86,15 +100,17 @@ protected function getNodeReadTimestamps(array $node_ids) { * @param int $node_id * A node ID. * - * @return string + * @return \Psr\Http\Message\ResponseInterface * The response body. */ protected function markNodeAsRead($node_id) { - return $this->curlExec([ - CURLOPT_URL => \Drupal::url('history.read_node', ['node' => $node_id], ['absolute' => TRUE]), - CURLOPT_HTTPHEADER => [ - 'Accept: application/json', + $url = Url::fromRoute('history.read_node', ['node' => $node_id], ['absolute' => TRUE])->toString(); + return $this->client->post($url, [ + 'cookies' => $this->cookies, + 'headers' => [ + 'Accept' => 'application/json', ], + 'http_errors' => FALSE, ]); } @@ -106,8 +122,8 @@ public function testHistory() { // Retrieve "last read" timestamp for test node, for the current user. $response = $this->getNodeReadTimestamps([$nid]); - $this->assertResponse(200); - $json = Json::decode($response); + $this->assertEquals(200, $response->getStatusCode()); + $json = Json::decode($response->getBody()); $this->assertIdentical([1 => 0], $json, 'The node has not yet been read.'); // View the node. @@ -121,28 +137,28 @@ public function testHistory() { // Simulate JavaScript: perform HTTP request to mark node as read. $response = $this->markNodeAsRead($nid); - $this->assertResponse(200); - $timestamp = Json::decode($response); + $this->assertEquals(200, $response->getStatusCode()); + $timestamp = Json::decode($response->getBody()); $this->assertTrue(is_numeric($timestamp), 'Node has been marked as read. Timestamp received.'); // Retrieve "last read" timestamp for test node, for the current user. $response = $this->getNodeReadTimestamps([$nid]); - $this->assertResponse(200); - $json = Json::decode($response); + $this->assertEquals(200, $response->getStatusCode()); + $json = Json::decode($response->getBody()); $this->assertIdentical([1 => $timestamp], $json, 'The node has been read.'); // Failing to specify node IDs for the first endpoint should return a 404. - $this->getNodeReadTimestamps([]); - $this->assertResponse(404); + $response = $this->getNodeReadTimestamps([]); + $this->assertEquals(404, $response->getStatusCode()); // Accessing either endpoint as the anonymous user should return a 403. $this->drupalLogout(); - $this->getNodeReadTimestamps([$nid]); - $this->assertResponse(403); - $this->getNodeReadTimestamps([]); - $this->assertResponse(403); - $this->markNodeAsRead($nid); - $this->assertResponse(403); + $response = $this->getNodeReadTimestamps([$nid]); + $this->assertEquals(403, $response->getStatusCode()); + $response = $this->getNodeReadTimestamps([]); + $this->assertEquals(403, $response->getStatusCode()); + $response = $this->markNodeAsRead($nid); + $this->assertEquals(403, $response->getStatusCode()); } }