Skip to content

Commit 2da2f87

Browse files
authored
Use serializer provided by component lib (#101)
1 parent 37e7326 commit 2da2f87

File tree

4 files changed

+46
-32
lines changed

4 files changed

+46
-32
lines changed

src/Serializer/FiasSerializer.php

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,18 @@
1414
use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor;
1515
use Symfony\Component\Serializer\Encoder\DecoderInterface;
1616
use Symfony\Component\Serializer\Encoder\EncoderInterface;
17-
use Symfony\Component\Serializer\Encoder\JsonEncoder;
18-
use Symfony\Component\Serializer\Encoder\XmlEncoder;
1917
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
2018
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
2119
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
2220
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
23-
use Symfony\Component\Serializer\Serializer;
2421
use Symfony\Component\Serializer\SerializerInterface;
2522

2623
/**
2724
* Преднастроенный объект сериализатора для ФИАС.
2825
*/
2926
final class FiasSerializer implements SerializerInterface
3027
{
31-
private readonly Serializer $nestedSerializer;
28+
private readonly SerializerInterface $nestedSerializer;
3229

3330
/**
3431
* @param array<DenormalizerInterface|NormalizerInterface>|null $normalizers
@@ -57,18 +54,7 @@ public function __construct(?array $normalizers = null, ?array $encoders = null)
5754
];
5855
}
5956

60-
if ($encoders === null) {
61-
$encoders = [
62-
new XmlEncoder(
63-
[
64-
XmlEncoder::TYPE_CAST_ATTRIBUTES => false,
65-
]
66-
),
67-
new JsonEncoder(),
68-
];
69-
}
70-
71-
$this->nestedSerializer = new Serializer($normalizers, $encoders);
57+
$this->nestedSerializer = new \Liquetsoft\Fias\Component\Serializer\FiasSerializer($normalizers, $encoders);
7258
}
7359

7460
/**

tests/MockModel/FiasSerializerMock.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Illuminate\Database\Eloquent\Model;
88

99
/**
10-
* Мок для проверки десериалищации.
10+
* Мок для проверки десериализации.
1111
*/
1212
class FiasSerializerMock extends Model
1313
{
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Tests\MockModel;
6+
7+
/**
8+
* Мок для проверки десериализации json.
9+
*/
10+
final class FiasSerializerMockJson
11+
{
12+
public int $id = 0;
13+
public string $name = '';
14+
public float $floatNum = .0;
15+
public ?\DateTimeInterface $date = null;
16+
}

tests/Serializer/FiasSerializerTest.php

Lines changed: 27 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Serializer\FiasSerializer;
99
use Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Tests\BaseCase;
1010
use Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Tests\MockModel\FiasSerializerMock;
11+
use Liquetsoft\Fias\Laravel\LiquetsoftFiasBundle\Tests\MockModel\FiasSerializerMockJson;
1112
use Symfony\Component\Serializer\Exception\InvalidArgumentException;
1213
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
1314

@@ -51,6 +52,32 @@ public function testDeserialize(): void
5152
$this->assertNull($model->nullableCast);
5253
}
5354

55+
/**
56+
* Проверяет, что json верно конвертируется в модель.
57+
*/
58+
public function testDeserializeJson(): void
59+
{
60+
$data = json_encode(
61+
[
62+
'id' => '10',
63+
'name' => 'test',
64+
'floatNum' => '10.1',
65+
'date' => '10.10.2019 10:10:10',
66+
]
67+
);
68+
69+
$type = FiasSerializerMockJson::class;
70+
71+
$serializer = new FiasSerializer();
72+
$model = $serializer->deserialize($data, $type, 'json');
73+
74+
$this->assertInstanceOf($type, $model);
75+
$this->assertSame(10, $model->id);
76+
$this->assertSame('test', $model->name);
77+
$this->assertSame(10.1, $model->floatNum);
78+
$this->assertSame('2019-10-10 10:10', $model->date?->format('Y-m-d H:i'));
79+
}
80+
5481
/**
5582
* Проверяет, что xml верно конвертируется в указанный объект.
5683
*/
@@ -125,19 +152,4 @@ public function testDeserializeWrongObjectToPopulate(): void
125152
]
126153
);
127154
}
128-
129-
/**
130-
* Проверяет, что пустая строка вернется как пустая строка, а не null.
131-
*/
132-
public function testDeserializeEmptyString(): void
133-
{
134-
$data = '<ActualStatus name=""/>';
135-
$type = FiasSerializerMock::class;
136-
137-
$serializer = new FiasSerializer();
138-
$model = $serializer->deserialize($data, $type, 'xml');
139-
140-
$this->assertInstanceOf(FiasSerializerMock::class, $model);
141-
$this->assertSame('', $model->getAttribute('name'));
142-
}
143155
}

0 commit comments

Comments
 (0)