Skip to content

Commit 3fa27d8

Browse files
authored
Merge pull request #9 from Ali1/frozen
I18n\Time support
2 parents 964e2f3 + 3b60fbc commit 3fa27d8

File tree

4 files changed

+81
-7
lines changed

4 files changed

+81
-7
lines changed

src/FrozenDateTimeParamConverter.php

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Cake\Http\Exception\BadRequestException;
66
use Cake\I18n\FrozenDate;
77
use Cake\I18n\FrozenTime;
8+
use Cake\I18n\Time;
89

910
/**
1011
* Class FrozenDateTimeParamConverter
@@ -18,25 +19,21 @@ class FrozenDateTimeParamConverter implements ParamConverterInterface
1819
*/
1920
public function supports(string $class): bool
2021
{
21-
return $class === FrozenDate::class || $class === FrozenTime::class;
22+
return $class === FrozenDate::class || $class === FrozenTime::class || $class === Time::class;
2223
}
2324

2425
/**
2526
* @inheritDoc
2627
*
27-
* @param string $value from URL
28+
* @param string $value from URL.
2829
* @param string $class FrozenDate or FrozenTime.
2930
*
3031
* @return FrozenTime|FrozenDate
3132
*/
3233
public function convertTo(string $value, string $class)
3334
{
3435
try {
35-
if ($class === FrozenDate::class) {
36-
return new FrozenDate($value);
37-
} else {
38-
return new FrozenTime($value);
39-
}
36+
return new $class($value);
4037
} catch (\Exception $e) {
4138
throw new BadRequestException();
4239
}

tests/App/Controller/UsersController.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Cake\Controller\Controller;
66
use Cake\I18n\FrozenDate;
77
use Cake\I18n\FrozenTime;
8+
use Cake\I18n\Time;
89
use DateTime;
910
use ParamConverter\Test\App\Model\Entity\User;
1011

@@ -18,6 +19,10 @@ public function withEntity(User $entity): void
1819
{
1920
}
2021

22+
public function withTime(Time $time): void
23+
{
24+
}
25+
2126
public function withDatetime(DateTime $dateTime): void
2227
{
2328
}

tests/TestCase/DispatchListenerTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Cake\Http\ServerRequest;
99
use Cake\I18n\FrozenDate;
1010
use Cake\I18n\FrozenTime;
11+
use Cake\I18n\Time;
1112
use Cake\ORM\TableRegistry;
1213
use Cake\TestSuite\TestCase;
1314
use DateTime;
@@ -70,6 +71,24 @@ public function testDatetime(): void
7071
$this->assertTrue($updatedRequest->getParam('pass.0') instanceof Datetime);
7172
}
7273

74+
public function testTime(): void
75+
{
76+
$event = new Event('beforeEvent');
77+
$event->setData('controller', new UsersController());
78+
79+
$request = (new ServerRequest())
80+
->withParam('pass', ["2020-10-10"])
81+
->withParam('action', 'withTime');
82+
$response = new Response();
83+
84+
$listener = new DispatchListener();
85+
$listener->beforeDispatch($event, $request, $response);
86+
87+
/** @var ServerRequest $updatedRequest */
88+
$updatedRequest = $event->getData('request');
89+
$this->assertTrue($updatedRequest->getParam('pass.0') instanceof Time);
90+
}
91+
7392
public function testFrozenDate(): void
7493
{
7594
$event = new Event('beforeEvent');
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace ParamConverter\Test\TestCase;
4+
5+
use Cake\Http\Exception\BadRequestException;
6+
use Cake\I18n\Time;
7+
use Cake\TestSuite\TestCase;
8+
use ParamConverter\FrozenDateTimeParamConverter;
9+
10+
class TimeParamConverterTest extends TestCase
11+
{
12+
public function testSupports(): void
13+
{
14+
$converter = new FrozenDateTimeParamConverter();
15+
$this->assertTrue($converter->supports(Time::class));
16+
}
17+
18+
/**
19+
* @dataProvider conversionDataProvider
20+
* @param string $rawValue Raw value
21+
* @param string $expectedValue Expected value upon conversion
22+
* @param string $format Date format
23+
*/
24+
public function testConvertTo(string $rawValue, string $expectedValue, string $format): void
25+
{
26+
$converter = new FrozenDateTimeParamConverter();
27+
/** @var \Cake\I18n\Time $convertedValue */
28+
$convertedValue = $converter->convertTo($rawValue, Time::class);
29+
$this->assertInstanceOf(Time::class, $convertedValue);
30+
$this->assertEquals($expectedValue, $convertedValue->format($format));
31+
}
32+
33+
public function testException(): void
34+
{
35+
$converter = new FrozenDateTimeParamConverter();
36+
$this->expectException(BadRequestException::class);
37+
$converter->convertTo("notvalid", Time::class);
38+
}
39+
40+
/**
41+
* @return array[]
42+
*/
43+
public function conversionDataProvider(): array
44+
{
45+
return [
46+
// raw value, converted value
47+
['now', date('Y-m-d'), 'Y-m-d'],
48+
['now', date('Y-m-d h:i'), 'Y-m-d h:i'],
49+
['2020-09-10', '2020-09-10', 'Y-m-d'],
50+
['2020-09-10 15:10:00', '2020-09-10 15:10:00', 'Y-m-d H:i:s'],
51+
];
52+
}
53+
}

0 commit comments

Comments
 (0)