-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathApiProblemExtensionTest.php
More file actions
80 lines (69 loc) · 2.74 KB
/
ApiProblemExtensionTest.php
File metadata and controls
80 lines (69 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
declare(strict_types=1);
namespace PhproTest\ApiProblemBundle\DependencyInjection;
use Matthias\SymfonyDependencyInjectionTest\PhpUnit\AbstractExtensionTestCase;
use Phpro\ApiProblemBundle\DependencyInjection\ApiProblemExtension;
use Phpro\ApiProblemBundle\EventListener\JsonApiProblemExceptionListener;
use Phpro\ApiProblemBundle\Transformer;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\Test;
use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
#[CoversClass(ApiProblemExtension::class)]
class ApiProblemExtensionTest extends AbstractExtensionTestCase
{
private const TRANSFORMER_TAG = 'phpro.api_problem.exception_transformer';
protected function getContainerExtensions(): array
{
return [new ApiProblemExtension()];
}
#[Test]
public function it_registers_json_exception_listener(): void
{
$this->load([]);
$this->assertContainerBuilderHasService(
JsonApiProblemExceptionListener::class,
JsonApiProblemExceptionListener::class
);
$this->assertContainerBuilderHasServiceDefinitionWithArgument(
JsonApiProblemExceptionListener::class,
'$exceptionTransformer',
Transformer\Chain::class
);
$this->assertContainerBuilderHasServiceDefinitionWithArgument(
JsonApiProblemExceptionListener::class,
'$debug',
'%kernel.debug%'
);
$this->assertContainerBuilderHasServiceDefinitionWithTag(
JsonApiProblemExceptionListener::class,
'kernel.event_listener',
[
'event' => 'kernel.exception',
'method' => 'onKernelException',
'priority' => '-5',
]
);
}
#[Test]
public function it_contains_exception_transformers(): void
{
$this->load([]);
$this->assertContainerBuilderHasService(
Transformer\Chain::class,
Transformer\Chain::class
);
$this->assertContainerBuilderHasServiceDefinitionWithArgument(
Transformer\Chain::class,
0,
new TaggedIteratorArgument(self::TRANSFORMER_TAG)
);
$this->assertContainerHasTransformer(Transformer\ApiProblemExceptionTransformer::class);
$this->assertContainerHasTransformer(Transformer\HttpExceptionTransformer::class);
$this->assertContainerHasTransformer(Transformer\SecurityExceptionTransformer::class);
}
private function assertContainerHasTransformer(string $serviceId): void
{
$this->assertContainerBuilderHasService($serviceId, $serviceId);
$this->assertContainerBuilderHasServiceDefinitionWithTag($serviceId, self::TRANSFORMER_TAG);
}
}