Skip to content

Commit

Permalink
IBX-8726: Added support for IsBookmarked criterion (#123)
Browse files Browse the repository at this point in the history
For more details see https://issues.ibexa.co/browse/IBX-8726 and #123

Key changes:

* Added IsBookmarked criterion

* [Tests] Added IsBookmarkedTest
  • Loading branch information
ciastektk authored Sep 4, 2024
1 parent e2b32ed commit 7a8dbe8
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/bundle/Resources/config/input_parsers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
38 changes: 38 additions & 0 deletions src/lib/Server/Input/Parser/Criterion/IsBookmarked.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php

/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);

namespace Ibexa\Rest\Server\Input\Parser\Criterion;

use Ibexa\Contracts\Core\Repository\Values\Content\Query\Criterion\Location\IsBookmarked as IsBookmarkedCriterion;
use Ibexa\Contracts\Rest\Exceptions\Parser;
use Ibexa\Contracts\Rest\Input\ParsingDispatcher;
use Ibexa\Rest\Input\BaseParser;
use Ibexa\Rest\Input\ParserTools;

final class IsBookmarked extends BaseParser
{
public const IS_BOOKMARKED_CRITERION = 'IsBookmarkedCriterion';

private ParserTools $parserTools;

public function __construct(ParserTools $parserTools)
{
$this->parserTools = $parserTools;
}

public function parse(array $data, ParsingDispatcher $parsingDispatcher): IsBookmarkedCriterion
{
if (!array_key_exists(self::IS_BOOKMARKED_CRITERION, $data)) {
throw new Parser('Invalid <IsBookmarkedCriterion> format');
}

return new IsBookmarkedCriterion(
$this->parserTools->parseBooleanValue($data[self::IS_BOOKMARKED_CRITERION])
);
}
}
54 changes: 54 additions & 0 deletions tests/bundle/Functional/SearchView/Criterion/IsBookmarkedTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
namespace Ibexa\Tests\Bundle\Rest\Functional\SearchView\Criterion;

use Ibexa\Tests\Bundle\Rest\Functional\SearchView\SearchCriterionTestCase;

final class IsBookmarkedTest extends SearchCriterionTestCase
{
protected function setUp(): void
{
parent::setUp();

$this->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);
}
}

0 comments on commit 7a8dbe8

Please sign in to comment.