Skip to content
Snippets Groups Projects
Commit a0290ec6 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #2284413 by damiankloip: Use addMethodCall() instead of...

Issue #2284413 by damiankloip: Use addMethodCall() instead of replaceArgument() in RegisterEntityResolversCompilerPass.
parent 2a806cc6
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
...@@ -34,7 +34,6 @@ services: ...@@ -34,7 +34,6 @@ services:
- { name: encoder, format: xml } - { name: encoder, format: xml }
serializer.entity_resolver: serializer.entity_resolver:
class: Drupal\serialization\EntityResolver\ChainEntityResolver class: Drupal\serialization\EntityResolver\ChainEntityResolver
arguments: [{ }]
serializer.entity_resolver.uuid: serializer.entity_resolver.uuid:
class: Drupal\serialization\EntityResolver\UuidResolver class: Drupal\serialization\EntityResolver\UuidResolver
tags: tags:
......
...@@ -12,14 +12,14 @@ ...@@ -12,14 +12,14 @@
/** /**
* Resolver delegating the entity resolution to a chain of resolvers. * Resolver delegating the entity resolution to a chain of resolvers.
*/ */
class ChainEntityResolver implements EntityResolverInterface { class ChainEntityResolver implements ChainEntityResolverInterface {
/** /**
* The concrete resolvers. * The concrete resolvers.
* *
* @var \Drupal\serialization\EntityResolver\EntityResolverInterface[] * @var \Drupal\serialization\EntityResolver\EntityResolverInterface[]
*/ */
protected $resolvers; protected $resolvers = array();
/** /**
* Constructs a ChainEntityResolver object. * Constructs a ChainEntityResolver object.
...@@ -31,6 +31,13 @@ public function __construct(array $resolvers = array()) { ...@@ -31,6 +31,13 @@ public function __construct(array $resolvers = array()) {
$this->resolvers = $resolvers; $this->resolvers = $resolvers;
} }
/**
* {@inheritdoc}
*/
public function addResolver(EntityResolverInterface $resolver) {
$this->resolvers[] = $resolver;
}
/** /**
* {@inheritdoc} * {@inheritdoc}
*/ */
......
<?php
/**
* @file
* Contains \Drupal\serialization\EntityResolver\ChainEntityResolverInterface
*/
namespace Drupal\serialization\EntityResolver;
/**
* An interface for delegating a entity resolution to a chain of resolvers.
*/
interface ChainEntityResolverInterface extends EntityResolverInterface {
/**
* Adds an entity resolver.
*
* @param \Drupal\serialization\EntityResolver\EntityResolverInterface $resolver
* The entity resolver to add.
*/
public function addResolver(EntityResolverInterface $resolver);
}
...@@ -24,6 +24,7 @@ class RegisterEntityResolversCompilerPass implements CompilerPassInterface { ...@@ -24,6 +24,7 @@ class RegisterEntityResolversCompilerPass implements CompilerPassInterface {
*/ */
public function process(ContainerBuilder $container) { public function process(ContainerBuilder $container) {
$definition = $container->getDefinition('serializer.entity_resolver'); $definition = $container->getDefinition('serializer.entity_resolver');
$resolvers = array();
// Retrieve registered Normalizers and Encoders from the container. // Retrieve registered Normalizers and Encoders from the container.
foreach ($container->findTaggedServiceIds('entity_resolver') as $id => $attributes) { foreach ($container->findTaggedServiceIds('entity_resolver') as $id => $attributes) {
...@@ -32,8 +33,8 @@ public function process(ContainerBuilder $container) { ...@@ -32,8 +33,8 @@ public function process(ContainerBuilder $container) {
} }
// Add the registered concrete EntityResolvers to the ChainEntityResolver. // Add the registered concrete EntityResolvers to the ChainEntityResolver.
if (!empty($resolvers)) { foreach ($this->sort($resolvers) as $resolver) {
$definition->replaceArgument(0, $this->sort($resolvers)); $definition->addMethodCall('addResolver', array($resolver));
} }
} }
......
...@@ -47,6 +47,9 @@ public function setUp() { ...@@ -47,6 +47,9 @@ public function setUp() {
/** /**
* Test the resolve method with no matching resolvers. * Test the resolve method with no matching resolvers.
*
* @covers ::__construct
* @covers ::resolve
*/ */
public function testResolverWithNoneResolved() { public function testResolverWithNoneResolved() {
$resolvers = array( $resolvers = array(
...@@ -59,8 +62,25 @@ public function testResolverWithNoneResolved() { ...@@ -59,8 +62,25 @@ public function testResolverWithNoneResolved() {
$this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType)); $this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
} }
/**
* Test the resolve method with no matching resolvers, using addResolver.
*
* @covers ::addResolver
* @covers ::resolve
*/
public function testResolverWithNoneResolvedUsingAddResolver() {
$resolver = new ChainEntityResolver();
$resolver->addResolver($this->createEntityResolverMock());
$resolver->addResolver($this->createEntityResolverMock());
$this->assertNull($resolver->resolve($this->testNormalizer, $this->testData, $this->testEntityType));
}
/** /**
* Test the resolve method with a matching resolver first. * Test the resolve method with a matching resolver first.
*
* @covers ::__construct
* @covers ::resolve
*/ */
public function testResolverWithFirstResolved() { public function testResolverWithFirstResolved() {
$resolvers = array( $resolvers = array(
...@@ -75,6 +95,9 @@ public function testResolverWithFirstResolved() { ...@@ -75,6 +95,9 @@ public function testResolverWithFirstResolved() {
/** /**
* Test the resolve method with a matching resolver last. * Test the resolve method with a matching resolver last.
*
* @covers ::__construct
* @covers ::resolve
*/ */
public function testResolverWithLastResolved() { public function testResolverWithLastResolved() {
$resolvers = array( $resolvers = array(
...@@ -97,7 +120,7 @@ public function testResolverWithLastResolved() { ...@@ -97,7 +120,7 @@ public function testResolverWithLastResolved() {
* Whether or not the resolve method is expected to be called. * Whether or not the resolve method is expected to be called.
* *
* @return \Drupal\serialization\EntityResolver\EntityResolverInterface|\PHPUnit_Framework_MockObject_MockObject * @return \Drupal\serialization\EntityResolver\EntityResolverInterface|\PHPUnit_Framework_MockObject_MockObject
* The mocked entity ressolver. * The mocked entity resolver.
*/ */
protected function createEntityResolverMock($return = NULL, $called = TRUE) { protected function createEntityResolverMock($return = NULL, $called = TRUE) {
$mock = $this->getMock('Drupal\serialization\EntityResolver\EntityResolverInterface'); $mock = $this->getMock('Drupal\serialization\EntityResolver\EntityResolverInterface');
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment