8000 bug #46545 Fix getting class constraints on debug command (loic425) · symfony/symfony@38f4695 · GitHub
[go: up one dir, main page]

Skip to content

Commit 38f4695

Browse files
bug #46545 Fix getting class constraints on debug command (loic425)
This PR was merged into the 5.4 branch. Discussion ---------- Fix getting class constraints on debug command | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Partially #46544 | License | MIT | Doc PR | <!-- Replace this notice by a short README for your feature/bugfix. This will help reviewers and should be a good start for the documentation. Additionally (see https://symfony.com/releases): - Always add tests and ensure they pass. - Bug fixes must be submitted against the lowest maintained branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too.) - Features and deprecations must be submitted against the latest branch. - Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry - Never break backward compatibility (see https://symfony.com/bc). --> Currently, Symfony `debug:validator` command does not show constraints that are configured on the class. It only shows constraints of class properties. So with this fix, we add class constraints on the output tables. `-` symbol is used on the `Property`column to show that the constraint is not linked to a property. Before <img width="1253" alt="before" src="https://user-images.githubusercontent.com/8329789/172346784-04b23d69-3443-4cef-9619-c9417a6fccc1.png"> After <img width="1518" alt="after" src="https://user-images.githubusercontent.com/8329789/172346181-4febe7ff-1e49-4fa2-bf98-aa08d495f52d.png"> Commits ------- 6330076 Fix getting class constraints on debug command
2 parents 7d40fc9 + 6330076 commit 38f4695

File tree

2 files changed

+102
-53
lines changed

2 files changed

+102
-53
lines changed

