diff --git a/src/lib/Server/Input/Parser/Criterion/DateMetadata.php b/src/lib/Server/Input/Parser/Criterion/DateMetadata.php index c44d3a11..d8398a5b 100644 --- a/src/lib/Server/Input/Parser/Criterion/DateMetadata.php +++ b/src/lib/Server/Input/Parser/Criterion/DateMetadata.php @@ -37,7 +37,7 @@ class DateMetadata extends BaseParser public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMetadataCriterion { if (!isset($data['DateMetadataCriterion'])) { - throw new Exceptions\Parser('Invalid format'); + throw new Exceptions\Parser('Invalid format'); } $dateMetadata = $data['DateMetadataCriterion']; @@ -56,6 +56,14 @@ public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMe throw new Exceptions\Parser('Invalid format'); } + if ( + is_string($dateMetadata['Value']) + && is_numeric($dateMetadata['Value']) + && ((int)$dateMetadata['Value'] == $dateMetadata['Value']) + ) { + $dateMetadata['Value'] = (int)$dateMetadata['Value']; + } + if (!in_array(gettype($dateMetadata['Value']), ['integer', 'array'], true)) { throw new Exceptions\Parser('Invalid format'); } diff --git a/tests/lib/Server/Input/Parser/Criterion/DateMetadataTest.php b/tests/lib/Server/Input/Parser/Criterion/DateMetadataTest.php index 2b77db0c..9f3cf367 100644 --- a/tests/lib/Server/Input/Parser/Criterion/DateMetadataTest.php +++ b/tests/lib/Server/Input/Parser/Criterion/DateMetadataTest.php @@ -33,6 +33,10 @@ public function testParseProvider(): iterable ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => 14, 'Operator' => 'EQ']], new DateMetadataCriterion('created', Operator::EQ, 14), ], + [ + ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => '14', 'Operator' => 'EQ']], + new DateMetadataCriterion('created', Operator::EQ, 14), + ], [ ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => 1620739489, 'Operator' => 'LT']], new DateMetadataCriterion('created', Operator::LT, 1620739489), @@ -68,7 +72,7 @@ public function testParse(array $data, DateMetadataCriterion $expected): void public function testParseExceptionOnInvalidCriterionFormat(): void { - $this->expectExceptionMessage('Invalid format'); + $this->expectExceptionMessage('Invalid format'); $this->expectException(Exceptions\Parser::class); $inputArray = [ 'foo' => 'Michael learns to mock',