Skip to content

Commit

Permalink
Simplify product varaint resolvers autoconfiguration
Browse files Browse the repository at this point in the history
  • Loading branch information
NoResponseMate committed Jun 20, 2023
1 parent 7057cf5 commit 21bc2de
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,7 @@ public function prepend(ContainerBuilder $container): void
$this->prependHwiOauth($container);
$this->prependDoctrineMigrations($container);
$this->prependJmsSerializerIfAdminApiBundleIsNotPresent($container);
$this->prependSyliusAutoconfigurationConfig($container, [
'sylius_order',
'sylius_product',
], $config['autoconfigure_with_attributes'] ?? false);
$this->prependSyliusOrderBundle($container, $config);
}

protected function getMigrationsNamespace(): string
Expand Down Expand Up @@ -171,20 +168,15 @@ private function prependJmsSerializerIfAdminApiBundleIsNotPresent(ContainerBuild
]);
}

private function prependSyliusAutoconfigurationConfig(
ContainerBuilder $container,
array $extensions,
bool $autoconfigure,
): void {
foreach ($extensions as $extension) {
if (!$container->hasExtension($extension)) {
continue;
}

$container->prependExtensionConfig($extension, [
'autoconfigure_with_attributes' => $autoconfigure,
]);
private function prependSyliusOrderBundle(ContainerBuilder $container, array $config): void
{
if (!$container->hasExtension('sylius_order')) {
return;
}

$container->prependExtensionConfig('sylius_order', [
'autoconfigure_with_attributes' => $config['autoconfigure_with_attributes'] ?? false,
]);
}

private function switchOrderProcessorsPriorities(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

final class DefaultProductVariantResolverCompilerPass implements CompilerPassInterface
{
private const DEFAULT_PRIORITY = -999;

public function process(ContainerBuilder $container): void
{
if (!$container->has('sylius.product_variant_resolver.default')) {
Expand All @@ -27,7 +29,7 @@ public function process(ContainerBuilder $container): void
// In case someone overwritten the service, we need to make sure it's tagged
$defaultResolver = $container->getDefinition('sylius.product_variant_resolver.default');
if (!$defaultResolver->hasTag('sylius.product_variant_resolver')) {
$defaultResolver->addTag('sylius.product_variant_resolver', ['priority' => -999]);
$defaultResolver->addTag('sylius.product_variant_resolver', ['priority' => self::DEFAULT_PRIORITY]);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ public function getConfigTreeBuilder(): TreeBuilder
->addDefaultsIfNotSet()
->children()
->scalarNode('driver')->defaultValue(SyliusResourceBundle::DRIVER_DOCTRINE_ORM)->end()
->scalarNode('autoconfigure_with_attributes')->defaultFalse()->end()
->end()
;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
use Sylius\Component\Product\Model\ProductAttributeTranslationInterface;
use Sylius\Component\Product\Model\ProductAttributeValue;
use Sylius\Component\Product\Model\ProductAttributeValueInterface;
use Sylius\Component\Product\Resolver\ProductVariantResolverInterface;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ChildDefinition;
use Symfony\Component\DependencyInjection\ContainerBuilder;
Expand All @@ -46,7 +45,7 @@ public function load(array $configs, ContainerBuilder $container): void

$loader->load('services.xml');

$this->registerAutoconfiguration($container, $config['autoconfigure_with_attributes']);
$this->registerAutoconfiguration($container);
}

public function prepend(ContainerBuilder $container): void
Expand All @@ -56,21 +55,14 @@ public function prepend(ContainerBuilder $container): void
$this->prependAttribute($container, $config);
}

private function registerAutoconfiguration(ContainerBuilder $container, bool $autoconfigureWithAttributes): void
private function registerAutoconfiguration(ContainerBuilder $container): void
{
if ($autoconfigureWithAttributes) {
$container->registerAttributeForAutoconfiguration(
AsProductVariantResolver::class,
static function (ChildDefinition $definition, AsProductVariantResolver $attribute): void {
$definition->addTag('sylius.product_variant_resolver', ['priority' => $attribute->getPriority()]);
},
);
} else {
$container
->registerForAutoconfiguration(ProductVariantResolverInterface::class)
->addTag('sylius.product_variant_resolver')
;
}
$container->registerAttributeForAutoconfiguration(
AsProductVariantResolver::class,
static function (ChildDefinition $definition, AsProductVariantResolver $attribute): void {
$definition->addTag('sylius.product_variant_resolver', ['priority' => $attribute->getPriority()]);
},
);
}

private function prependAttribute(ContainerBuilder $container, array $config): void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,38 +16,13 @@
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
use Sylius\Bundle\ProductBundle\DependencyInjection\SyliusProductExtension;
use Sylius\Bundle\ProductBundle\Tests\Stub\ProductVariantResolverStub;
use Sylius\Component\Product\Resolver\ProductVariantResolverInterface;
use Symfony\Component\DependencyInjection\Definition;

final class SyliusProductExtensionsTest extends AbstractExtensionTestCase
{
/** @test */
public function it_autoconfigures_product_variant_resolvers(): void
{
$variantResolver = $this->createMock(ProductVariantResolverInterface::class);
$this->container->setDefinition(
'acme.product_variant_resolver_autoconfigured',
(new Definition())
->setClass(get_class($variantResolver))
->setAutoconfigured(true),
);

$this->load();
$this->compile();

$this->assertContainerBuilderHasServiceDefinitionWithTag(
'acme.product_variant_resolver_autoconfigured',
'sylius.product_variant_resolver',
);
}

/** @test */
public function it_autoconfigures_product_variant_resolver_with_attribute(): void
{
$this->container->loadFromExtension('sylius_product', [
'autoconfigure_with_attributes' => true,
]);

$this->container->setDefinition(
'acme.product_variant_resolver_autoconfigured',
(new Definition())
Expand Down

0 comments on commit 21bc2de

Please sign in to comment.