Skip to content

Commit f93c249

Browse files
tests: test parameters type detection
1 parent f0604a0 commit f93c249

File tree

4 files changed

+64
-8
lines changed

4 files changed

+64
-8
lines changed

src/Metadata/Resource/Factory/ParameterResourceMetadataCollectionFactory.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ private function getDefaultParameters(Operation $operation, string $resourceClas
158158
$parameter = $parameter->withNativeType(Type::string());
159159
} elseif ('boolean' === ($parameter->getSchema()['type'] ?? null)) {
160160
$parameter = $parameter->withNativeType(Type::bool());
161+
} elseif ('integer' === ($parameter->getSchema()['type'] ?? null)) {
162+
$parameter = $parameter->withNativeType(Type::int());
163+
} elseif ('number' === ($parameter->getSchema()['type'] ?? null)) {
164+
$parameter = $parameter->withNativeType(Type::float());
161165
} else {
162166
$parameter = $parameter->withNativeType(Type::union(Type::string(), Type::list(Type::string())));
163167
}

src/Validator/Metadata/Resource/Factory/ParameterValidationResourceMetadataCollectionFactory.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,8 @@ private function addSchemaValidation(Parameter $parameter, ?array $schema = null
189189
$assertions[] = new Unique();
190190
}
191191

192-
if (isset($schema['type']) && 'array' === $schema['type']) {
193-
$assertions[] = new Type(type: 'array');
192+
if (isset($schema['type']) && \in_array($schema['type'], ['array', 'integer', 'number', 'boolean', 'null'], true)) {
193+
$assertions[] = new Type(type: $schema['type']);
194194
}
195195

196196
if (!$assertions) {

tests/Fixtures/TestBundle/ApiResource/WithParameter.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,43 @@
170170
],
171171
provider: [self::class, 'noopProvider']
172172
)]
173+
#[GetCollection(
174+
uriTemplate: 'header_float',
175+
parameters: [
176+
'Bar' => new HeaderParameter(
177+
schema: [
178+
'type' => 'number',
179+
'example' => 42.0,
180+
'minimum' => 1.0,
181+
'maximum' => 100.0,
182+
'multipleOf' => 0.01,
183+
],
184+
),
185+
],
186+
provider: [self::class, 'noopProvider']
187+
)]
188+
#[GetCollection(
189+
uriTemplate: 'header_boolean',
190+
parameters: [
191+
'Lorem' => new HeaderParameter(
192+
schema: [
193+
'type' => 'boolean',
194+
],
195+
),
196+
],
197+
provider: [self::class, 'noopProvider']
198+
)]
199+
#[GetCollection(
200+
uriTemplate: 'query_array',
201+
parameters: [
202+
'Baz' => new QueryParameter(
203+
schema: [
204+
'type' => 'array',
205+
],
206+
),
207+
],
208+
provider: [self::class, 'noopProvider']
209+
)]
173210
#[Get(
174211
uriTemplate: 'with_parameters_iris',
175212
parameters: [

tests/Functional/Parameters/ParameterTest.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,18 +121,33 @@ public function testHeaderParameterRequired(): void
121121
}
122122

123123
#[DataProvider('provideHeaderValues')]
124-
public function testHeaderParameterInteger(string $value, int $expectedStatusCode): void
124+
public function testHeaderParameterInteger(string $url, array $headers, int $expectedStatusCode): void
125125
{
126-
self::createClient()->request('GET', 'header_integer', ['headers' => ['Foo' => $value]]);
126+
self::createClient()->request('GET', 'header_integer', ['headers' => $headers]);
127127
$this->assertResponseStatusCodeSame($expectedStatusCode);
128128
}
129129

130130
public static function provideHeaderValues(): iterable
131131
{
132-
yield 'valid integer' => ['3', 200];
133-
yield 'too high' => ['6', 422];
134-
yield 'too low' => ['0', 422];
135-
yield 'invalid integer' => ['string', 422];
132+
// header_integer
133+
yield 'valid integer header_integer' => ['header_integer', ['Foo' => '3'], 200];
134+
yield 'too high header_integer' => ['header_integer', ['Foo' => '6'], 422];
135+
yield 'too low header_integer' => ['header_integer', ['Foo' => '0'], 422];
136+
yield 'invalid integer header_integer' => ['header_integer', ['Foo' => 'string'], 422];
137+
138+
// header_float
139+
yield 'valid float header_float' => ['header_float', ['Bar' => '3.5'], 200];
140+
yield 'valid integer header_float' => ['header_float', ['Bar' => '3'], 200];
141+
yield 'too high header_float' => ['header_float', ['Bar' => '600'], 422];
142+
yield 'too low header_float' => ['header_float', ['Bar' => '0'], 422];
143+
yield 'invalid number header_float' => ['header_float', ['Bar' => 'string'], 422];
144+
145+
// header_boolean
146+
yield 'valid boolean false header_boolean' => ['header_boolean', ['Lorem' => 'false'], 200];
147+
yield 'valid boolean true header_boolean' => ['header_boolean', ['Lorem' => 'false'], 200];
148+
yield 'valid boolean 0 header_boolean' => ['header_boolean', ['Lorem' => '0'], 200];
149+
yield 'valid boolean 1 header_boolean' => ['header_boolean', ['Lorem' => '1'], 200];
150+
yield 'invalid boolean header_boolean' => ['header_boolean', ['Lorem' => 'string'], 422];
136151
}
137152

138153
#[DataProvider('provideCountryValues')]

0 commit comments

Comments
 (0)