]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Legacy; | |
6 | ||
7 | use Shaarli\Front\Controller\Visitor\FrontControllerMockHelper; | |
8 | use Shaarli\TestCase; | |
9 | use Slim\Http\Request; | |
10 | use Slim\Http\Response; | |
11 | ||
12 | class LegacyControllerTest extends TestCase | |
13 | { | |
14 | use FrontControllerMockHelper; | |
15 | ||
16 | /** @var LegacyController */ | |
17 | protected $controller; | |
18 | ||
19 | public function setUp(): void | |
20 | { | |
21 | $this->createContainer(); | |
22 | ||
23 | $this->controller = new LegacyController($this->container); | |
24 | } | |
25 | ||
26 | /** | |
27 | * @dataProvider getProcessProvider | |
28 | */ | |
29 | public function testProcess(string $legacyRoute, array $queryParameters, string $slimRoute, bool $isLoggedIn): void | |
30 | { | |
31 | $request = $this->createMock(Request::class); | |
32 | $request->method('getQueryParams')->willReturn($queryParameters); | |
33 | $request | |
34 | ->method('getParam') | |
35 | ->willReturnCallback(function (string $key) use ($queryParameters): ?string { | |
36 | return $queryParameters[$key] ?? null; | |
37 | }) | |
38 | ; | |
39 | $response = new Response(); | |
40 | ||
41 | $this->container->loginManager->method('isLoggedIn')->willReturn($isLoggedIn); | |
42 | ||
43 | $result = $this->controller->process($request, $response, $legacyRoute); | |
44 | ||
45 | static::assertSame('/subfolder' . $slimRoute, $result->getHeader('location')[0]); | |
46 | } | |
47 | ||
48 | public function testProcessNotFound(): void | |
49 | { | |
50 | $request = $this->createMock(Request::class); | |
51 | $response = new Response(); | |
52 | ||
53 | $this->expectException(UnknowLegacyRouteException::class); | |
54 | ||
55 | $this->controller->process($request, $response, 'nope'); | |
56 | } | |
57 | ||
58 | /** | |
59 | * @return array[] Parameters: | |
60 | * - string legacyRoute | |
61 | * - array queryParameters | |
62 | * - string slimRoute | |
63 | * - bool isLoggedIn | |
64 | */ | |
65 | public function getProcessProvider(): array | |
66 | { | |
67 | return [ | |
68 | ['post', [], '/admin/shaare', true], | |
69 | ['post', [], '/login?returnurl=/subfolder/admin/shaare', false], | |
70 | ['post', ['title' => 'test'], '/admin/shaare?title=test', true], | |
71 | ['post', ['title' => 'test'], '/login?returnurl=/subfolder/admin/shaare?title=test', false], | |
72 | ['addlink', [], '/admin/add-shaare', true], | |
73 | ['addlink', [], '/login?returnurl=/subfolder/admin/add-shaare', false], | |
74 | ['login', [], '/login', true], | |
75 | ['login', [], '/login', false], | |
76 | ['logout', [], '/admin/logout', true], | |
77 | ['logout', [], '/admin/logout', false], | |
78 | ['picwall', [], '/picture-wall', false], | |
79 | ['picwall', [], '/picture-wall', true], | |
80 | ['tagcloud', [], '/tags/cloud', false], | |
81 | ['tagcloud', [], '/tags/cloud', true], | |
82 | ['taglist', [], '/tags/list', false], | |
83 | ['taglist', [], '/tags/list', true], | |
84 | ['daily', [], '/daily', false], | |
85 | ['daily', [], '/daily', true], | |
86 | ['daily', ['day' => '123456789', 'discard' => '1'], '/daily?day=123456789', false], | |
87 | ['rss', [], '/feed/rss', false], | |
88 | ['rss', [], '/feed/rss', true], | |
89 | ['rss', ['search' => 'filter123', 'other' => 'param'], '/feed/rss?search=filter123&other=param', false], | |
90 | ['atom', [], '/feed/atom', false], | |
91 | ['atom', [], '/feed/atom', true], | |
92 | ['atom', ['search' => 'filter123', 'other' => 'param'], '/feed/atom?search=filter123&other=param', false], | |
93 | ['opensearch', [], '/open-search', false], | |
94 | ['opensearch', [], '/open-search', true], | |
95 | ['dailyrss', [], '/daily-rss', false], | |
96 | ['dailyrss', [], '/daily-rss', true], | |
97 | ['configure', [], '/login?returnurl=/subfolder/admin/configure', false], | |
98 | ['configure', [], '/admin/configure', true], | |
99 | ]; | |
100 | } | |
101 | } |