Skip to content

Commit eefedcd

Browse files
committed
Тесты.
1 parent d9d69ca commit eefedcd

File tree

9 files changed

+402
-3
lines changed

9 files changed

+402
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.idea
22
/vendor/
33
composer.lock
4+
.phpunit.result.cache

Resources/config/dev/local.yaml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
services:
2+
# конфигурация по умолчанию в *этом* файле
3+
_defaults:
4+
autowire: true
5+
autoconfigure: true
6+
public: true
7+
8+
json.encoder:
9+
class: Symfony\Component\Serializer\Encoder\JsonEncoder
10+
11+
# Нормалайзер объектов.
12+
object.normalizer:
13+
class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
14+
15+
# Сериализатор.
16+
serialize:
17+
class: Symfony\Component\Serializer\Serializer
18+
arguments:
19+
$normalizers:
20+
- '@object.normalizer'
21+
$encoders:
22+
- '@json.encoder'
23+
24+
Symfony\Component\Serializer\Serializer: '@serialize'
25+
Symfony\Component\Serializer\SerializerInterface: '@serialize'
26+
27+
serializer: '@serialize'
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
##############
2+
# Сериалайзер
3+
##############
4+
5+
services:
6+
# конфигурация по умолчанию в *этом* файле
7+
_defaults:
8+
autowire: true
9+
autoconfigure: true
10+
public: true
11+
12+
Symfony\Component\HttpKernel\Controller\ControllerResolver: ~
13+
14+
property_info:
15+
class: Symfony\Component\PropertyInfo\PropertyInfoExtractor
16+
arguments:
17+
- ['@property_info.reflection_extractor']
18+
- ['@property_info.reflection_extractor', '@property_info.php_doc_extractor']
19+
- ['@property_info.php_doc_extractor']
20+
- ['@property_info.reflection_extractor']
21+
- ['@property_info.reflection_extractor']
22+
23+
property_info.reflection_extractor:
24+
class: Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor
25+
tags:
26+
- { name: property_info.list_extractor, priority: -1000}
27+
- { name: property_info.type_extractor, priority: -1002}
28+
- { name: property_info.access_extractor, priority: -1000}
29+
- { name: property_info.initializable_extractor, priority: -1000}
30+
31+
property_info.php_doc_extractor:
32+
class: Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor
33+
tags:
34+
- { name: property_info.description_extractor, priority: -1000}
35+
- { name: property_info.type_extractor, priority: -1002}
36+
37+
Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor: '@property_info.php_doc_extractor'
38+
39+
Symfony\Component\PropertyInfo\PropertyReadInfoExtractorInterface: '@property_info.reflection_extractor'
40+
Symfony\Component\PropertyInfo\PropertyWriteInfoExtractorInterface: '@property_info.reflection_extractor'
41+
42+
Symfony\Component\PropertyInfo\PropertyInfoExtractor: '@property_info'
43+
Symfony\Component\PropertyInfo\PropertyAccessExtractorInterface: '@property_info'
44+
Symfony\Component\PropertyInfo\PropertyDescriptionExtractorInterface: '@property_info'
45+
Symfony\Component\PropertyInfo\PropertyInfoExtractorInterface: '@property_info'
46+
Symfony\Component\PropertyInfo\PropertyTypeExtractorInterface: '@property_info'
47+
Symfony\Component\PropertyInfo\PropertyListExtractorInterface: '@property_info'
48+
Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface: '@property_info'
49+
50+
# Сериализатор.
51+
serializer:
52+
class: Symfony\Component\Serializer\Serializer
53+
arguments:
54+
- ['@serializer.normalizer.object']
55+
- ['@json.encoder']
56+
57+
# json.encoder
58+
json.encoder:
59+
class: Symfony\Component\Serializer\Encoder\JsonEncoder
60+
tags: [serializer.encoder]
61+
62+
Symfony\Component\Serializer\Encoder\JsonEncoder: '@json.encoder'
63+
64+
json.encoder.unescaped:
65+
class: Symfony\Component\Serializer\Encoder\JsonEncode
66+
arguments:
67+
- [!php/const JSON_UNESCAPED_UNICODE]
68+
tags: [serializer.encoder]
69+
70+
serializer.encoder.xml:
71+
class: Symfony\Component\Serializer\Encoder\XmlEncoder
72+
73+
serializer.encoder.yaml:
74+
class: Symfony\Component\Serializer\Encoder\YamlEncoder
75+
76+
serializer.encoder.csv:
77+
class: Symfony\Component\Serializer\Encoder\CsvEncoder
78+
79+
# Нормалайзер объектов.
80+
object.normalizer:
81+
class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
82+
tags: [serializer.normalizer]
83+
84+
Symfony\Component\Serializer\Normalizer\ObjectNormalizer: '@serializer.normalizer.object'
85+
86+
serializer.normalizer.object:
87+
class: Symfony\Component\Serializer\Normalizer\ObjectNormalizer
88+
arguments:
89+
- "@serializer.mapping.class_metadata_factory"
90+
- "@serializer.name_converter.metadata_aware"
91+
- "@serializer.property_accessor"
92+
- "@property_info"
93+
- "@serializer.mapping.class_discriminator_resolver"
94+
- ~
95+
- []
96+
tags:
97+
# Run after all custom normalizers
98+
- { name: serializer.normalizer", priority: -1000}
99+
100+
serializer.denormalizer.array:
101+
class: Symfony\Component\Serializer\Normalizer\ArrayDenormalizer
102+
tags:
103+
- { name: serializer.normalizer", priority: -990}
104+
105+
serializer.normalizer.constraint_violation_list:
106+
class: Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer
107+
arguments:
108+
- []
109+
- '@serializer.name_converter.metadata_aware'
110+
tags:
111+
- { name: serializer.normalizer", priority: -915}
112+
113+
serializer.normalizer.datetimezone:
114+
class: Symfony\Component\Serializer\Normalizer\DateTimeZoneNormalizer
115+
tags:
116+
- { name: serializer.normalizer", priority: -915}
117+
118+
serializer.normalizer.dateinterval:
119+
class: Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer
120+
tags:
121+
- { name: serializer.normalizer", priority: -915}
122+
123+
serializer.normalizer.datetime:
124+
class: Symfony\Component\Serializer\Normalizer\DateTimeNormalizer
125+
tags:
126+
- { name: serializer.normalizer", priority: -910}
127+
128+
serializer.normalizer.json_serializable:
129+
class: Symfony\Component\Serializer\Normalizer\JsonSerializableNormalizer
130+
tags:
131+
- { name: serializer.normalizer", priority: -900}
132+
133+
serializer.normalizer.normalizer.problem:
134+
class: Symfony\Component\Serializer\Normalizer\ProblemNormalizer
135+
tags:
136+
- { name: serializer.normalizer", priority: -890}
137+
138+
serializer.normalizer.denormalizer.unwrapping:
139+
class: Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer
140+
tags:
141+
- { name: serializer.normalizer", priority: 1000}
142+
143+
# Сериализатор aliases.
144+
Symfony\Component\Serializer\Serializer: '@serializer'
145+
Symfony\Component\Serializer\SerializerInterface: '@serializer'
146+
Symfony\Component\Serializer\Normalizer\NormalizerInterface: '@serializer'
147+
Symfony\Component\Serializer\Normalizer\DenormalizerInterface: '@serializer'
148+
Symfony\Component\Serializer\Encoder\EncoderInterface: '@serializer'
149+
Symfony\Component\Serializer\Encoder\DecoderInterface: '@serializer'
150+
151+
serializer.property_accessor: '@property_accessor'
152+
153+
property_accessor:
154+
class: Symfony\Component\PropertyAccess\PropertyAccessor
155+
156+
serializer.mapping.class_metadata_factory:
157+
class: Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactory
158+
arguments: ['@serializer.mapping.chain_loader']
159+
160+
Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface: '@serializer.mapping.class_metadata_factory'
161+
162+
Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader: ~
163+
# Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader: ~
164+
# Symfony\Component\Serializer\Mapping\Loader\XmlFileLoader: ~
165+
# Symfony\Component\Serializer\Mapping\Loader\FileLoader: ~
166+
167+
serializer.mapping.chain_loader:
168+
class: Symfony\Component\Serializer\Mapping\Loader\LoaderChain
169+
arguments:
170+
- ['@Symfony\Component\Serializer\Mapping\Loader\AnnotationLoader']
171+
172+
serializer.mapping.class_discriminator_resolver:
173+
class: Symfony\Component\Serializer\Mapping\ClassDiscriminatorFromClassMetadata
174+
arguments: ['@serializer.mapping.class_metadata_factory']
175+
176+
serializer.name_converter.camel_case_to_snake_case:
177+
class: Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter
178+
179+
serializer.name_converter.metadata_aware:
180+
class: Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter
181+
arguments: ['@serializer.mapping.class_metadata_factory']
182+
183+
property_info.serializer_extractor:
184+
class: Symfony\Component\PropertyInfo\Extractor\SerializerExtractor
185+
arguments: ['@serializer.mapping.class_metadata_factory']
186+
tags:
187+
- { name: property_info.list_extractor, priority: -999 }
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<?php
2+
3+
namespace Prokl\WpSymfonyRouterBundle\Tests\Cases;
4+
5+
use Exception;
6+
use Prokl\WpSymfonyRouterBundle\Services\Controllers\ErrorJsonController;
7+
use Prokl\WpSymfonyRouterBundle\Tests\Tools\ContainerAwareBaseTestCase;
8+
use Symfony\Component\ErrorHandler\Exception\FlattenException;
9+
10+
/**
11+
* Class ErrorJsonControllerTest
12+
* @package Prokl\WpSymfonyRouterBundle\Tests
13+
* @coversDefaultClass ErrorJsonController
14+
*
15+
* @since 09.09.2020
16+
*/
17+
class ErrorJsonControllerTest extends ContainerAwareBaseTestCase
18+
{
19+
/**
20+
* @var ErrorJsonController $obTestObject Тестируемый объект.
21+
*/
22+
protected $obTestObject;
23+
24+
protected function setUp(): void
25+
{
26+
parent::setUp();
27+
$this->obTestObject = new ErrorJsonController(
28+
$this->container->get('serializer')
29+
);
30+
}
31+
32+
/**
33+
* exceptionAction().
34+
*/
35+
public function testExceptionAction() : void
36+
{
37+
$exception = FlattenException::create(
38+
new Exception('test', 400)
39+
);
40+
$exception->setStatusCode(400);
41+
42+
$result = $this->obTestObject->exceptionAction(
43+
$exception
44+
);
45+
46+
$this->assertSame(
47+
'{"error":true,"message":"test"}',
48+
$result->getContent(),
49+
'Ответ не правильный.'
50+
);
51+
52+
$this->assertSame(
53+
400,
54+
$result->getStatusCode(),
55+
'HTTP код не правильный.'
56+
);
57+
}
58+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Prokl\WpSymfonyRouterBundle\Tests\Tools;
4+
5+
use Exception;
6+
use Prokl\TestingTools\Base\BaseTestCase;
7+
use Prokl\TestingTools\Tools\Container\BuildContainer;
8+
9+
/**
10+
* Class ContainerAwareBaseTestCase
11+
* @packageProkl\WpSymfonyRouterBundle\Tests\Tools
12+
*
13+
* @since 23.04.2021
14+
*/
15+
class ContainerAwareBaseTestCase extends BaseTestCase
16+
{
17+
/**
18+
* @inheritDoc
19+
* @throws Exception
20+
*/
21+
protected function setUp(): void
22+
{
23+
$this->container = static::$testContainer = BuildContainer::getTestContainer(
24+
[
25+
'dev/test_container.yaml',
26+
'dev/local.yaml'
27+
],
28+
'/Resources/config'
29+
);
30+
31+
parent::setUp();
32+
}
33+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
namespace Prokl\WpSymfonyRouterBundle\Tests\Tools;
4+
5+
use ReflectionException;
6+
use ReflectionObject;
7+
use Symfony\Bundle\FrameworkBundle\Test\TestContainer;
8+
use Symfony\Component\DependencyInjection\ContainerInterface;
9+
10+
/**
11+
* Class CustomTestContainer
12+
* @package Prokl\WpSymfonyRouterBundle\Tests\Tools
13+
*
14+
* @since 18.11.2020
15+
*/
16+
class CustomTestContainer extends TestContainer
17+
{
18+
/**
19+
* @var ContainerInterface $testContainer Контейнер.
20+
*/
21+
private $testContainer;
22+
23+
/**
24+
* @var ContainerInterface $backupOriginalContainer Бэкап контейнера.
25+
*/
26+
private $backupOriginalContainer;
27+
/**
28+
* @param string $id
29+
* @param object|null $service
30+
*
31+
* @return void
32+
* @throws ReflectionException
33+
*/
34+
public function set($id, $service) : void
35+
{
36+
$reflection = new ReflectionObject($this->testContainer);
37+
$property = $reflection->getProperty('services');
38+
$property->setAccessible(true);
39+
40+
$services = $property->getValue($this->testContainer);
41+
42+
$services[$id] = $service;
43+
44+
$property->setValue($this->testContainer, $services);
45+
}
46+
47+
/**
48+
* @param ContainerInterface $container Контейнер.
49+
*
50+
* @return void
51+
*/
52+
public function setTestContainer(ContainerInterface $container) : void
53+
{
54+
$this->testContainer = $this->backupOriginalContainer = $container;
55+
}
56+
57+
/**
58+
* Сбросить контейнер до первоначального состояния.
59+
*
60+
* @return void
61+
*
62+
* @throws ReflectionException
63+
*/
64+
public function reset() : void
65+
{
66+
$reflection = new ReflectionObject($this->testContainer);
67+
$property = $reflection->getProperty('services');
68+
$property->setAccessible(true);
69+
70+
$property->setValue($this->testContainer, null);
71+
72+
$this->testContainer = $this->backupOriginalContainer;
73+
}
74+
}

Tests/bootstrap.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
$_SERVER['DOCUMENT_ROOT'] = __DIR__. "/..";

0 commit comments

Comments
 (0)