src/Symfony/Component/Validator/Command/DebugCommand.php

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,19 @@ private function dumpValidatorsForClass(InputInterface $input, OutputInterface $
9090
$rows = [];
9191
$dump = new Dumper($output);
9292

93-
foreach ($this->getConstrainedPropertiesData($class) as $propertyName => $constraintsData) {
93+
/** @var ClassMetadataInterface $classMetadata */
94+
$classMetadata = $this->validator->getMetadataFor($class);
95+
96+
foreach ($this->getClassConstraintsData($classMetadata) as $data) {
97+
$rows[] = [
98+
'-',
99+
$data['class'],
100+
implode(', ', $data['groups']),
101+
$dump($data['options']),
102+
];
103+
}
104+
105+
foreach ($this->getConstrainedPropertiesData($classMetadata) as $propertyName => $constraintsData) {
94106
foreach ($constraintsData as $data) {
95107
$rows[] = [
96108
$propertyName,
@@ -121,12 +133,20 @@ private function dumpValidatorsForClass(InputInterface $input, OutputInterface $
121133
$table->render();
122134
}
123135

124-
private function getConstrainedPropertiesData(string $class): array
136+
private function getClassConstraintsData(ClassMetadataInterface $classMetadata): iterable
125137
{
126-
$data = [];
138+
foreach ($classMetadata->getConstraints() as $constraint) {
139+
yield [
140+
'class' => \get_class($constraint),
141+
'groups' => $constraint->groups,
142+
'options' => $this->getConstraintOptions($constraint),
143+
];
144+
}
145+
}
127146

128-
/** @var ClassMetadataInterface $classMetadata */
129-
$classMetadata = $this->validator->getMetadataFor($class);
147+
private function getConstrainedPropertiesData(ClassMetadataInterface $classMetadata): array
148+
{
149+
$data = [];
130150

131151
foreach ($classMetadata->getConstrainedProperties() as $constrainedProperty) {
132152
$data[$constrainedProperty] = $this->getPropertyData($classMetadata, $constrainedProperty);

src/Symfony/Component/Validator/Tests/Command/DebugCommandTest.php

Lines changed: 77 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Symfony\Component\Console\Tester\CommandTester;
1616
use Symfony\Component\Validator\Command\DebugCommand;
1717
use Symfony\Component\Validator\Constraints\Email;
18+
use Symfony\Component\Validator\Constraints\Expression;
1819
use Symfony\Component\Validator\Constraints\NotBlank;
1920
use Symfony\Component\Validator\Mapping\ClassMetadataInterface;
2021
use Symfony\Component\Validator\Mapping\Factory\MetadataFactoryInterface;
@@ -38,6 +39,11 @@ public function testOutputWithClassArgument()
3839
->with(DummyClassOne::class)
3940
->willReturn($classMetadata);
4041

42+
$classMetadata
43+
->expects($this->once())
44+
->method('getConstraints')
45+
->willReturn([new Expression('1 + 1 = 2')]);
46+
4147
$classMetadata
4248
->expects($this->once())
4349
->method('getConstrainedProperties')
@@ -68,22 +74,28 @@ public function testOutputWithClassArgument()
6874
Symfony\Component\Validator\Tests\Dummy\DummyClassOne
6975
-----------------------------------------------------
7076
71-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
72-
| A3E2 Property | Name | Groups | Options |
73-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
74-
| firstArgument | Symfony\Component\Validator\Constraints\NotBlank | Default | [ |
75-
| | | | "allowNull" => false, |
76-
| | | | "message" => "This value should not be blank.", |
77-
| | | | "normalizer" => null, |
78-
| | | | "payload" => null |
79-
| | | | ] |
80-
| firstArgument | Symfony\Component\Validator\Constraints\Email | Default | [ |
81-
| | | | "message" => "This value is not a valid email address.", |
82-
| | | | "mode" => null, |
83-
| | | | "normalizer" => null, |
84-
| | | | "payload" => null |
85-
| | | | ] |
86-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
77+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
78+
| Property | Name | Groups | Options |
79+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
80+
| - | Symfony\Component\Validator\Constraints\Expression | Default | [ |
81+
| | | | "expression" => "1 + 1 = 2", |
82+
| | | | "message" => "This value is not valid.", |
83+
| | | | "payload" => null, |
84+
| | | | "values" => [] |
85+
| | | | ] |
86+
| firstArgument | Symfony\Component\Validator\Constraints\NotBlank | Default | [ |
87+
| | | | "allowNull" => false, |
88+
| | | | "message" => "This value should not be blank.", |
89+
| | | | "normalizer" => null, |
90+
| | | | "payload" => null |
91+
| | | | ] |
92+
| firstArgument | Symfony\Component\Validator\Constraints\Email | Default | [ |
93+
| | | | "message" => "This value is not a valid email address.", |
94+
| | | | "mode" => null, |
95+
| | | | "normalizer" => null, |
96+
| | | | "payload" => null |
97+
| | | | ] |
98+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
8799
88100
TXT
89101
, $tester->getDisplay(true)
@@ -108,6 +120,11 @@ public function testOutputWithPathArgument()
108120
'firstArgument',
109121
]);
110122

123+
$classMetadata
124+
->expects($this->exactly(2))
125+
->method('getConstraints')
126+
->willReturn([new Expression('1 + 1 = 2')]);
127+
111128
$classMetadata
112129
->method('getPropertyMetadata')
113130
->with('firstArgument')
@@ -129,42 +146,54 @@ public function testOutputWithPathArgument()
129146
Symfony\Component\Validator\Tests\Dummy\DummyClassOne
130147
-----------------------------------------------------
131148
132-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
133-
| Property | Name | Groups | Options |
134-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
135-
| firstArgument | Symfony\Component\Validator\Constraints\NotBlank | Default | [ |
136-
| | | | "allowNull" => false, |
137-
| | | | "message" => "This value should not be blank.", |
138-
| | | | "normalizer" => null, |
139-
| | | | "payload" => null |
140-
| | | | ] |
141-
| firstArgument | Symfony\Component\Validator\Constraints\Email | Default | [ |
142-
| | | | "message" => "This value is not a valid email address.", |
143-
| | | | "mode" => null, |
144-
| | | | "normalizer" => null, |
145-
| | | | "payload" => null |
146-
| | | | ] |
147-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
149+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
150+
| Property | Name | Groups | Options |
151+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
152+
| - | Symfony\Component\Validator\Constraints\Expression | Default | [ |
153+
| | | | "expression" => "1 + 1 = 2", |
154+
| | | | "message" => "This value is not valid.", |
155+
| | | | "payload" => null, |
156+
| | | | "values" => [] |
157+
| | | | ] |
158+
| firstArgument | Symfony\Component\Validator\Constraints\NotBlank | Default | [ |
159+
| | | | "allowNull" => false, |
160+
| | | | "message" => "This value should not be blank.", |
161+
| | | | "normalizer" => null, |
162+
| | | | "payload" => null |
163+
| | | | ] |
164+
| firstArgument | Symfony\Component\Validator\Constraints\Email | Default | [ |
165+
| | | | "message" => "This value is not a valid email address.", |
166+
| | | | "mode" => null, |
167+
| | | | "normalizer" => null, |
168+
| | | | "payload" => null |
169+
| | | | ] |
170+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
148171
149172
Symfony\Component\Validator\Tests\Dummy\DummyClassTwo
150173
-----------------------------------------------------
151174
152-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
153-
| Property | Name | Groups | Options |
154-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
155-
| firstArgument | Symfony\Component\Validator\Constraints\NotBlank | Default | [ |
156-
| | | | "allowNull" => false, |
157-
| | | | "message" => "This value should not be blank.", |
158-
| | | | "normalizer" => null, |
159-
| | | | "payload" => null |
160-
| | | | ] |
161-
| firstArgument | Symfony\Component\Validator\Constraints\Email | Default | [ |
162-
| | | | "message" => "This value is not a valid email address.", |
163-
| | | | "mode" => null, |
164-
| | | | "normalizer" => null, |
165-
| | | | "payload" => null |
166-
| | | | ] |
167-
+---------------+--------------------------------------------------+---------+------------------------------------------------------------+
175+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
176+
| Property | Name | Groups | Options |
177+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
178+
| - | Symfony\Component\Validator\Constraints\Expression | Default | [ |
179+
| | | | "expression" => "1 + 1 = 2", |
180+
| | | | "message" => "This value is not valid.", |
181+
| | | | "payload" => null, |
182+
| | | | "values" => [] |
183+
| | | | ] |
184+
| firstArgument | Symfony\Component\Validator\Constraints\NotBlank | Default | [ |
185+
| | | | "allowNull" => false, |
186+
| | | | "message" => "This value should not be blank.", |
187+
| | | | "normalizer" => null, |
188+
| | | | "payload" => null |
189+
| | | | ] |
190+
| firstArgument | Symfony\Component\Validator\Constraints\Email | Default | [ |
191+
| | | | "message" => "This value is not a valid email address.", |
192+
| | | | "mode" => null, |
193+
| | | | "normalizer" => null, |
194+
| | | | "payload" => null |
195+
| | | | ] |
196+
+---------------+----------------------------------------------------+---------+------------------------------------------------------------+
168197
169198
TXT
170199
, $tester->getDisplay(true)

0 commit comments

Comments
 (0)
0