X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fredirect%2Ftests%2Fsrc%2FUnit%2FRedirectCheckerTest.php;fp=web%2Fmodules%2Fcontrib%2Fredirect%2Ftests%2Fsrc%2FUnit%2FRedirectCheckerTest.php;h=35f82332323dd7266858cf45e8eaf58cad0f3f63;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/redirect/tests/src/Unit/RedirectCheckerTest.php b/web/modules/contrib/redirect/tests/src/Unit/RedirectCheckerTest.php new file mode 100644 index 000000000..35f823323 --- /dev/null +++ b/web/modules/contrib/redirect/tests/src/Unit/RedirectCheckerTest.php @@ -0,0 +1,155 @@ + array('ignore_admin_path' => FALSE, 'access_check' => TRUE)); + + $state = $this->getMockBuilder('Drupal\Core\State\StateInterface') + ->getMock(); + $state->expects($this->any()) + ->method('get') + ->with('system.maintenance_mode') + ->will($this->returnValue(FALSE)); + $access = $this->getMockBuilder('Drupal\Core\Access\AccessManager') + ->disableOriginalConstructor() + ->getMock(); + $account = $this->getMockBuilder('Drupal\Core\Session\AccountInterface') + ->getMock(); + $route_provider = $this->getMockBuilder('Drupal\Core\Routing\RouteProviderInterface') + ->getMock(); + + $route = new Route('/example'); + $route_provider->expects($this->any()) + ->method('getRouteByName') + ->willReturn($route); + + $access->expects($this->any()) + ->method('checkNamedRoute') + ->willReturnMap([ + ['denied_route', [], $account, FALSE, FALSE], + ['allowed_route', [], $account, FALSE, TRUE], + ]); + + $checker = new RedirectChecker($this->getConfigFactoryStub($config), $state, $access, $account, $route_provider); + + // All fine - we can redirect. + $request = $this->getRequestStub('index.php', 'GET'); + $this->assertTrue($checker->canRedirect($request), 'Can redirect'); + + // The script name is not index.php. + $request = $this->getRequestStub('statistics.php', 'GET'); + $this->assertFalse($checker->canRedirect($request), 'Cannot redirect script name not index.php'); + + // The request method is not GET. + $request = $this->getRequestStub('index.php', 'POST'); + $this->assertFalse($checker->canRedirect($request), 'Cannot redirect other than GET method'); + + + // Route access check, deny access. + $request = $this->getRequestStub('index.php', 'GET'); + $this->assertFalse($checker->canRedirect($request, 'denied_route'), 'Can not redirect'); + + // Route access check, allow access. + $request = $this->getRequestStub('index.php', 'GET'); + $this->assertTrue($checker->canRedirect($request, 'allowed_route'), 'Can redirect'); + + // Check destination parameter. + $request = $this->getRequestStub('index.php', 'GET', [], ['destination' => 'paradise']); + $this->assertFalse($checker->canRedirect($request), 'Cannot redirect'); + + // Maintenance mode is on. + $state = $this->getMockBuilder('Drupal\Core\State\StateInterface') + ->getMock(); + $state->expects($this->any()) + ->method('get') + ->with('system.maintenance_mode') + ->will($this->returnValue(TRUE)); + + $checker = new RedirectChecker($this->getConfigFactoryStub($config), $state, $access, $account, $route_provider); + + $request = $this->getRequestStub('index.php', 'GET'); + $this->assertFalse($checker->canRedirect($request), 'Cannot redirect if maintenance mode is on'); + + // We are at a admin path. + $state = $this->getMockBuilder('Drupal\Core\State\StateInterface') + ->getMock(); + $state->expects($this->any()) + ->method('get') + ->with('system.maintenance_mode') + ->will($this->returnValue(FALSE)); + +// $checker = new RedirectChecker($this->getConfigFactoryStub($config), $state); +// +// $route = $this->getMockBuilder('Symfony\Component\Routing\Route') +// ->disableOriginalConstructor() +// ->getMock(); +// $route->expects($this->any()) +// ->method('getOption') +// ->with('_admin_route') +// ->will($this->returnValue('system.admin_config_search')); +// +// $request = $this->getRequestStub('index.php', 'GET', +// array(RouteObjectInterface::ROUTE_OBJECT => $route)); +// $this->assertFalse($checker->canRedirect($request), 'Cannot redirect if we are requesting a admin path'); +// +// // We are at admin path with ignore_admin_path set to TRUE. +// $config['redirect.settings']['ignore_admin_path'] = TRUE; +// $checker = new RedirectChecker($this->getConfigFactoryStub($config), $state); +// +// $request = $this->getRequestStub('index.php', 'GET', +// array(RouteObjectInterface::ROUTE_OBJECT => $route)); +// $this->assertTrue($checker->canRedirect($request), 'Can redirect a admin with ignore_admin_path set to TRUE'); + } + + /** + * Gets request mock object. + * + * @param string $script_name + * The result of the getScriptName() method. + * @param string $method + * The request method. + * @param array $attributes + * Attributes to be passed into request->attributes. + * @param array $query + * Query paramter to be passed into request->query. + * + * @return PHPUnit_Framework_MockObject_MockObject + * Mocked request object. + */ + protected function getRequestStub($script_name, $method, array $attributes = [], array $query = []) { + $request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request') + ->disableOriginalConstructor() + ->getMock(); + $request->expects($this->any()) + ->method('getScriptName') + ->will($this->returnValue($script_name)); + $request->expects($this->any()) + ->method('isMethod') + ->with($this->anything()) + ->will($this->returnValue($method == 'GET')); + $request->query = new ParameterBag($query); + $request->attributes = new ParameterBag($attributes); + + return $request; + } + +}