File tree Expand file tree Collapse file tree 4 files changed +62
-2
lines changed
src/Symfony/Component/Validator Expand file tree Collapse file tree 4 files changed +62
-2
lines changed Original file line number Diff line number Diff line change @@ -88,7 +88,8 @@ public function __construct($options = null)
88
88
}
89
89
}
90
90
91
- $ this ->groups = array_keys ($ mergedGroups );
91
+ // prevent empty composite constraint to have empty groups
92
+ $ this ->groups = array_keys ($ mergedGroups ) ?: [self ::DEFAULT_GROUP ];
92
93
$ this ->$ compositeOption = $ nestedConstraints ;
93
94
94
95
return ;
Original file line number Diff line number Diff line change @@ -100,4 +100,16 @@ public function testAcceptRequiredConstraintAsOneElementArray()
100
100
101
101
$ this ->assertEquals ($ collection1 , $ collection2 );
102
102
}
103
+
104
+ public function testConstraintHasDefaultGroupWithOptionalValues ()
105
+ {
106
+ $ constraint = new Collection ([
107
+ 'foo ' => new Required (),
108
+ 'bar ' => new Optional (),
109
+ ]);
110
+
111
+ $ this ->assertEquals (['Default ' ], $ constraint ->groups );
112
+ $ this ->assertEquals (['Default ' ], $ constraint ->fields ['foo ' ]->groups );
113
+ $ this ->assertEquals (['Default ' ], $ constraint ->fields ['bar ' ]->groups );
114
+ }
103
115
}
Original file line number Diff line number Diff line change @@ -143,6 +143,29 @@ public function testExtraFieldsDisallowed()
143
143
->assertRaised ();
144
144
}
145
145
146
+ public function testExtraFieldsDisallowedWithOptionalValues ()
147
+ {
148
+ $ constraint = new Optional ();
149
+
150
+ $ data = $ this ->prepareTestData ([
151
+ 'baz ' => 6 ,
152
+ ]);
153
+
154
+ $ this ->validator ->validate ($ data , new Collection ([
155
+ 'fields ' => [
156
+ 'foo ' => $ constraint ,
157
+ ],
158
+ 'extraFieldsMessage ' => 'myMessage ' ,
159
+ ]));
160
+
161
+ $ this ->buildViolation ('myMessage ' )
162
+ ->setParameter ('{{ field }} ' , '"baz" ' )
163
+ ->atPath ('property.path[baz] ' )
164
+ ->setInvalidValue (6 )
165
+ ->setCode (Collection::NO_SUCH_FIELD_ERROR )
166
+ ->assertRaised ();
167
+ }
168
+
146
169
// bug fix
147
170
public function testNullNotConsideredExtraField ()
148
171
{
Original file line number Diff line number Diff line change 19
19
20
20
class ConcreteComposite extends Composite
21
21
{
22
- public $ constraints ;
22
+ public $ constraints = [] ;
23
23
24
24
protected function getCompositeOption ()
25
25
{
@@ -37,6 +37,30 @@ public function getDefaultOption()
37
37
*/
38
38
class CompositeTest extends TestCase
39
39
{
40
+ public function testConstraintHasDefaultGroup ()
41
+ {
42
+ $ constraint = new ConcreteComposite ([
43
+ new NotNull (),
44
+ new NotBlank (),
45
+ ]);
46
+
47
+ $ this ->assertEquals (['Default ' ], $ constraint ->groups );
48
+ $ this ->assertEquals (['Default ' ], $ constraint ->constraints [0 ]->groups );
49
+ $ this ->assertEquals (['Default ' ], $ constraint ->constraints [1 ]->groups );
50
+ }
51
+
52
+ public function testNestedCompositeConstraintHasDefaultGroup ()
53
+ {
54
+ $ constraint = new ConcreteComposite ([
55
+ new ConcreteComposite (),
56
+ new ConcreteComposite (),
57
+ ]);
58
+
59
+ $ this ->assertEquals (['Default ' ], $ constraint ->groups );
60
+ $ this ->assertEquals (['Default ' ], $ constraint ->constraints [0 ]->groups );
61
+ $ this ->assertEquals (['Default ' ], $ constraint ->constraints [1 ]->groups );
62
+ }
63
+
40
64
public function testMergeNestedGroupsIfNoExplicitParentGroup ()
41
65
{
42
66
$ constraint = new ConcreteComposite ([
You can’t perform that action at this time.
0 commit comments