mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-24 18:58:46 +02:00
Added tests for RedirectController
This commit is contained in:
parent
40ca5bd0e4
commit
45a624d768
15 changed files with 509 additions and 6 deletions
151
tests/Controller/RedirectControllerTest.php
Normal file
151
tests/Controller/RedirectControllerTest.php
Normal file
|
@ -0,0 +1,151 @@
|
|||
<?php
|
||||
/**
|
||||
*
|
||||
* part-db version 0.1
|
||||
* Copyright (C) 2005 Christoph Lechner
|
||||
* http://www.cl-projects.de/
|
||||
*
|
||||
* part-db version 0.2+
|
||||
* Copyright (C) 2009 K. Jacobs and others (see authors.php)
|
||||
* http://code.google.com/p/part-db/
|
||||
*
|
||||
* Part-DB Version 0.4+
|
||||
* Copyright (C) 2016 - 2019 Jan Böhmer
|
||||
* https://github.com/jbtronics
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*
|
||||
*/
|
||||
|
||||
namespace App\Tests\Controller;
|
||||
|
||||
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Proxies\__CG__\App\Entity\UserSystem\User;
|
||||
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||
|
||||
class RedirectControllerTest extends WebTestCase
|
||||
{
|
||||
protected $em;
|
||||
protected $userRepo;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
self::bootKernel();
|
||||
$this->em = self::$container->get(EntityManagerInterface::class);
|
||||
$this->userRepo = $this->em->getRepository(User::class);
|
||||
}
|
||||
|
||||
public function urlMatchDataProvider()
|
||||
{
|
||||
return [
|
||||
['/', true],
|
||||
['/part/2/info', true],
|
||||
['/part/de/2', true],
|
||||
['/part/en/', true],
|
||||
['/de/', false],
|
||||
['/de_DE/', false],
|
||||
['/en/', false],
|
||||
['/en_US/', false],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if a certain request to an url will be redirected.
|
||||
* @dataProvider urlMatchDataProvider
|
||||
*/
|
||||
public function testUrlMatch($url, $expect_redirect)
|
||||
{
|
||||
$client = static::createClient();
|
||||
$client->request('GET', $url);
|
||||
$response = $client->getResponse();
|
||||
if($expect_redirect) {
|
||||
$this->assertEquals(302, $response->getStatusCode());
|
||||
}
|
||||
$this->assertEquals($expect_redirect, $response->isRedirect());
|
||||
}
|
||||
|
||||
public function urlAddLocaleDataProvider()
|
||||
{
|
||||
return [
|
||||
//User locale, original target, redirect target
|
||||
['de', '/', '/de/'],
|
||||
['de', '/part/3', '/de/part/3'],
|
||||
['en', '/', '/en/'],
|
||||
['en', '/category/new', '/en/category/new'],
|
||||
['en_US', '/part/3', '/en_US/part/3'],
|
||||
//Without an explicit set value, the user should be redirect to english version
|
||||
[null, '/', '/en/'],
|
||||
['en_US', '/part/3', '/en_US/part/3'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the user is redirected to the localized version of a page, based on his settings.
|
||||
* @dataProvider urlAddLocaleDataProvider
|
||||
* @depends testUrlMatch
|
||||
* @param $user_locale
|
||||
* @param $input_path
|
||||
* @param $redirect_path
|
||||
*/
|
||||
public function testAddLocale($user_locale, $input_path, $redirect_path)
|
||||
{
|
||||
//Redirect path is absolute
|
||||
$redirect_path = 'http://localhost' . $redirect_path;
|
||||
|
||||
/** @var User $user */
|
||||
$user = $this->userRepo->findOneBy(['name' => 'user']);
|
||||
//Set user locale
|
||||
$user->setLanguage($user_locale);
|
||||
$this->em->flush();
|
||||
|
||||
$client = static::createClient([], [
|
||||
'PHP_AUTH_USER' => 'user',
|
||||
'PHP_AUTH_PW' => 'test',
|
||||
]);
|
||||
|
||||
$client->followRedirects(false);
|
||||
$client->request('GET', $input_path);
|
||||
$this->assertEquals($redirect_path, $client->getResponse()->headers->get('Location'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the user is redirected to password change page if he should do that
|
||||
* @depends testAddLocale
|
||||
* @testWith ["de"]
|
||||
* ["en"]
|
||||
*/
|
||||
public function testRedirectToPasswordChange(string $locale)
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $this->userRepo->findOneBy(['name' => 'user']);
|
||||
|
||||
//Test for german user
|
||||
$user->setLanguage($locale);
|
||||
$user->setNeedPwChange(true);
|
||||
$this->em->flush();
|
||||
|
||||
$client = static::createClient([], [
|
||||
'PHP_AUTH_USER' => 'user',
|
||||
'PHP_AUTH_PW' => 'test',
|
||||
]);
|
||||
$client->followRedirects(false);
|
||||
|
||||
$client->request('GET', '/part/3');
|
||||
$this->assertEquals("/$locale/user/settings", $client->getResponse()->headers->get('Location'));
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue