DrupalMinkClientTest.php
Namespace
Drupal\BuildTests\Framework\TestsFile
-
core/
tests/ Drupal/ BuildTests/ Framework/ Tests/ DrupalMinkClientTest.php
View source
<?php
namespace Drupal\BuildTests\Framework\Tests;
use Drupal\BuildTests\Framework\DrupalMinkClient;
use PHPUnit\Framework\TestCase;
use Symfony\Component\BrowserKit\Response;
/**
* Test \Drupal\BuildTests\Framework\DrupalMinkClient.
*
* This test is adapted from \Symfony\Component\BrowserKit\Tests\ClientTest.
*
* @coversDefaultClass \Drupal\BuildTests\Framework\DrupalMinkClient
*
* @group Build
*/
class DrupalMinkClientTest extends TestCase {
/**
* @dataProvider getTestsForMetaRefresh
* @covers ::getMetaRefreshUrl
*/
public function testFollowMetaRefresh(string $content, string $expectedEndingUrl, bool $followMetaRefresh = TRUE) {
$client = new TestClient();
$client->followMetaRefresh($followMetaRefresh);
$client->setNextResponse(new Response($content));
$client->request('GET', 'http://www.example.com/foo/foobar');
$this->assertEquals($expectedEndingUrl, $client->getRequest()
->getUri());
}
public function getTestsForMetaRefresh() {
return [
[
'<html><head><meta http-equiv="Refresh" content="4" /><meta http-equiv="refresh" content="0; URL=http://www.example.com/redirected"/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><meta http-equiv="refresh" content="0;URL=http://www.example.com/redirected"/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><meta http-equiv="refresh" content="0;URL=\'http://www.example.com/redirected\'"/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><meta http-equiv="refresh" content=\'0;URL="http://www.example.com/redirected"\'/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><meta http-equiv="refresh" content="0; URL = http://www.example.com/redirected"/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><meta http-equiv="refresh" content="0;URL= http://www.example.com/redirected "/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><meta http-equiv="refresh" content="0;url=http://www.example.com/redirected "/></head></html>',
'http://www.example.com/redirected',
],
[
'<html><head><noscript><meta http-equiv="refresh" content="0;URL=http://www.example.com/redirected"/></noscript></head></head></html>',
'http://www.example.com/redirected',
],
// Non-zero timeout should not result in a redirect.
[
'<html><head><meta http-equiv="refresh" content="4; URL=http://www.example.com/redirected"/></head></html>',
'http://www.example.com/foo/foobar',
],
[
'<html><body></body></html>',
'http://www.example.com/foo/foobar',
],
// HTML 5 allows the meta tag to be placed in head or body.
[
'<html><body><meta http-equiv="refresh" content="0;url=http://www.example.com/redirected"/></body></html>',
'http://www.example.com/redirected',
],
// Valid meta refresh should not be followed if disabled.
[
'<html><head><meta http-equiv="refresh" content="0;URL=http://www.example.com/redirected"/></head></html>',
'http://www.example.com/foo/foobar',
FALSE,
],
'drupal-1' => [
'<html><head><meta http-equiv="Refresh" content="0; URL=/update.php/start?id=2&op=do_nojs" /></body></html>',
'http://www.example.com/update.php/start?id=2&op=do_nojs',
],
'drupal-2' => [
'<html><head><noscript><meta http-equiv="Refresh" content="0; URL=/update.php/start?id=2&op=do_nojs" /></noscript></body></html>',
'http://www.example.com/update.php/start?id=2&op=do_nojs',
],
];
}
/**
* @covers ::request
*/
public function testBackForwardMetaRefresh() {
$client = new TestClient();
$client->followMetaRefresh();
// First request.
$client->request('GET', 'http://www.example.com/first-page');
$content = '<html><head><meta http-equiv="Refresh" content="0; URL=/refreshed" /></body></html>';
$client->setNextResponse(new Response($content, 200));
$client->request('GET', 'http://www.example.com/refresh-from-here');
$this->assertEquals('http://www.example.com/refreshed', $client->getRequest()
->getUri());
$client->back();
$this->assertEquals('http://www.example.com/first-page', $client->getRequest()
->getUri());
$client->forward();
$this->assertEquals('http://www.example.com/refreshed', $client->getRequest()
->getUri());
}
}
/**
* Special client that can return a given response on the first doRequest().
*/
class TestClient extends DrupalMinkClient {
protected $nextResponse = NULL;
public function setNextResponse(Response $response) {
$this->nextResponse = $response;
}
protected function doRequest($request) {
if (NULL === $this->nextResponse) {
return new Response();
}
$response = $this->nextResponse;
$this->nextResponse = NULL;
return $response;
}
}
Classes
Title | Deprecated | Summary |
---|---|---|
DrupalMinkClientTest | Test \Drupal\BuildTests\Framework\DrupalMinkClient. | |
TestClient | Special client that can return a given response on the first doRequest(). |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.