Skip to content

Commit 394866c

Browse files
committed
[FrameworkBundle] Fix passing serializer.default_context option to normalizers
1 parent 13a30ef commit 394866c

File tree

3 files changed

+82
-3
lines changed

3 files changed

+82
-3
lines changed

Resources/config/serializer.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@
7878

7979
// Normalizer
8080
->set('serializer.normalizer.constraint_violation_list', ConstraintViolationListNormalizer::class)
81-
->args([[], service('serializer.name_converter.metadata_aware')])
81+
->args([1 => service('serializer.name_converter.metadata_aware')])
82+
->autowire(true)
8283
->tag('serializer.normalizer', ['priority' => -915])
8384

8485
->set('serializer.normalizer.mime_message', MimeMessageNormalizer::class)
@@ -124,7 +125,6 @@
124125
service('property_info')->ignoreOnInvalid(),
125126
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
126127
null,
127-
[],
128128
])
129129
->tag('serializer.normalizer', ['priority' => -1000])
130130

@@ -137,7 +137,6 @@
137137
service('property_info')->ignoreOnInvalid(),
138138
service('serializer.mapping.class_discriminator_resolver')->ignoreOnInvalid(),
139139
null,
140-
[],
141140
])
142141

143142
->alias(PropertyNormalizer::class, 'serializer.normalizer.property')

Tests/Functional/SerializerTest.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,41 @@ public function testDeserializeArrayOfObject()
3232

3333
$this->assertEquals($expected, $result);
3434
}
35+
36+
/**
37+
* @dataProvider provideNormalizersAndEncodersWithDefaultContextOption
38+
*/
39+
public function testNormalizersAndEncodersUseDefaultContextConfigOption(string $normalizerId)
40+
{
41+
static::bootKernel(['test_case' => 'Serializer']);
42+
43+
$normalizer = static::getContainer()->get($normalizerId);
44+
45+
$reflectionObject = new \ReflectionObject($normalizer);
46+
$property = $reflectionObject->getProperty('defaultContext');
47+
$property->setAccessible(true);
48+
49+
$defaultContext = $property->getValue($normalizer);
50+
51+
self::assertArrayHasKey('fake_context_option', $defaultContext);
52+
self::assertEquals('foo', $defaultContext['fake_context_option']);
53+
}
54+
55+
public function provideNormalizersAndEncodersWithDefaultContextOption(): array
56+
{
57+
return [
58+
['serializer.normalizer.constraint_violation_list.alias'],
59+
['serializer.normalizer.dateinterval.alias'],
60+
['serializer.normalizer.datetime.alias'],
61+
['serializer.normalizer.json_serializable.alias'],
62+
['serializer.normalizer.problem.alias'],
63+
['serializer.normalizer.uid.alias'],
64+
['serializer.normalizer.object.alias'],
65+
['serializer.encoder.xml.alias'],
66+
['serializer.encoder.yaml.alias'],
67+
['serializer.encoder.csv.alias'],
68+
];
69+
}
3570
}
3671

3772
class Foo

Tests/Functional/app/Serializer/config.yml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,54 @@ framework:
66
enabled: true
77
default_context:
88
enable_max_depth: true
9+
fake_context_option: foo
910
property_info: { enabled: true }
1011

1112
services:
1213
serializer.alias:
1314
alias: serializer
1415
public: true
16+
17+
serializer.normalizer.constraint_violation_list.alias:
18+
alias: serializer.normalizer.constraint_violation_list
19+
public: true
20+
21+
serializer.normalizer.dateinterval.alias:
22+
alias: serializer.normalizer.dateinterval
23+
public: true
24+
25+
serializer.normalizer.datetime.alias:
26+
alias: serializer.normalizer.datetime
27+
public: true
28+
29+
serializer.normalizer.json_serializable.alias:
30+
alias: serializer.normalizer.json_serializable
31+
public: true
32+
33+
serializer.normalizer.problem.alias:
34+
alias: serializer.normalizer.problem
35+
public: true
36+
37+
serializer.normalizer.uid.alias:
38+
alias: serializer.normalizer.uid
39+
public: true
40+
41+
serializer.normalizer.property.alias:
42+
alias: serializer.normalizer.property
43+
public: true
44+
45+
serializer.normalizer.object.alias:
46+
alias: serializer.normalizer.object
47+
public: true
48+
49+
serializer.encoder.xml.alias:
50+
alias: serializer.encoder.xml
51+
public: true
52+
53+
serializer.encoder.yaml.alias:
54+
alias: serializer.encoder.yaml
55+
public: true
56+
57+
serializer.encoder.csv.alias:
58+
alias: serializer.encoder.csv
59+
public: true

0 commit comments

Comments
 (0)