]>
Commit | Line | Data |
---|---|---|
1 | <?php | |
2 | ||
3 | declare(strict_types=1); | |
4 | ||
5 | namespace Shaarli\Helper; | |
6 | ||
7 | use DateTimeImmutable; | |
8 | use DateTimeInterface; | |
9 | use Shaarli\Bookmark\Bookmark; | |
10 | use Shaarli\TestCase; | |
11 | use Slim\Http\Request; | |
12 | ||
13 | class 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, | |
37 | DateTimeInterface $expectedDateTime, | |
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, | |
76 | DateTimeImmutable $dateTime, | |
77 | DateTimeInterface $expectedDateTime | |
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 | ||
89 | DailyPageHelper::getStartDateTimeByType('nope', new DateTimeImmutable()); | |
90 | } | |
91 | ||
92 | /** | |
93 | * @dataProvider getEndDatesByType | |
94 | */ | |
95 | public function testGetEndDatesByType( | |
96 | string $type, | |
97 | DateTimeImmutable $dateTime, | |
98 | DateTimeInterface $expectedDateTime | |
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 | ||
110 | DailyPageHelper::getEndDateTimeByType('nope', new DateTimeImmutable()); | |
111 | } | |
112 | ||
113 | /** | |
114 | * @dataProvider getDescriptionsByType | |
115 | */ | |
116 | public function testGeDescriptionsByType( | |
117 | string $type, | |
118 | DateTimeImmutable $dateTime, | |
119 | string $expectedDescription | |
120 | ): void { | |
121 | $description = DailyPageHelper::getDescriptionByType($type, $dateTime); | |
122 | ||
123 | static::assertEquals($expectedDescription, $description); | |
124 | } | |
125 | ||
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 | ||
139 | public function getDescriptionByTypeExceptionUnknownType(): void | |
140 | { | |
141 | $this->expectException(\Exception::class); | |
142 | $this->expectExceptionMessage('Unsupported daily format type'); | |
143 | ||
144 | DailyPageHelper::getDescriptionByType('nope', new DateTimeImmutable()); | |
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 | ||
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 | ||
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 [ | |
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')], | |
260 | ]; | |
261 | } | |
262 | ||
263 | /** | |
264 | * Data provider for testGetEndDatesByType() test method. | |
265 | */ | |
266 | public function getEndDatesByType(): array | |
267 | { | |
268 | return [ | |
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')], | |
272 | ]; | |
273 | } | |
274 | ||
275 | /** | |
276 | * Data provider for testGetDescriptionsByType() test method. | |
277 | */ | |
278 | public function getDescriptionsByType(): array | |
279 | { | |
280 | return [ | |
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'], | |
286 | ]; | |
287 | } | |
288 | ||
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 | ||
303 | /** | |
304 | * Data provider for testGetRssLengthsByType() test method. | |
305 | */ | |
306 | public function getRssLengthsByType(): array | |
307 | { | |
308 | return [ | |
309 | [DailyPageHelper::DAY], | |
310 | [DailyPageHelper::WEEK], | |
311 | [DailyPageHelper::MONTH], | |
312 | ]; | |
313 | } | |
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 | } | |
341 | } |