Skip to content

Commit 309a175

Browse files
committed
update minimum/exclusiveMinimum and maximum/exclusiveMaximum
1 parent 165e39f commit 309a175

2 files changed

Lines changed: 78 additions & 10 deletions

File tree

src/JsonSchemaCodeGenerator.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -425,20 +425,24 @@ private function applyNumericConstraints(string $code, array $schema, bool $isIn
425425
{
426426
if (isset($schema['minimum']) && (\is_int($schema['minimum']) || \is_float($schema['minimum']))) {
427427
$val = $isInt ? (int) $schema['minimum'] : (float) $schema['minimum'];
428-
$code .= '->minimum('.$this->exportValue($val).')';
429-
}
430-
431-
if (isset($schema['maximum']) && (\is_int($schema['maximum']) || \is_float($schema['maximum']))) {
432-
$val = $isInt ? (int) $schema['maximum'] : (float) $schema['maximum'];
433-
$code .= '->maximum('.$this->exportValue($val).')';
434-
}
435-
436-
if (isset($schema['exclusiveMinimum']) && (\is_int($schema['exclusiveMinimum']) || \is_float($schema['exclusiveMinimum']))) {
428+
if (isset($schema['exclusiveMinimum']) && true === $schema['exclusiveMinimum']) {
429+
$code .= '->exclusiveMinimum('.$this->exportValue($val).')';
430+
} else {
431+
$code .= '->minimum('.$this->exportValue($val).')';
432+
}
433+
} elseif (isset($schema['exclusiveMinimum']) && (\is_int($schema['exclusiveMinimum']) || \is_float($schema['exclusiveMinimum']))) {
437434
$val = $isInt ? (int) $schema['exclusiveMinimum'] : (float) $schema['exclusiveMinimum'];
438435
$code .= '->exclusiveMinimum('.$this->exportValue($val).')';
439436
}
440437

441-
if (isset($schema['exclusiveMaximum']) && (\is_int($schema['exclusiveMaximum']) || \is_float($schema['exclusiveMaximum']))) {
438+
if (isset($schema['maximum']) && (\is_int($schema['maximum']) || \is_float($schema['maximum']))) {
439+
$val = $isInt ? (int) $schema['maximum'] : (float) $schema['maximum'];
440+
if (isset($schema['exclusiveMaximum']) && true === $schema['exclusiveMaximum']) {
441+
$code .= '->exclusiveMaximum('.$this->exportValue($val).')';
442+
} else {
443+
$code .= '->maximum('.$this->exportValue($val).')';
444+
}
445+
} elseif (isset($schema['exclusiveMaximum']) && (\is_int($schema['exclusiveMaximum']) || \is_float($schema['exclusiveMaximum']))) {
442446
$val = $isInt ? (int) $schema['exclusiveMaximum'] : (float) $schema['exclusiveMaximum'];
443447
$code .= '->exclusiveMaximum('.$this->exportValue($val).')';
444448
}

tests/Unit/JsonSchemaCodeGeneratorTest.php

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,38 @@ public function testIntegerWithAllConstraints(): void
170170
self::assertSame('$p->int()->minimum(1)->maximum(99)', $code);
171171
}
172172

173+
public function testIntegerWithMinimumAndExclusiveMinimumTrue(): void
174+
{
175+
$generator = new JsonSchemaCodeGenerator();
176+
$code = $generator->generate(['type' => 'integer', 'minimum' => 0, 'exclusiveMinimum' => true]);
177+
178+
self::assertSame('$p->int()->exclusiveMinimum(0)', $code);
179+
}
180+
181+
public function testIntegerWithMinimumAndExclusiveMinimumFalse(): void
182+
{
183+
$generator = new JsonSchemaCodeGenerator();
184+
$code = $generator->generate(['type' => 'integer', 'minimum' => 0, 'exclusiveMinimum' => false]);
185+
186+
self::assertSame('$p->int()->minimum(0)', $code);
187+
}
188+
189+
public function testIntegerWithMaximumAndExclusiveMaximumTrue(): void
190+
{
191+
$generator = new JsonSchemaCodeGenerator();
192+
$code = $generator->generate(['type' => 'integer', 'maximum' => 100, 'exclusiveMaximum' => true]);
193+
194+
self::assertSame('$p->int()->exclusiveMaximum(100)', $code);
195+
}
196+
197+
public function testIntegerWithMaximumAndExclusiveMaximumFalse(): void
198+
{
199+
$generator = new JsonSchemaCodeGenerator();
200+
$code = $generator->generate(['type' => 'integer', 'maximum' => 100, 'exclusiveMaximum' => false]);
201+
202+
self::assertSame('$p->int()->maximum(100)', $code);
203+
}
204+
173205
public function testNumber(): void
174206
{
175207
$generator = new JsonSchemaCodeGenerator();
@@ -210,6 +242,38 @@ public function testNumberWithExclusiveMaximum(): void
210242
self::assertSame('$p->float()->exclusiveMaximum(100.0)', $code);
211243
}
212244

245+
public function testNumberWithMinimumAndExclusiveMinimumTrue(): void
246+
{
247+
$generator = new JsonSchemaCodeGenerator();
248+
$code = $generator->generate(['type' => 'number', 'minimum' => 0.5, 'exclusiveMinimum' => true]);
249+
250+
self::assertSame('$p->float()->exclusiveMinimum(0.5)', $code);
251+
}
252+
253+
public function testNumberWithMinimumAndExclusiveMinimumFalse(): void
254+
{
255+
$generator = new JsonSchemaCodeGenerator();
256+
$code = $generator->generate(['type' => 'number', 'minimum' => 0.5, 'exclusiveMinimum' => false]);
257+
258+
self::assertSame('$p->float()->minimum(0.5)', $code);
259+
}
260+
261+
public function testNumberWithMaximumAndExclusiveMaximumTrue(): void
262+
{
263+
$generator = new JsonSchemaCodeGenerator();
264+
$code = $generator->generate(['type' => 'number', 'maximum' => 99.9, 'exclusiveMaximum' => true]);
265+
266+
self::assertSame('$p->float()->exclusiveMaximum(99.9)', $code);
267+
}
268+
269+
public function testNumberWithMaximumAndExclusiveMaximumFalse(): void
270+
{
271+
$generator = new JsonSchemaCodeGenerator();
272+
$code = $generator->generate(['type' => 'number', 'maximum' => 99.9, 'exclusiveMaximum' => false]);
273+
274+
self::assertSame('$p->float()->maximum(99.9)', $code);
275+
}
276+
213277
public function testBoolean(): void
214278
{
215279
$generator = new JsonSchemaCodeGenerator();

0 commit comments

Comments
 (0)