From 54f03698c779b07ba7fbb513b387aefb06f4e787 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Tue, 11 May 2021 15:56:02 +0200 Subject: [PATCH 1/9] IBX-366 implemented DateMetadataCriterion to REST API --- .../Input/Parser/Criterion/DateMetadata.php | 90 +++++++- .../Parser/Criterion/DateMetadataTest.php | 211 ++++++++++++++++++ 2 files changed, 297 insertions(+), 4 deletions(-) create mode 100644 eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index 5c0078ecf60..601576094cd 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -6,14 +6,42 @@ */ namespace eZ\Publish\Core\REST\Server\Input\Parser\Criterion; +use eZ\Publish\API\Repository\Values\Content\Query\Criterion\Operator; use eZ\Publish\Core\REST\Common\Input\BaseParser; use eZ\Publish\Core\REST\Common\Input\ParsingDispatcher; +use eZ\Publish\API\Repository\Values\Content\Query\Criterion\DateMetadata as DateMetadataCriterion; +use eZ\Publish\Core\REST\Common\Exceptions; /** - * Parser for ViewInput Criterion. + * Parser for DateMetadata Criterion. */ class DateMetadata extends BaseParser { + const OPERATORS = [ + 'IN' => Operator::IN, + 'EQ' => Operator::EQ, + 'GT' => Operator::GT, + 'GTE' => Operator::GTE, + 'LT' => Operator::LT, + 'LTE' => Operator::LTE, + 'BETWEEN' => Operator::BETWEEN, + ]; + + /** + * DateMetadata target: modification date. + */ + const MODIFIED = 'modified'; + + /** + * DateMetadata target: creation date. + */ + const CREATED = 'created'; + + public const TARGETS = [ + self::MODIFIED, + self::CREATED, + ]; + /** * Parses input structure to a Criterion object. * @@ -21,11 +49,65 @@ class DateMetadata extends BaseParser * @param \eZ\Publish\Core\REST\Common\Input\ParsingDispatcher $parsingDispatcher * * @throws \eZ\Publish\Core\REST\Common\Exceptions\Parser + */ + public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMetadataCriterion + { + if (!isset($data['DateMetadataCriterion'])) { + throw new Exceptions\Parser('Invalid format'); + } + + $dateMetadata = $data['DateMetadataCriterion']; + + if (!isset($dateMetadata['Target'])) { + throw new Exceptions\Parser('Invalid format'); + } + + $target = strtolower($dateMetadata['Target']); + + if (!in_array($target, self::TARGETS)) { + throw new Exceptions\Parser('Invalid format'); + } + + if (!isset($dateMetadata['Value'])) { + throw new Exceptions\Parser('Invalid format'); + } + + if (!in_array(gettype($dateMetadata['Value']), ['integer', 'array'])) { + throw new Exceptions\Parser('Invalid format'); + } + + $value = is_array($dateMetadata['Value']) + ? $dateMetadata['Value'] + : explode(',', $dateMetadata['Value']); + + if (!isset($dateMetadata['Operator'])) { + throw new Exceptions\Parser('Invalid format'); + } + + $operator = $this->getOperator($dateMetadata['Operator']); + + return new DateMetadataCriterion($target, $operator, $value); + } + + /** + * Get operator for the given literal name. + * + * For the full list of supported operators: * - * @return \eZ\Publish\API\Repository\Values\Content\Query\Criterion\DateMetadata + * @see \eZ\Publish\Core\REST\Server\Input\Parser\Criterion\DateMetadata::OPERATORS */ - public function parse(array $data, ParsingDispatcher $parsingDispatcher) + private function getOperator(string $operatorName): string { - throw new \Exception('@todo implement'); + $operatorName = strtoupper($operatorName); + if (!isset(self::OPERATORS[$operatorName])) { + throw new Exceptions\Parser( + sprintf( + 'Unexpected DateMetadata operator. Expected one of: %s', + implode(', ', array_keys(self::OPERATORS)) + ) + ); + } + + return self::OPERATORS[$operatorName]; } } diff --git a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php new file mode 100644 index 00000000000..1808ab615c9 --- /dev/null +++ b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php @@ -0,0 +1,211 @@ + ['Target' => 'modified', 'Value' => '14,1620739489', 'Operator' => 'BETWEEN']], + new DateMetadataCriterion('modified', Operator::BETWEEN, [14, 1620739489]), + ], + [ + ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => [14, 1620739489], 'Operator' => 'BETWEEN']], + new DateMetadataCriterion('created', Operator::BETWEEN, [14, 1620739489]), + ], + [ + ['DateMetadataCriterion' => ['Target' => 'modified', 'Value' => 14, 'Operator' => 'GT']], + new DateMetadataCriterion('modified', Operator::GT, 14), + ], + [ + ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => 14, 'Operator' => 'GTE']], + new DateMetadataCriterion('created', Operator::GTE, 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), + ], + [ + ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => 1620739489, 'Operator' => 'LTE']], + new DateMetadataCriterion('created', Operator::LTE, 1620739489), + ], + [ + ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => [14, 58, 167, 165245, 1620739489], 'Operator' => 'IN']], + new DateMetadataCriterion('created', Operator::IN, [14, 58, 167, 165245, 1620739489]), + ], + ]; + } + + /** + * Tests the DateMetaData parser. + * + * @dataProvider testParseProvider + */ + public function testParse($data, $expected) + { + $dateMetadata = $this->getParser(); + $result = $dateMetadata->parse($data, $this->getParsingDispatcherMock()); + + $this->assertEquals( + $expected, + $result, + 'DateMetadata parser not created correctly.' + ); + } + + /** + * Test DateMetaData parser throwing exception on invalid UserMetadataCriterion format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnInvalidCriterionFormat() + { + $inputArray = [ + 'foo' => 'Michael learns to mock', + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Test DateMetaData parser throwing exception on invalid target format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnInvalidTargetFormat() + { + $inputArray = [ + 'DateMetaDataCriterion' => [ + 'foo' => 'Mock around the clock', + 'Value' => 42, + ], + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Test DateMetaData parser throwing exception on wrong target format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnWrongTargetType() + { + $inputArray = [ + 'DateMetaDataCriterion' => [ + 'Target' => 'Mock around the clock', + 'Value' => 42, + ], + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Test DateMetaData parser throwing exception on invalid value format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnInvalidValueFormat() + { + $inputArray = [ + 'DateMetaDataCriterion' => [ + 'Target' => 'Moxette', + 'foo' => 42, + ], + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Test DateMetaData parser throwing exception on wrong type of value format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnWrongValueType() + { + $inputArray = [ + 'DateMetaDataCriterion' => [ + 'Target' => 'We will mock you', + 'Value' => new \stdClass(), + ], + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Test DateMetaData parser throwing exception on invalid value format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnInvalidOperatorFormat() + { + $inputArray = [ + 'DateMetaDataCriterion' => [ + 'Target' => 'modified', + 'foo' => 42, + ], + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Test DateMetaData parser throwing exception on wrong type of value format. + * + * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser + * @expectedExceptionMessage Invalid format + */ + public function testParseExceptionOnWrongOperatorType() + { + $inputArray = [ + 'DateMetaDataCriterion' => [ + 'Target' => 'modified', + 'Value' => 42, + 'Operator' => 'GTE', + ], + ]; + + $dataKeyValueObjectClass = $this->getParser(); + $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); + } + + /** + * Returns the DateMetaData criterion parser. + * + * @return \eZ\Publish\Core\REST\Server\Input\Parser\Criterion\DateMetadata + */ + protected function internalGetParser() + { + return new DateMetadata(); + } +} From 774119349ee28008946c9cc7e60169f0d5dbce1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Tue, 11 May 2021 15:58:15 +0200 Subject: [PATCH 2/9] reverted comment --- .../Core/REST/Server/Input/Parser/Criterion/DateMetadata.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index 601576094cd..06b52df6fa7 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -13,7 +13,7 @@ use eZ\Publish\Core\REST\Common\Exceptions; /** - * Parser for DateMetadata Criterion. + * Parser for ViewInput Criterion. */ class DateMetadata extends BaseParser { From e053cd20bbfe3a15d6e8e2ab3eb210f29349b015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Tue, 11 May 2021 16:41:11 +0200 Subject: [PATCH 3/9] corrected Value map and tests --- .../Input/Parser/Criterion/DateMetadata.php | 4 +- .../Parser/Criterion/DateMetadataTest.php | 40 ++++--------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index 06b52df6fa7..42ae8e17c9a 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -76,9 +76,7 @@ public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMe throw new Exceptions\Parser('Invalid format'); } - $value = is_array($dateMetadata['Value']) - ? $dateMetadata['Value'] - : explode(',', $dateMetadata['Value']); + $value = $dateMetadata['Value']; if (!isset($dateMetadata['Operator'])) { throw new Exceptions\Parser('Invalid format'); diff --git a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php index 1808ab615c9..5c9ce2ff298 100644 --- a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php +++ b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php @@ -17,13 +17,9 @@ public function testParseProvider() { return [ [ - ['DateMetadataCriterion' => ['Target' => 'modified', 'Value' => '14,1620739489', 'Operator' => 'BETWEEN']], + ['DateMetadataCriterion' => ['Target' => 'modified', 'Value' => [14, 1620739489], 'Operator' => 'BETWEEN']], new DateMetadataCriterion('modified', Operator::BETWEEN, [14, 1620739489]), ], - [ - ['DateMetadataCriterion' => ['Target' => 'created', 'Value' => [14, 1620739489], 'Operator' => 'BETWEEN']], - new DateMetadataCriterion('created', Operator::BETWEEN, [14, 1620739489]), - ], [ ['DateMetadataCriterion' => ['Target' => 'modified', 'Value' => 14, 'Operator' => 'GT']], new DateMetadataCriterion('modified', Operator::GT, 14), @@ -93,7 +89,7 @@ public function testParseExceptionOnInvalidCriterionFormat() public function testParseExceptionOnInvalidTargetFormat() { $inputArray = [ - 'DateMetaDataCriterion' => [ + 'DateMetadataCriterion' => [ 'foo' => 'Mock around the clock', 'Value' => 42, ], @@ -112,7 +108,7 @@ public function testParseExceptionOnInvalidTargetFormat() public function testParseExceptionOnWrongTargetType() { $inputArray = [ - 'DateMetaDataCriterion' => [ + 'DateMetadataCriterion' => [ 'Target' => 'Mock around the clock', 'Value' => 42, ], @@ -131,8 +127,8 @@ public function testParseExceptionOnWrongTargetType() public function testParseExceptionOnInvalidValueFormat() { $inputArray = [ - 'DateMetaDataCriterion' => [ - 'Target' => 'Moxette', + 'DateMetadataCriterion' => [ + 'Target' => 'modified', 'foo' => 42, ], ]; @@ -150,8 +146,8 @@ public function testParseExceptionOnInvalidValueFormat() public function testParseExceptionOnWrongValueType() { $inputArray = [ - 'DateMetaDataCriterion' => [ - 'Target' => 'We will mock you', + 'DateMetadataCriterion' => [ + 'Target' => 'modified', 'Value' => new \stdClass(), ], ]; @@ -169,29 +165,9 @@ public function testParseExceptionOnWrongValueType() public function testParseExceptionOnInvalidOperatorFormat() { $inputArray = [ - 'DateMetaDataCriterion' => [ - 'Target' => 'modified', - 'foo' => 42, - ], - ]; - - $dataKeyValueObjectClass = $this->getParser(); - $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); - } - - /** - * Test DateMetaData parser throwing exception on wrong type of value format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnWrongOperatorType() - { - $inputArray = [ - 'DateMetaDataCriterion' => [ + 'DateMetadataCriterion' => [ 'Target' => 'modified', 'Value' => 42, - 'Operator' => 'GTE', ], ]; From 74295fa954fbb8c884afbde236dcfbf55b232855 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Tue, 11 May 2021 16:42:47 +0200 Subject: [PATCH 4/9] set strict mode to in_array --- .../Core/REST/Server/Input/Parser/Criterion/DateMetadata.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index 42ae8e17c9a..8a7c8906fe4 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -64,7 +64,7 @@ public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMe $target = strtolower($dateMetadata['Target']); - if (!in_array($target, self::TARGETS)) { + if (!in_array($target, self::TARGETS, true)) { throw new Exceptions\Parser('Invalid format'); } @@ -72,7 +72,7 @@ public function parse(array $data, ParsingDispatcher $parsingDispatcher): DateMe throw new Exceptions\Parser('Invalid format'); } - if (!in_array(gettype($dateMetadata['Value']), ['integer', 'array'])) { + if (!in_array(gettype($dateMetadata['Value']), ['integer', 'array'], true)) { throw new Exceptions\Parser('Invalid format'); } From 28cf23d6f9ec932199f1bd7c070d0e7d52c86e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 12 May 2021 09:00:35 +0200 Subject: [PATCH 5/9] changed const to public, added return type and used function instead deprecated annotations --- .../Input/Parser/Criterion/DateMetadata.php | 6 +- .../Parser/Criterion/DateMetadataTest.php | 79 +++++++------------ 2 files changed, 31 insertions(+), 54 deletions(-) diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index 8a7c8906fe4..1c6d80515a6 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -17,7 +17,7 @@ */ class DateMetadata extends BaseParser { - const OPERATORS = [ + public const OPERATORS = [ 'IN' => Operator::IN, 'EQ' => Operator::EQ, 'GT' => Operator::GT, @@ -30,12 +30,12 @@ class DateMetadata extends BaseParser /** * DateMetadata target: modification date. */ - const MODIFIED = 'modified'; + public const MODIFIED = 'modified'; /** * DateMetadata target: creation date. */ - const CREATED = 'created'; + public const CREATED = 'created'; public const TARGETS = [ self::MODIFIED, diff --git a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php index 5c9ce2ff298..1c48153ffd7 100644 --- a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php +++ b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php @@ -10,10 +10,11 @@ use eZ\Publish\API\Repository\Values\Content\Query\Criterion\Operator; use eZ\Publish\Core\REST\Server\Input\Parser\Criterion\DateMetadata; use eZ\Publish\Core\REST\Server\Tests\Input\Parser\BaseTest; +use eZ\Publish\Core\REST\Common\Exceptions; -class DateMetadataTest extends BaseTest +final class DateMetadataTest extends BaseTest { - public function testParseProvider() + public function testParseProvider(): iterable { return [ [ @@ -52,7 +53,7 @@ public function testParseProvider() * * @dataProvider testParseProvider */ - public function testParse($data, $expected) + public function testParse($data, $expected): void { $dateMetadata = $this->getParser(); $result = $dateMetadata->parse($data, $this->getParsingDispatcherMock()); @@ -64,14 +65,10 @@ public function testParse($data, $expected) ); } - /** - * Test DateMetaData parser throwing exception on invalid UserMetadataCriterion format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnInvalidCriterionFormat() + public function testParseExceptionOnInvalidCriterionFormat(): void { + $this->expectExceptionMessage("Invalid format"); + $this->expectException(Exceptions\Parser::class); $inputArray = [ 'foo' => 'Michael learns to mock', ]; @@ -80,14 +77,11 @@ public function testParseExceptionOnInvalidCriterionFormat() $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); } - /** - * Test DateMetaData parser throwing exception on invalid target format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnInvalidTargetFormat() + public function testParseExceptionOnInvalidTargetFormat(): void { + $this->expectExceptionMessage("Invalid format"); + $this->expectException(Exceptions\Parser::class); + $inputArray = [ 'DateMetadataCriterion' => [ 'foo' => 'Mock around the clock', @@ -99,14 +93,11 @@ public function testParseExceptionOnInvalidTargetFormat() $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); } - /** - * Test DateMetaData parser throwing exception on wrong target format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnWrongTargetType() + public function testParseExceptionOnWrongTargetType(): void { + $this->expectExceptionMessage("Invalid format"); + $this->expectException(Exceptions\Parser::class); + $inputArray = [ 'DateMetadataCriterion' => [ 'Target' => 'Mock around the clock', @@ -118,14 +109,11 @@ public function testParseExceptionOnWrongTargetType() $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); } - /** - * Test DateMetaData parser throwing exception on invalid value format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnInvalidValueFormat() + public function testParseExceptionOnInvalidValueFormat(): void { + $this->expectExceptionMessage("Invalid format"); + $this->expectException(Exceptions\Parser::class); + $inputArray = [ 'DateMetadataCriterion' => [ 'Target' => 'modified', @@ -137,14 +125,11 @@ public function testParseExceptionOnInvalidValueFormat() $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); } - /** - * Test DateMetaData parser throwing exception on wrong type of value format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnWrongValueType() + public function testParseExceptionOnWrongValueType(): void { + $this->expectExceptionMessage("Invalid format"); + $this->expectException(Exceptions\Parser::class); + $inputArray = [ 'DateMetadataCriterion' => [ 'Target' => 'modified', @@ -156,14 +141,11 @@ public function testParseExceptionOnWrongValueType() $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); } - /** - * Test DateMetaData parser throwing exception on invalid value format. - * - * @expectedException \eZ\Publish\Core\REST\Common\Exceptions\Parser - * @expectedExceptionMessage Invalid format - */ - public function testParseExceptionOnInvalidOperatorFormat() + public function testParseExceptionOnInvalidOperatorFormat(): void { + $this->expectExceptionMessage("Invalid format"); + $this->expectException(Exceptions\Parser::class); + $inputArray = [ 'DateMetadataCriterion' => [ 'Target' => 'modified', @@ -175,12 +157,7 @@ public function testParseExceptionOnInvalidOperatorFormat() $dataKeyValueObjectClass->parse($inputArray, $this->getParsingDispatcherMock()); } - /** - * Returns the DateMetaData criterion parser. - * - * @return \eZ\Publish\Core\REST\Server\Input\Parser\Criterion\DateMetadata - */ - protected function internalGetParser() + protected function internalGetParser(): DateMetadata { return new DateMetadata(); } From c1084dd19580120d2bd28b9e9cc720080846986a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 12 May 2021 10:11:56 +0200 Subject: [PATCH 6/9] corrected CS --- .../Input/Parser/Criterion/DateMetadataTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php index 1c48153ffd7..427bb8d5f4c 100644 --- a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php +++ b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php @@ -67,7 +67,7 @@ public function testParse($data, $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', @@ -79,7 +79,7 @@ public function testParseExceptionOnInvalidCriterionFormat(): void public function testParseExceptionOnInvalidTargetFormat(): void { - $this->expectExceptionMessage("Invalid format"); + $this->expectExceptionMessage('Invalid format'); $this->expectException(Exceptions\Parser::class); $inputArray = [ @@ -95,7 +95,7 @@ public function testParseExceptionOnInvalidTargetFormat(): void public function testParseExceptionOnWrongTargetType(): void { - $this->expectExceptionMessage("Invalid format"); + $this->expectExceptionMessage('Invalid format'); $this->expectException(Exceptions\Parser::class); $inputArray = [ @@ -111,7 +111,7 @@ public function testParseExceptionOnWrongTargetType(): void public function testParseExceptionOnInvalidValueFormat(): void { - $this->expectExceptionMessage("Invalid format"); + $this->expectExceptionMessage('Invalid format'); $this->expectException(Exceptions\Parser::class); $inputArray = [ @@ -127,7 +127,7 @@ public function testParseExceptionOnInvalidValueFormat(): void public function testParseExceptionOnWrongValueType(): void { - $this->expectExceptionMessage("Invalid format"); + $this->expectExceptionMessage('Invalid format'); $this->expectException(Exceptions\Parser::class); $inputArray = [ @@ -143,7 +143,7 @@ public function testParseExceptionOnWrongValueType(): void public function testParseExceptionOnInvalidOperatorFormat(): void { - $this->expectExceptionMessage("Invalid format"); + $this->expectExceptionMessage('Invalid format'); $this->expectException(Exceptions\Parser::class); $inputArray = [ From 05039f7f8d02a2c9e3eced522c782876022efe47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 12 May 2021 13:15:59 +0200 Subject: [PATCH 7/9] changed const to public and used in DateMetadata Rest API class --- .../Content/Query/Criterion/DateMetadata.php | 4 ++-- .../Server/Input/Parser/Criterion/DateMetadata.php | 14 ++------------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/eZ/Publish/API/Repository/Values/Content/Query/Criterion/DateMetadata.php b/eZ/Publish/API/Repository/Values/Content/Query/Criterion/DateMetadata.php index 86739c04750..caee8f77bf7 100644 --- a/eZ/Publish/API/Repository/Values/Content/Query/Criterion/DateMetadata.php +++ b/eZ/Publish/API/Repository/Values/Content/Query/Criterion/DateMetadata.php @@ -33,12 +33,12 @@ class DateMetadata extends Criterion /** * DateMetadata target: modification date. */ - const MODIFIED = 'modified'; + public const MODIFIED = 'modified'; /** * DateMetadata target: creation date. */ - const CREATED = 'created'; + public const CREATED = 'created'; /** * Creates a new DateMetadata criterion on $metadata. diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index 1c6d80515a6..c6e1775bb8b 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -27,19 +27,9 @@ class DateMetadata extends BaseParser 'BETWEEN' => Operator::BETWEEN, ]; - /** - * DateMetadata target: modification date. - */ - public const MODIFIED = 'modified'; - - /** - * DateMetadata target: creation date. - */ - public const CREATED = 'created'; - public const TARGETS = [ - self::MODIFIED, - self::CREATED, + DateMetadataCriterion::MODIFIED, + DateMetadataCriterion::CREATED, ]; /** From c7d2d40b522b0efbfedb5bfdb1b319230cc483d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 12 May 2021 13:20:25 +0200 Subject: [PATCH 8/9] changed consts to private --- .../Core/REST/Server/Input/Parser/Criterion/DateMetadata.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php index c6e1775bb8b..fc5e18c3112 100644 --- a/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php +++ b/eZ/Publish/Core/REST/Server/Input/Parser/Criterion/DateMetadata.php @@ -17,7 +17,7 @@ */ class DateMetadata extends BaseParser { - public const OPERATORS = [ + private const OPERATORS = [ 'IN' => Operator::IN, 'EQ' => Operator::EQ, 'GT' => Operator::GT, @@ -27,7 +27,7 @@ class DateMetadata extends BaseParser 'BETWEEN' => Operator::BETWEEN, ]; - public const TARGETS = [ + private const TARGETS = [ DateMetadataCriterion::MODIFIED, DateMetadataCriterion::CREATED, ]; From fb75f7920e2cc9ae4970b9a98171a74cf89b2e10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20D=C4=99bi=C5=84ski?= Date: Wed, 19 May 2021 13:17:07 +0200 Subject: [PATCH 9/9] added strict types for arguments --- .../Server/Tests/Input/Parser/Criterion/DateMetadataTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php index 427bb8d5f4c..64b47cb13c8 100644 --- a/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php +++ b/eZ/Publish/Core/REST/Server/Tests/Input/Parser/Criterion/DateMetadataTest.php @@ -51,9 +51,10 @@ public function testParseProvider(): iterable /** * Tests the DateMetaData parser. * + * @param string[] $data * @dataProvider testParseProvider */ - public function testParse($data, $expected): void + public function testParse(array $data, DateMetadataCriterion $expected): void { $dateMetadata = $this->getParser(); $result = $dateMetadata->parse($data, $this->getParsingDispatcherMock());