diff --git a/lib/Helper/Filter/JSON/TimestampFixFilter.php b/lib/Helper/Filter/JSON/TimestampFixFilter.php new file mode 100644 index 00000000..4fcadb29 --- /dev/null +++ b/lib/Helper/Filter/JSON/TimestampFixFilter.php @@ -0,0 +1,32 @@ +handleTimestamp($json[$key], $changed); + } + } + return $changed; + } + + private function handleTimestamp(string $value, bool &$changed): string { + $pattern = '/^([0-9]{4}-[0-9]{2}-[0-9]{2}) +(.*)/'; + $replacement = '${1}T${2}'; + $nv = preg_replace($pattern, $replacement, $value); + + if($nv !== $value) { + $changed = true; + } + return $nv; + } + +} diff --git a/lib/Helper/Filter/Output/RecipeStubFilter.php b/lib/Helper/Filter/Output/RecipeStubFilter.php index 8e38efcf..26a458f4 100644 --- a/lib/Helper/Filter/Output/RecipeStubFilter.php +++ b/lib/Helper/Filter/Output/RecipeStubFilter.php @@ -5,6 +5,7 @@ namespace OCA\Cookbook\Helper\Filter\Output; use OCA\Cookbook\Helper\Filter\JSON\AbstractJSONFilter; use OCA\Cookbook\Helper\Filter\JSON\RecipeIdCopyFilter; use OCA\Cookbook\Helper\Filter\JSON\RecipeIdTypeFilter; +use OCA\Cookbook\Helper\Filter\JSON\TimestampFixFilter; class RecipeStubFilter { /** @var AbstractJSONFilter[] */ @@ -12,11 +13,13 @@ class RecipeStubFilter { public function __construct( RecipeIdTypeFilter $recipeIdTypeFilter, - RecipeIdCopyFilter $recipeIdCopyFilter + RecipeIdCopyFilter $recipeIdCopyFilter, + TimestampFixFilter $timestampFixFilter ) { $this->filters = [ $recipeIdCopyFilter, $recipeIdTypeFilter, + $timestampFixFilter, ]; } diff --git a/tests/Unit/Helper/Filter/JSON/TimestampFixFilterTest.php b/tests/Unit/Helper/Filter/JSON/TimestampFixFilterTest.php new file mode 100644 index 00000000..52843e66 --- /dev/null +++ b/tests/Unit/Helper/Filter/JSON/TimestampFixFilterTest.php @@ -0,0 +1,42 @@ +dut = new TimestampFixFilter(); + } + + public function dp() { + yield ['2024-01-02T13:15:10', '2024-01-02T13:15:10', false]; + yield ['2024-01-02 13:15:10', '2024-01-02T13:15:10', true]; + + yield ['2024-01-02T13:15:10+00:00', '2024-01-02T13:15:10+00:00', false]; + yield ['2024-01-02 13:15:10+00:00', '2024-01-02T13:15:10+00:00', true]; + } + + private function getStub($time) { + return [ + 'dateCreated' => $time, + 'dateModified' => $time, + ]; + } + + /** @dataProvider dp */ + public function testFilter($inputTime, $expectedOutputTime, $changed) { + $input = $this->getStub($inputTime); + $expectedOutput = $this->getStub($expectedOutputTime); + + $ret = $this->dut->apply($input); + $this->assertEquals($changed, $ret); + $this->assertSame($expectedOutput, $input); + } + + // } +}