From 7a8dbe86227c1e99696d67692d2a81e4af7972ea Mon Sep 17 00:00:00 2001 From: Tomasz Kryszan Date: Wed, 4 Sep 2024 16:42:08 +0200 Subject: [PATCH] IBX-8726: Added support for IsBookmarked criterion (#123) For more details see https://issues.ibexa.co/browse/IBX-8726 and https://github.com/ibexa/rest/pull/123 Key changes: * Added IsBookmarked criterion * [Tests] Added IsBookmarkedTest --- src/bundle/Resources/config/input_parsers.yml | 8 +++ .../Input/Parser/Criterion/IsBookmarked.php | 38 +++++++++++++ .../SearchView/Criterion/IsBookmarkedTest.php | 54 +++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 src/lib/Server/Input/Parser/Criterion/IsBookmarked.php create mode 100644 tests/bundle/Functional/SearchView/Criterion/IsBookmarkedTest.php diff --git a/src/bundle/Resources/config/input_parsers.yml b/src/bundle/Resources/config/input_parsers.yml index 225153fd1..14dbca84f 100644 --- a/src/bundle/Resources/config/input_parsers.yml +++ b/src/bundle/Resources/config/input_parsers.yml @@ -863,3 +863,11 @@ services: $validator: '@validator' tags: - { name: ibexa.rest.input.parser, mediaType: application/vnd.ibexa.api.internal.criterion.Image } + + + Ibexa\Rest\Server\Input\Parser\Criterion\IsBookmarked: + parent: Ibexa\Rest\Server\Common\Parser + arguments: + $parserTools: '@Ibexa\Rest\Input\ParserTools' + tags: + - { name: ibexa.rest.input.parser, mediaType: application/vnd.ibexa.api.internal.criterion.IsBookmarked } diff --git a/src/lib/Server/Input/Parser/Criterion/IsBookmarked.php b/src/lib/Server/Input/Parser/Criterion/IsBookmarked.php new file mode 100644 index 000000000..d64e30769 --- /dev/null +++ b/src/lib/Server/Input/Parser/Criterion/IsBookmarked.php @@ -0,0 +1,38 @@ +parserTools = $parserTools; + } + + public function parse(array $data, ParsingDispatcher $parsingDispatcher): IsBookmarkedCriterion + { + if (!array_key_exists(self::IS_BOOKMARKED_CRITERION, $data)) { + throw new Parser('Invalid format'); + } + + return new IsBookmarkedCriterion( + $this->parserTools->parseBooleanValue($data[self::IS_BOOKMARKED_CRITERION]) + ); + } +} diff --git a/tests/bundle/Functional/SearchView/Criterion/IsBookmarkedTest.php b/tests/bundle/Functional/SearchView/Criterion/IsBookmarkedTest.php new file mode 100644 index 000000000..84aad7d11 --- /dev/null +++ b/tests/bundle/Functional/SearchView/Criterion/IsBookmarkedTest.php @@ -0,0 +1,54 @@ +addMediaFolderToBookmarks(); + } + + /** + * @phpstan-return iterable< + * string, + * array{ + * string, + * string, + * int, + * }, + * > + */ + public function getCriteriaPayloads(): iterable + { + yield 'Bookmarked locations' => [ + 'json', + $this->buildJsonCriterionQuery('"IsBookmarkedCriterion": true'), + 1, + ]; + + yield 'Not bookmarked locations' => [ + 'json', + $this->buildJsonCriterionQuery('"IsBookmarkedCriterion": false'), + 11, + ]; + } + + private function addMediaFolderToBookmarks(): void + { + $request = $this->createHttpRequest( + 'POST', + '/api/ibexa/v2/bookmark/43' + ); + + $this->sendHttpRequest($request); + } +}