3 declare(strict_types
=1);
5 namespace Shaarli\Legacy
;
7 use PHPUnit\Framework\TestCase
;
8 use Shaarli\Front\Controller\Visitor\FrontControllerMockHelper
;
10 use Slim\Http\Response
;
12 class LegacyControllerTest
extends TestCase
14 use FrontControllerMockHelper
;
16 /** @var LegacyController */
17 protected $controller;
19 public function setUp(): void
21 $this->createContainer();
23 $this->controller
= new LegacyController($this->container
);
27 * @dataProvider getProcessProvider
29 public function testProcess(string $legacyRoute, array $queryParameters, string $slimRoute, bool $isLoggedIn): void
31 $request = $this->createMock(Request
::class);
32 $request->method('getQueryParams')->willReturn($queryParameters);
35 ->willReturnCallback(function (string $key) use ($queryParameters): ?string {
36 return $queryParameters[$key] ?? null;
39 $response = new Response();
41 $this->container
->loginManager
->method('isLoggedIn')->willReturn($isLoggedIn);
43 $result = $this->controller
->process($request, $response, $legacyRoute);
45 static::assertSame('/subfolder' . $slimRoute, $result->getHeader('location')[0]);
48 public function testProcessNotFound(): void
50 $request = $this->createMock(Request
::class);
51 $response = new Response();
53 $this->expectException(UnknowLegacyRouteException
::class);
55 $this->controller
->process($request, $response, 'nope');
59 * @return array[] Parameters:
60 * - string legacyRoute
61 * - array queryParameters
65 public function getProcessProvider(): array
68 ['post', [], '/admin/shaare', true],
69 ['post', [], '/login', false],
70 ['post', ['title' => 'test'], '/admin/shaare?title=test', true],
71 ['post', ['title' => 'test'], '/login?title=test', false],
72 ['addlink', [], '/admin/add-shaare', true],
73 ['addlink', [], '/login', 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],