]> git.immae.eu Git - github/shaarli/Shaarli.git/blame - tests/helper/DailyPageHelperTest.php
Daily RSS Cache: invalidate cache base on the date
[github/shaarli/Shaarli.git] / tests / helper / DailyPageHelperTest.php
CommitLineData
36e6d88d
A
1<?php
2
3declare(strict_types=1);
4
5namespace Shaarli\Helper;
6
f00600a2
A
7use DateTimeImmutable;
8use DateTimeInterface;
36e6d88d
A
9use Shaarli\Bookmark\Bookmark;
10use Shaarli\TestCase;
11use Slim\Http\Request;
12
13class DailyPageHelperTest extends TestCase
14{
15 /**
16 * @dataProvider getRequestedTypes
17 */
18 public function testExtractRequestedType(array $queryParams, string $expectedType): void
19 {
20 $request = $this->createMock(Request::class);
21 $request->method('getQueryParam')->willReturnCallback(function ($key) use ($queryParams): ?string {
22 return $queryParams[$key] ?? null;
23 });
24
25 $type = DailyPageHelper::extractRequestedType($request);
26
27 static::assertSame($type, $expectedType);
28 }
29
30 /**
31 * @dataProvider getRequestedDateTimes
32 */
33 public function testExtractRequestedDateTime(
34 string $type,
35 string $input,
36 ?Bookmark $bookmark,
f00600a2 37 DateTimeInterface $expectedDateTime,
36e6d88d
A
38 string $compareFormat = 'Ymd'
39 ): void {
40 $dateTime = DailyPageHelper::extractRequestedDateTime($type, $input, $bookmark);
41
42 static::assertSame($dateTime->format($compareFormat), $expectedDateTime->format($compareFormat));
43 }
44
45 public function testExtractRequestedDateTimeExceptionUnknownType(): void
46 {
47 $this->expectException(\Exception::class);
48 $this->expectExceptionMessage('Unsupported daily format type');
49
50 DailyPageHelper::extractRequestedDateTime('nope', null, null);
51 }
52
53 /**
54 * @dataProvider getFormatsByType
55 */
56 public function testGetFormatByType(string $type, string $expectedFormat): void
57 {
58 $format = DailyPageHelper::getFormatByType($type);
59
60 static::assertSame($expectedFormat, $format);
61 }
62
63 public function testGetFormatByTypeExceptionUnknownType(): void
64 {
65 $this->expectException(\Exception::class);
66 $this->expectExceptionMessage('Unsupported daily format type');
67
68 DailyPageHelper::getFormatByType('nope');
69 }
70
71 /**
72 * @dataProvider getStartDatesByType
73 */
74 public function testGetStartDatesByType(
75 string $type,
f00600a2
A
76 DateTimeImmutable $dateTime,
77 DateTimeInterface $expectedDateTime
36e6d88d
A
78 ): void {
79 $startDateTime = DailyPageHelper::getStartDateTimeByType($type, $dateTime);
80
81 static::assertEquals($expectedDateTime, $startDateTime);
82 }
83
84 public function testGetStartDatesByTypeExceptionUnknownType(): void
85 {
86 $this->expectException(\Exception::class);
87 $this->expectExceptionMessage('Unsupported daily format type');
88
f00600a2 89 DailyPageHelper::getStartDateTimeByType('nope', new DateTimeImmutable());
36e6d88d
A
90 }
91
92 /**
93 * @dataProvider getEndDatesByType
94 */
95 public function testGetEndDatesByType(
96 string $type,
f00600a2
A
97 DateTimeImmutable $dateTime,
98 DateTimeInterface $expectedDateTime
36e6d88d
A
99 ): void {
100 $endDateTime = DailyPageHelper::getEndDateTimeByType($type, $dateTime);
101
102 static::assertEquals($expectedDateTime, $endDateTime);
103 }
104
105 public function testGetEndDatesByTypeExceptionUnknownType(): void
106 {
107 $this->expectException(\Exception::class);
108 $this->expectExceptionMessage('Unsupported daily format type');
109
f00600a2 110 DailyPageHelper::getEndDateTimeByType('nope', new DateTimeImmutable());
36e6d88d
A
111 }
112
113 /**
114 * @dataProvider getDescriptionsByType
115 */
116 public function testGeDescriptionsByType(
117 string $type,
f00600a2 118 DateTimeImmutable $dateTime,
36e6d88d
A
119 string $expectedDescription
120 ): void {
121 $description = DailyPageHelper::getDescriptionByType($type, $dateTime);
122
123 static::assertEquals($expectedDescription, $description);
124 }
125
2883c6d0
A
126 /**
127 * @dataProvider getDescriptionsByTypeNotIncludeRelative
128 */
129 public function testGeDescriptionsByTypeNotIncludeRelative(
130 string $type,
131 \DateTimeImmutable $dateTime,
132 string $expectedDescription
133 ): void {
134 $description = DailyPageHelper::getDescriptionByType($type, $dateTime, false);
135
136 static::assertEquals($expectedDescription, $description);
137 }
138
36e6d88d
A
139 public function getDescriptionByTypeExceptionUnknownType(): void
140 {
141 $this->expectException(\Exception::class);
142 $this->expectExceptionMessage('Unsupported daily format type');
143
f00600a2 144 DailyPageHelper::getDescriptionByType('nope', new DateTimeImmutable());
36e6d88d
A
145 }
146
147 /**
148 * @dataProvider getRssLengthsByType
149 */
150 public function testGeRssLengthsByType(string $type): void {
151 $length = DailyPageHelper::getRssLengthByType($type);
152
153 static::assertIsInt($length);
154 }
155
156 public function testGeRssLengthsByTypeExceptionUnknownType(): void
157 {
158 $this->expectException(\Exception::class);
159 $this->expectExceptionMessage('Unsupported daily format type');
160
161 DailyPageHelper::getRssLengthByType('nope');
162 }
163
f00600a2
A
164 /**
165 * @dataProvider getCacheDatePeriodByType
166 */
167 public function testGetCacheDatePeriodByType(
168 string $type,
169 DateTimeImmutable $requested,
170 DateTimeInterface $start,
171 DateTimeInterface $end
172 ): void {
173 $period = DailyPageHelper::getCacheDatePeriodByType($type, $requested);
174
175 static::assertEquals($start, $period->getStartDate());
176 static::assertEquals($end, $period->getEndDate());
177 }
178
179 public function testGetCacheDatePeriodByTypeExceptionUnknownType(): void
180 {
181 $this->expectException(\Exception::class);
182 $this->expectExceptionMessage('Unsupported daily format type');
183
184 DailyPageHelper::getCacheDatePeriodByType('nope');
185 }
186
36e6d88d
A
187 /**
188 * Data provider for testExtractRequestedType() test method.
189 */
190 public function getRequestedTypes(): array
191 {
192 return [
193 [['month' => null], DailyPageHelper::DAY],
194 [['month' => ''], DailyPageHelper::MONTH],
195 [['month' => 'content'], DailyPageHelper::MONTH],
196 [['week' => null], DailyPageHelper::DAY],
197 [['week' => ''], DailyPageHelper::WEEK],
198 [['week' => 'content'], DailyPageHelper::WEEK],
199 [['day' => null], DailyPageHelper::DAY],
200 [['day' => ''], DailyPageHelper::DAY],
201 [['day' => 'content'], DailyPageHelper::DAY],
202 ];
203 }
204
205 /**
206 * Data provider for testExtractRequestedDateTime() test method.
207 */
208 public function getRequestedDateTimes(): array
209 {
210 return [
211 [DailyPageHelper::DAY, '20201013', null, new \DateTime('2020-10-13')],
212 [
213 DailyPageHelper::DAY,
214 '',
215 (new Bookmark())->setCreated($date = new \DateTime('2020-10-13 12:05:31')),
216 $date,
217 ],
218 [DailyPageHelper::DAY, '', null, new \DateTime()],
219 [DailyPageHelper::WEEK, '202030', null, new \DateTime('2020-07-20')],
220 [
221 DailyPageHelper::WEEK,
222 '',
223 (new Bookmark())->setCreated($date = new \DateTime('2020-10-13 12:05:31')),
224 new \DateTime('2020-10-13'),
225 ],
226 [DailyPageHelper::WEEK, '', null, new \DateTime(), 'Ym'],
227 [DailyPageHelper::MONTH, '202008', null, new \DateTime('2020-08-01'), 'Ym'],
228 [
229 DailyPageHelper::MONTH,
230 '',
231 (new Bookmark())->setCreated($date = new \DateTime('2020-10-13 12:05:31')),
232 new \DateTime('2020-10-13'),
233 'Ym'
234 ],
235 [DailyPageHelper::MONTH, '', null, new \DateTime(), 'Ym'],
236 ];
237 }
238
239 /**
240 * Data provider for testGetFormatByType() test method.
241 */
242 public function getFormatsByType(): array
243 {
244 return [
245 [DailyPageHelper::DAY, 'Ymd'],
246 [DailyPageHelper::WEEK, 'YW'],
247 [DailyPageHelper::MONTH, 'Ym'],
248 ];
249 }
250
251 /**
252 * Data provider for testGetStartDatesByType() test method.
253 */
254 public function getStartDatesByType(): array
255 {
256 return [
f00600a2
A
257 [DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-09 00:00:00')],
258 [DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-05 00:00:00')],
259 [DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-01 00:00:00')],
36e6d88d
A
260 ];
261 }
262
263 /**
264 * Data provider for testGetEndDatesByType() test method.
265 */
266 public function getEndDatesByType(): array
267 {
268 return [
f00600a2
A
269 [DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-09 23:59:59')],
270 [DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-11 23:59:59')],
271 [DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), new \DateTime('2020-10-31 23:59:59')],
36e6d88d
A
272 ];
273 }
274
275 /**
276 * Data provider for testGetDescriptionsByType() test method.
277 */
278 public function getDescriptionsByType(): array
279 {
280 return [
f00600a2
A
281 [DailyPageHelper::DAY, $date = new DateTimeImmutable(), 'Today - ' . $date->format('F j, Y')],
282 [DailyPageHelper::DAY, $date = new DateTimeImmutable('-1 day'), 'Yesterday - ' . $date->format('F j, Y')],
283 [DailyPageHelper::DAY, new DateTimeImmutable('2020-10-09 04:05:06'), 'October 9, 2020'],
284 [DailyPageHelper::WEEK, new DateTimeImmutable('2020-10-09 04:05:06'), 'Week 41 (October 5, 2020)'],
285 [DailyPageHelper::MONTH, new DateTimeImmutable('2020-10-09 04:05:06'), 'October, 2020'],
36e6d88d
A
286 ];
287 }
288
2883c6d0
A
289 /**
290 * Data provider for testGeDescriptionsByTypeNotIncludeRelative() test method.
291 */
292 public function getDescriptionsByTypeNotIncludeRelative(): array
293 {
294 return [
295 [DailyPageHelper::DAY, $date = new \DateTimeImmutable(), $date->format('F j, Y')],
296 [DailyPageHelper::DAY, $date = new \DateTimeImmutable('-1 day'), $date->format('F j, Y')],
297 [DailyPageHelper::DAY, new \DateTimeImmutable('2020-10-09 04:05:06'), 'October 9, 2020'],
298 [DailyPageHelper::WEEK, new \DateTimeImmutable('2020-10-09 04:05:06'), 'Week 41 (October 5, 2020)'],
299 [DailyPageHelper::MONTH, new \DateTimeImmutable('2020-10-09 04:05:06'), 'October, 2020'],
300 ];
301 }
302
36e6d88d 303 /**
f00600a2 304 * Data provider for testGetRssLengthsByType() test method.
36e6d88d
A
305 */
306 public function getRssLengthsByType(): array
307 {
308 return [
309 [DailyPageHelper::DAY],
310 [DailyPageHelper::WEEK],
311 [DailyPageHelper::MONTH],
312 ];
313 }
f00600a2
A
314
315 /**
316 * Data provider for testGetCacheDatePeriodByType() test method.
317 */
318 public function getCacheDatePeriodByType(): array
319 {
320 return [
321 [
322 DailyPageHelper::DAY,
323 new DateTimeImmutable('2020-10-09 04:05:06'),
324 new \DateTime('2020-10-09 00:00:00'),
325 new \DateTime('2020-10-09 23:59:59'),
326 ],
327 [
328 DailyPageHelper::WEEK,
329 new DateTimeImmutable('2020-10-09 04:05:06'),
330 new \DateTime('2020-10-05 00:00:00'),
331 new \DateTime('2020-10-11 23:59:59'),
332 ],
333 [
334 DailyPageHelper::MONTH,
335 new DateTimeImmutable('2020-10-09 04:05:06'),
336 new \DateTime('2020-10-01 00:00:00'),
337 new \DateTime('2020-10-31 23:59:59'),
338 ],
339 ];
340 }
36e6d88d 341}