Skip to content

Commit c56516e

Browse files
authored
IBX-5044: Fixed DateMetadata criterion failure in XML REST API
1 parent e869ddf commit c56516e

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

src/lib/Server/Input/Parser/Criterion/DateMetadata.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class DateMetadata extends BaseParser
3737
public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMetadataCriterion
3838
{
3939
if (!isset($data['DateMetadataCriterion'])) {
40-
throw new Exceptions\Parser('Invalid <DateMetaDataCriterion> format');
40+
throw new Exceptions\Parser('Invalid <DateMetadataCriterion> format');
4141
}
4242

4343
$dateMetadata = $data['DateMetadataCriterion'];
@@ -56,6 +56,14 @@ public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMe
5656
throw new Exceptions\Parser('Invalid <Value> format');
5757
}
5858

59+
if (
60+
is_string($dateMetadata['Value'])
61+
&& is_numeric($dateMetadata['Value'])
62+
&& ((int)$dateMetadata['Value'] == $dateMetadata['Value'])
63+
) {
64+
$dateMetadata['Value'] = (int)$dateMetadata['Value'];
65+
}
66+
5967
if (!in_array(gettype($dateMetadata['Value']), ['integer', 'array'], true)) {
6068
throw new Exceptions\Parser('Invalid <Value> format');
6169
}

tests/lib/Server/Input/Parser/Criterion/DateMetadataTest.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ public function testParseProvider(): iterable
3333
['DateMetadataCriterion' => ['Target' => 'created', 'Value' => 14, 'Operator' => 'EQ']],
3434
new DateMetadataCriterion('created', Operator::EQ, 14),
3535
],
36+
[
37+
['DateMetadataCriterion' => ['Target' => 'created', 'Value' => '14', 'Operator' => 'EQ']],
38+
new DateMetadataCriterion('created', Operator::EQ, 14),
39+
],
3640
[
3741
['DateMetadataCriterion' => ['Target' => 'created', 'Value' => 1620739489, 'Operator' => 'LT']],
3842
new DateMetadataCriterion('created', Operator::LT, 1620739489),
@@ -68,7 +72,7 @@ public function testParse(array $data, DateMetadataCriterion $expected): void
6872

6973
public function testParseExceptionOnInvalidCriterionFormat(): void
7074
{
71-
$this->expectExceptionMessage('Invalid <DateMetaDataCriterion> format');
75+
$this->expectExceptionMessage('Invalid <DateMetadataCriterion> format');
7276
$this->expectException(Exceptions\Parser::class);
7377
$inputArray = [
7478
'foo' => 'Michael learns to mock',

0 commit comments

Comments
 (0)