/**
* @covers ::onKernelRequestCheckRedirect
+ * @dataProvider getRedirectData
*/
- public function testRedirectLogicWithQueryRetaining() {
+ public function testRedirectLogicWithQueryRetaining($request_uri, $request_query, $redirect_uri, $redirect_query) {
- // The request query.
- $request_query = array('key' => 'val');
- // The query defined by the redirect entity.
- $redirect_query = array('dummy' => 'value');
// The expected final query. This query must contain values defined
// by the redirect entity and values from the accessed url.
$final_query = $redirect_query + $request_query;
$url->expects($this->once())
->method('toString')
- ->willReturn('/test-path');
+ ->willReturn($redirect_uri);
$redirect = $this->getRedirectStub($url);
- $event = $this->callOnKernelRequestCheckRedirect($redirect, $request_query, TRUE);
+ $event = $this->callOnKernelRequestCheckRedirect($redirect, $request_uri, $request_query, TRUE);
$this->assertTrue($event->getResponse() instanceof RedirectResponse);
$response = $event->getResponse();
/**
* @covers ::onKernelRequestCheckRedirect
+ * @dataProvider getRedirectData
*/
- public function testRedirectLogicWithoutQueryRetaining() {
-
- // The request query.
- $request_query = array('key' => 'val');
+ public function testRedirectLogicWithoutQueryRetaining($request_uri, $request_query, $redirect_uri) {
$url = $this->getMockBuilder('Drupal\Core\Url')
->disableOriginalConstructor()
$url->expects($this->once())
->method('toString')
- ->willReturn('/test-path');
+ ->willReturn($redirect_uri);
$redirect = $this->getRedirectStub($url);
- $event = $this->callOnKernelRequestCheckRedirect($redirect, $request_query, FALSE);
+ $event = $this->callOnKernelRequestCheckRedirect($redirect, $request_uri, $request_query, FALSE);
$this->assertTrue($event->getResponse() instanceof RedirectResponse);
$response = $event->getResponse();
- $this->assertEquals('/test-path', $response->getTargetUrl());
+ $this->assertEquals($redirect_uri, $response->getTargetUrl());
$this->assertEquals(301, $response->getStatusCode());
$this->assertEquals(1, $response->headers->get('X-Redirect-ID'));
}
+ /**
+ * Data provider for both tests.
+ */
+ public function getRedirectData() {
+ return [
+ ['non-existing', ['key' => 'val'], '/test-path', ['dummy' => 'value']],
+ ['non-existing/', ['key' => 'val'], '/test-path', ['dummy' => 'value']],
+ ];
+ }
+
/**
* Instantiates the subscriber and runs onKernelRequestCheckRedirect()
*
* @param $redirect
* The redirect entity.
+ * @param $request_uri
+ * The URI of the request.
* @param array $request_query
* The query that is supposed to come via request.
* @param bool $retain_query
* @return \Symfony\Component\HttpKernel\Event\GetResponseEvent
* THe response event.
*/
- protected function callOnKernelRequestCheckRedirect($redirect, $request_query, $retain_query) {
+ protected function callOnKernelRequestCheckRedirect($redirect, $request_uri, $request_query, $retain_query) {
- $event = $this->getGetResponseEventStub('non-existing', http_build_query($request_query));
+ $event = $this->getGetResponseEventStub($request_uri, http_build_query($request_query));
$request = $event->getRequest();
$checker = $this->getMockBuilder('Drupal\redirect\RedirectChecker')