|
12 | 12 | namespace Symfony\Component\HttpKernel\Tests\Controller\ArgumentResolver; |
13 | 13 |
|
14 | 14 | use PHPUnit\Framework\TestCase; |
15 | | -use Symfony\Component\HttpFoundation\Exception\BadRequestException; |
16 | 15 | use Symfony\Component\HttpFoundation\Request; |
17 | 16 | use Symfony\Component\HttpKernel\Controller\ArgumentResolver\BackedEnumValueResolver; |
18 | 17 | use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; |
| 18 | +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; |
19 | 19 | use Symfony\Component\HttpKernel\Tests\Fixtures\Suit; |
20 | 20 |
|
21 | 21 | /** |
@@ -59,14 +59,14 @@ public function provideTestSupportsData(): iterable |
59 | 59 | false, |
60 | 60 | ]; |
61 | 61 |
|
62 | | - yield 'supports variadics' => [ |
| 62 | + yield 'unsupported variadic' => [ |
63 | 63 | self::createRequest(['suit' => ['H', 'S']]), |
64 | 64 | self::createArgumentMetadata( |
65 | 65 | 'suit', |
66 | 66 | Suit::class, |
67 | 67 | variadic: true, |
68 | 68 | ), |
69 | | - true, |
| 69 | + false, |
70 | 70 | ]; |
71 | 71 | } |
72 | 72 |
|
@@ -98,54 +98,30 @@ public function provideTestResolveData(): iterable |
98 | 98 | ), |
99 | 99 | [null], |
100 | 100 | ]; |
101 | | - |
102 | | - yield 'with variadics' => [ |
103 | | - self::createRequest(['suits' => ['H', null, 'S']]), |
104 | | - self::createArgumentMetadata( |
105 | | - 'suits', |
106 | | - Suit::class, |
107 | | - variadic: true |
108 | | - ), |
109 | | - [Suit::Hearts, null, Suit::Spades], |
110 | | - ]; |
111 | 101 | } |
112 | 102 |
|
113 | | - public function testResolveThrowsOnInvalidValue() |
| 103 | + public function testResolveThrowsNotFoundOnInvalidValue() |
114 | 104 | { |
115 | 105 | $resolver = new BackedEnumValueResolver(); |
116 | 106 | $request = self::createRequest(['suit' => 'foo']); |
117 | 107 | $metadata = self::createArgumentMetadata('suit', Suit::class); |
118 | 108 |
|
119 | | - $this->expectException(BadRequestException::class); |
120 | | - $this->expectExceptionMessage('Could not resolve the "suit" controller argument: "foo" is not a valid backing value for enum "Symfony\Component\HttpKernel\Tests\Fixtures\Suit"'); |
| 109 | + $this->expectException(NotFoundHttpException::class); |
| 110 | + $this->expectExceptionMessage('Could not resolve the "Symfony\Component\HttpKernel\Tests\Fixtures\Suit $suit" controller argument: "foo" is not a valid backing value for enum'); |
121 | 111 |
|
122 | 112 | /** @var \Generator $results */ |
123 | 113 | $results = $resolver->resolve($request, $metadata); |
124 | 114 | iterator_to_array($results); |
125 | 115 | } |
126 | 116 |
|
127 | | - public function testResolveThrowsOnNonVariadicArgumentWithMultipleValues() |
| 117 | + public function testResolveThrowsOnUnexpectedType() |
128 | 118 | { |
129 | 119 | $resolver = new BackedEnumValueResolver(); |
130 | | - $request = self::createRequest(['suit' => ['H', 'S']]); |
| 120 | + $request = self::createRequest(['suit' => false]); |
131 | 121 | $metadata = self::createArgumentMetadata('suit', Suit::class); |
132 | 122 |
|
133 | | - $this->expectException(BadRequestException::class); |
134 | | - $this->expectExceptionMessage('Could not resolve the "suit" controller argument: Symfony\Component\HttpKernel\Tests\Fixtures\Suit::from(): Argument #1 ($value) must be of type string, array given'); |
135 | | - |
136 | | - /** @var \Generator $results */ |
137 | | - $results = $resolver->resolve($request, $metadata); |
138 | | - iterator_to_array($results); |
139 | | - } |
140 | | - |
141 | | - public function testResolveThrowsOnVariadicArgumentWithNonArrayValue() |
142 | | - { |
143 | | - $resolver = new BackedEnumValueResolver(); |
144 | | - $request = self::createRequest(['suits' => 'H']); |
145 | | - $metadata = self::createArgumentMetadata('suits', Suit::class, variadic: true); |
146 | | - |
147 | | - $this->expectException(BadRequestException::class); |
148 | | - $this->expectExceptionMessage('Unexpected value for parameter "suits": expecting "array", got "string".'); |
| 123 | + $this->expectException(\LogicException::class); |
| 124 | + $this->expectExceptionMessage('Could not resolve the "Symfony\Component\HttpKernel\Tests\Fixtures\Suit $suit" controller argument: expecting an int or string, got bool.'); |
149 | 125 |
|
150 | 126 | /** @var \Generator $results */ |
151 | 127 | $results = $resolver->resolve($request, $metadata); |
|
0 commit comments