Skip to content

Commit 9d12d49

Browse files
committed
tests: add test for compiler pass
1 parent 64e11f1 commit 9d12d49

File tree

2 files changed

+87
-0
lines changed

2 files changed

+87
-0
lines changed

src/DependencyInjection/OverblogDataLoaderExtension.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public function load(array $configs, ContainerBuilder $container): void
3030
$config = $this->processConfiguration($configuration, $configs);
3131

3232
$container->registerAttributeForAutoconfiguration(AsDataLoader::class, function (ChildDefinition $definition, AsDataLoader $attribute, \ReflectionClass|\ReflectionMethod $reflector) use ($config) {
33+
if ($reflector instanceof \ReflectionMethod && null !== $attribute->method) {
34+
throw new \LogicException(sprintf('Parameter "method" for attribute "%s" must be NULL when applied on a method.', AsDataLoader::class));
35+
}
36+
3337
$definition->addTag('overblog.dataloader', array_merge($config['defaults'], [
3438
'name' => $attribute->name,
3539
'alias' => $attribute->alias,
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the OverblogDataLoaderBundle package.
5+
*
6+
* (c) Overblog <http://github.com/overblog/>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Overblog\DataLoaderBundle\Tests\DependencyInjection\CompilerPass;
13+
14+
use Overblog\DataLoaderBundle\DependencyInjection\CompilerPass\RegisterDataLoadersFromTagsPass;
15+
use PHPUnit\Framework\Attributes\DataProvider;
16+
use PHPUnit\Framework\TestCase;
17+
use Symfony\Component\DependencyInjection\ContainerBuilder;
18+
use Symfony\Component\DependencyInjection\Reference;
19+
20+
class RegisterDataLoadersFromTagsPassTest extends TestCase
21+
{
22+
public static function dataProvider(): array
23+
{
24+
$tagCreatedFromYaml = [
25+
'name' => 'dataloader1',
26+
'alias' => 'dataloader1_alias',
27+
'batch_load_fn' => '@service1:load',
28+
'promise_adapter' => 'overblog_dataloader.react_promise_adapter',
29+
'factory' => '@factory1:create',
30+
'options' => [
31+
'cache_map' => 'overblog_dataloader.cache_map',
32+
'cache_key_fn' => null,
33+
'max_batch_size' => 10,
34+
'cache' => true,
35+
'batch' => true,
36+
],
37+
];
38+
39+
$tagCreatedFromAttribute = [
40+
'name' => 'dataloader1',
41+
'alias' => 'dataloader1_alias',
42+
'method' => 'load',
43+
'promise_adapter' => 'overblog_dataloader.react_promise_adapter',
44+
'factory' => '@factory1:create',
45+
'options' => [
46+
'cache_map' => 'overblog_dataloader.cache_map',
47+
'cache_key_fn' => null,
48+
'max_batch_size' => 10,
49+
'cache' => true,
50+
'batch' => true,
51+
],
52+
];
53+
54+
return [
55+
[$tagCreatedFromYaml, [new Reference('service1'), 'load']],
56+
[$tagCreatedFromAttribute, [new Reference('dataloader1'), 'load']],
57+
];
58+
}
59+
60+
#[DataProvider('dataProvider')]
61+
public function testCreatesDataLoaderFromBatchLoadFn(array $tagProperties, array $batchLoadFn): void
62+
{
63+
$builder = new ContainerBuilder();
64+
$builder->register('dataloader1', \stdClass::class)->addTag('overblog.dataloader', $tagProperties);
65+
66+
(new RegisterDataLoadersFromTagsPass())->process($builder);
67+
68+
// Check if service is registered
69+
$this->assertTrue($builder->has('overblog_dataloader.dataloader1_loader'));
70+
$this->assertTrue($builder->has('dataloader1_alias'));
71+
72+
// Check if correct arguments are passed
73+
$arguments = $builder->getDefinition('overblog_dataloader.dataloader1_loader')->getArguments();
74+
$this->assertCount(3, $arguments);
75+
$this->assertEquals($batchLoadFn, $arguments[0]); // batch load function
76+
$this->assertEquals(new Reference('overblog_dataloader.react_promise_adapter'), $arguments[1]); // promise adapter
77+
$this->assertEquals(new Reference('overblog_dataloader.dataloader1_loader_option'), $arguments[2]); // options
78+
79+
// Check if factory is set
80+
$factory = $builder->getDefinition('overblog_dataloader.dataloader1_loader')->getFactory();
81+
$this->assertEquals([new Reference('factory1'), 'create'], $factory);
82+
}
83+
}

0 commit comments

Comments
 (0)