3 declare(strict_types
=1);
5 namespace Shaarli\Front\Controller
;
7 use PHPUnit\Framework\TestCase
;
9 use Slim\Http\Response
;
11 class TagControllerTest
extends TestCase
13 use FrontControllerMockHelper
;
15 /** @var TagController */
16 protected $controller;
18 public function setUp(): void
20 $this->createContainer();
22 $this->controller
= new TagController($this->container
);
25 public function testAddTagWithReferer(): void
27 $this->createValidContainerMockSet();
29 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/'];
31 $request = $this->createMock(Request
::class);
32 $response = new Response();
34 $tags = ['newTag' => 'abc'];
36 $result = $this->controller
->addTag($request, $response, $tags);
38 static::assertInstanceOf(Response
::class, $result);
39 static::assertSame(302, $result->getStatusCode());
40 static::assertSame(['/controller/?searchtags=abc'], $result->getHeader('location'));
43 public function testAddTagWithRefererAndExistingSearch(): void
45 $this->createValidContainerMockSet();
47 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def'];
49 $request = $this->createMock(Request
::class);
50 $response = new Response();
52 $tags = ['newTag' => 'abc'];
54 $result = $this->controller
->addTag($request, $response, $tags);
56 static::assertInstanceOf(Response
::class, $result);
57 static::assertSame(302, $result->getStatusCode());
58 static::assertSame(['/controller/?searchtags=def+abc'], $result->getHeader('location'));
61 public function testAddTagWithoutRefererAndExistingSearch(): void
63 $this->createValidContainerMockSet();
65 $request = $this->createMock(Request
::class);
66 $response = new Response();
68 $tags = ['newTag' => 'abc'];
70 $result = $this->controller
->addTag($request, $response, $tags);
72 static::assertInstanceOf(Response
::class, $result);
73 static::assertSame(302, $result->getStatusCode());
74 static::assertSame(['./?searchtags=abc'], $result->getHeader('location'));
77 public function testAddTagRemoveLegacyQueryParam(): void
79 $this->createValidContainerMockSet();
81 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def&addtag=abc'];
83 $request = $this->createMock(Request
::class);
84 $response = new Response();
86 $tags = ['newTag' => 'abc'];
88 $result = $this->controller
->addTag($request, $response, $tags);
90 static::assertInstanceOf(Response
::class, $result);
91 static::assertSame(302, $result->getStatusCode());
92 static::assertSame(['/controller/?searchtags=def+abc'], $result->getHeader('location'));
95 public function testAddTagResetPagination(): void
97 $this->createValidContainerMockSet();
99 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def&page=12'];
101 $request = $this->createMock(Request
::class);
102 $response = new Response();
104 $tags = ['newTag' => 'abc'];
106 $result = $this->controller
->addTag($request, $response, $tags);
108 static::assertInstanceOf(Response
::class, $result);
109 static::assertSame(302, $result->getStatusCode());
110 static::assertSame(['/controller/?searchtags=def+abc'], $result->getHeader('location'));
113 public function testAddTagWithRefererAndEmptySearch(): void
115 $this->createValidContainerMockSet();
117 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags='];
119 $request = $this->createMock(Request
::class);
120 $response = new Response();
122 $tags = ['newTag' => 'abc'];
124 $result = $this->controller
->addTag($request, $response, $tags);
126 static::assertInstanceOf(Response
::class, $result);
127 static::assertSame(302, $result->getStatusCode());
128 static::assertSame(['/controller/?searchtags=abc'], $result->getHeader('location'));
131 public function testAddTagWithoutNewTagWithReferer(): void
133 $this->createValidContainerMockSet();
135 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def'];
137 $request = $this->createMock(Request
::class);
138 $response = new Response();
140 $result = $this->controller
->addTag($request, $response, []);
142 static::assertInstanceOf(Response
::class, $result);
143 static::assertSame(302, $result->getStatusCode());
144 static::assertSame(['/controller/?searchtags=def'], $result->getHeader('location'));
147 public function testAddTagWithoutNewTagWithoutReferer(): void
149 $this->createValidContainerMockSet();
151 $request = $this->createMock(Request
::class);
152 $response = new Response();
154 $result = $this->controller
->addTag($request, $response, []);
156 static::assertInstanceOf(Response
::class, $result);
157 static::assertSame(302, $result->getStatusCode());
158 static::assertSame(['./'], $result->getHeader('location'));
161 public function testRemoveTagWithoutMatchingTag(): void
163 $this->createValidContainerMockSet();
165 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtags=def'];
167 $request = $this->createMock(Request
::class);
168 $response = new Response();
170 $tags = ['tag' => 'abc'];
172 $result = $this->controller
->removeTag($request, $response, $tags);
174 static::assertInstanceOf(Response
::class, $result);
175 static::assertSame(302, $result->getStatusCode());
176 static::assertSame(['/controller/?searchtags=def'], $result->getHeader('location'));
179 public function testRemoveTagWithoutTagsearch(): void
181 $this->createValidContainerMockSet();
183 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/'];
185 $request = $this->createMock(Request
::class);
186 $response = new Response();
188 $tags = ['tag' => 'abc'];
190 $result = $this->controller
->removeTag($request, $response, $tags);
192 static::assertInstanceOf(Response
::class, $result);
193 static::assertSame(302, $result->getStatusCode());
194 static::assertSame(['/controller/'], $result->getHeader('location'));
197 public function testRemoveTagWithoutReferer(): void
199 $this->createValidContainerMockSet();
201 $request = $this->createMock(Request
::class);
202 $response = new Response();
204 $tags = ['tag' => 'abc'];
206 $result = $this->controller
->removeTag($request, $response, $tags);
208 static::assertInstanceOf(Response
::class, $result);
209 static::assertSame(302, $result->getStatusCode());
210 static::assertSame(['./'], $result->getHeader('location'));
213 public function testRemoveTagWithoutTag(): void
215 $this->createValidContainerMockSet();
217 $this->container
->environment
= ['HTTP_REFERER' => 'http://shaarli/controller/?searchtag=abc'];
219 $request = $this->createMock(Request
::class);
220 $response = new Response();
222 $result = $this->controller
->removeTag($request, $response, []);
224 static::assertInstanceOf(Response
::class, $result);
225 static::assertSame(302, $result->getStatusCode());
226 static::assertSame(['/controller/?searchtag=abc'], $result->getHeader('location'));
229 public function testRemoveTagWithoutTagWithoutReferer(): void
231 $this->createValidContainerMockSet();
233 $request = $this->createMock(Request
::class);
234 $response = new Response();
236 $result = $this->controller
->removeTag($request, $response, []);
238 static::assertInstanceOf(Response
::class, $result);
239 static::assertSame(302, $result->getStatusCode());
240 static::assertSame(['./'], $result->getHeader('location'));