Skip to content

Commit

Permalink
IBX-2324: Added configuration parameter and RepositoryConfigResolver …
Browse files Browse the repository at this point in the history
…to allow use content remote id (#103)

* Added repository.content.use_remote_id parameter

* Added Ibexa\Personalization namespace

* Added RepositoryConfigResolver

* Update src/bundle/DependencyInjection/ConfigurationMapper.php

Co-authored-by: Konrad Oboza <[email protected]>

Co-authored-by: Konrad Oboza <[email protected]>
  • Loading branch information
ciastektk and Konrad Oboza authored Feb 17, 2022
1 parent a94d9c5 commit 7ceee63
Show file tree
Hide file tree
Showing 10 changed files with 174 additions and 10 deletions.
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
},
"autoload": {
"psr-4": {
"Ibexa\\Personalization\\": "src/lib/",
"EzSystems\\EzRecommendationClientBundle\\": "src/bundle/",
"EzSystems\\EzRecommendationClient\\": "src/lib/"
}
Expand Down
12 changes: 11 additions & 1 deletion src/bundle/DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,17 @@ static function (array $relations): bool {
->end()
->end()
->end()
;
->arrayNode('repository')
->children()
->arrayNode('content')
->children()
->booleanNode('use_remote_id')
->info('Use remote id instead of numeric content id to process recommendations')
->end()
->end()
->end()
->end()
->end();

return $treeBuilder;
}
Expand Down
8 changes: 8 additions & 0 deletions src/bundle/DependencyInjection/ConfigurationMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ public function mapConfig(array &$scopeSettings, $currentScope, ContextualizerIn
$contextualizer->setContextualParameter('user_api.default_source', $currentScope, $scopeSettings['user_api']['default_source']);
}

if (isset($scopeSettings['repository']['content']['use_remote_id'])) {
$contextualizer->setContextualParameter(
'repository.content.use_remote_id',
$currentScope,
$scopeSettings['repository']['content']['use_remote_id']
);
}

if (isset($scopeSettings['api'])) {
$this->setApiSettings($contextualizer, $currentScope, $scopeSettings['api']);
}
Expand Down
2 changes: 2 additions & 0 deletions src/bundle/Resources/config/default_settings.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,5 @@ parameters:

ezrecommendation.default.field.relations: []
ezrecommendation.default.field.identifiers: []

ezrecommendation.default.repository.content.use_remote_id: false
2 changes: 1 addition & 1 deletion src/bundle/Resources/config/services.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ imports:
- { resource: services/authenticators.yaml }
- { resource: services/client.yaml }
- { resource: services/commands.yaml }
- { resource: services/config.yaml }
- { resource: services/controllers.yaml }
- { resource: services/converters.yaml }
- { resource: services/credentials_checker.yaml }
- { resource: services/events.yaml }
- { resource: services/exporter.yaml }
- { resource: services/factory.yaml }
Expand Down
16 changes: 16 additions & 0 deletions src/bundle/Resources/config/services/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
services:
_defaults:
autowire: true
autoconfigure: true
public: false

EzSystems\EzRecommendationClient\Config\CredentialsResolver: ~

EzSystems\EzRecommendationClient\Config\EzRecommendationClientCredentialsResolver: ~

EzSystems\EzRecommendationClient\Config\ExportCredentialsResolver: ~

Ibexa\Personalization\Config\Repository\RepositoryConfigResolver: ~

Ibexa\Personalization\Config\Repository\RepositoryConfigResolverInterface:
'@Ibexa\Personalization\Config\Repository\RepositoryConfigResolver'
8 changes: 0 additions & 8 deletions src/bundle/Resources/config/services/credentials_checker.yaml

This file was deleted.

45 changes: 45 additions & 0 deletions src/lib/Config/Repository/RepositoryConfigResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?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\Personalization\Config\Repository;

use eZ\Publish\Core\MVC\ConfigResolverInterface;
use EzSystems\EzRecommendationClient\Value\Parameters;

/**
* @internal
*/
final class RepositoryConfigResolver implements RepositoryConfigResolverInterface
{
private const USE_CONTENT_REMOTE_ID_PARAMETER = 'repository.content.use_remote_id';

/** @var \eZ\Publish\Core\MVC\ConfigResolverInterface */
private $configResolver;

public function __construct(ConfigResolverInterface $configResolver)
{
$this->configResolver = $configResolver;
}

public function useRemoteId(): bool
{
if (
!$this->configResolver->hasParameter(
self::USE_CONTENT_REMOTE_ID_PARAMETER,
Parameters::NAMESPACE
)
) {
return false;
}

return $this->configResolver->getParameter(
self::USE_CONTENT_REMOTE_ID_PARAMETER,
Parameters::NAMESPACE
);
}
}
17 changes: 17 additions & 0 deletions src/lib/Config/Repository/RepositoryConfigResolverInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?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\Personalization\Config\Repository;

/**
* @internal
*/
interface RepositoryConfigResolverInterface
{
public function useRemoteId(): bool;
}
73 changes: 73 additions & 0 deletions tests/lib/Config/Repository/RepositoryConfigResolverTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
<?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\Tests\Personalization\Config\Repository;

use eZ\Publish\Core\MVC\ConfigResolverInterface;
use Ibexa\Personalization\Config\Repository\RepositoryConfigResolver;
use PHPUnit\Framework\TestCase;

/**
* @covers \Ibexa\Personalization\Config\Repository\RepositoryConfigResolver
*/
final class RepositoryConfigResolverTest extends TestCase
{
/** @var \eZ\Publish\Core\MVC\ConfigResolverInterface|\PHPUnit\Framework\MockObject\MockObject */
private $configResolver;

/** @var \Ibexa\Personalization\Config\Repository\RepositoryConfigResolverInterface */
private $repositoryConfigResolver;

protected function setUp(): void
{
$this->configResolver = $this->createMock(ConfigResolverInterface::class);
$this->repositoryConfigResolver = new RepositoryConfigResolver($this->configResolver);
}

public function testUseRemoteId(): void
{
$this->mockConfigResolverHasParameter(true);
$this->mockConfigResolverGetParameter(true);

self::assertTrue($this->repositoryConfigResolver->useRemoteId());
}

public function testDoNotUseRemoteIdWhenParameterIsNotDefined(): void
{
$this->mockConfigResolverHasParameter(false);
$this->mockConfigResolverGetParameter(false);

self::assertFalse($this->repositoryConfigResolver->useRemoteId());
}

public function testDoNotUseRemoteIdWhenParameterValueIsFalse(): void
{
$this->mockConfigResolverHasParameter(true);
$this->mockConfigResolverGetParameter(false);

self::assertFalse($this->repositoryConfigResolver->useRemoteId());
}

private function mockConfigResolverHasParameter(bool $hasParameter): void
{
$this->configResolver
->expects(self::once())
->method('hasParameter')
->with('repository.content.use_remote_id', 'ezrecommendation')
->willReturn($hasParameter);
}

private function mockConfigResolverGetParameter(bool $useRemoteId): void
{
$this->configResolver
->expects(self::once())
->method('getParameter')
->with('repository.content.use_remote_id', 'ezrecommendation')
->willReturn($useRemoteId);
}
}

0 comments on commit 7ceee63

Please sign in to comment.