forked from loafle/openapi-generator-original
[Slim4] Add integer formats support to Data Mocker (#4965)
* [Slim4] Support int32 and int64 data formats * [Slim4] Fix data format key in object mocking * [Slim4] Refresh samples
This commit is contained in:
parent
ffc69699c0
commit
420039c9eb
@ -127,6 +127,22 @@ final class OpenApiDataMocker implements IMocker
|
||||
$exclusiveMinimum = false,
|
||||
$exclusiveMaximum = false
|
||||
) {
|
||||
$dataFormat = is_string($dataFormat) ? strtolower($dataFormat) : $dataFormat;
|
||||
switch ($dataFormat) {
|
||||
case IMocker::DATA_FORMAT_INT32:
|
||||
// -2147483647..2147483647
|
||||
$minimum = is_numeric($minimum) ? max($minimum, -2147483647) : -2147483647;
|
||||
$maximum = is_numeric($maximum) ? min($maximum, 2147483647) : 2147483647;
|
||||
break;
|
||||
case IMocker::DATA_FORMAT_INT64:
|
||||
// -9223372036854775807..9223372036854775807
|
||||
$minimum = is_numeric($minimum) ? max($minimum, -9223372036854775807) : -9223372036854775807;
|
||||
$maximum = is_numeric($maximum) ? min($maximum, 9223372036854775807) : 9223372036854775807;
|
||||
break;
|
||||
default:
|
||||
// do nothing, unsupported format
|
||||
}
|
||||
|
||||
return $this->getRandomNumber($minimum, $maximum, $exclusiveMinimum, $exclusiveMaximum, 0);
|
||||
}
|
||||
|
||||
@ -365,7 +381,7 @@ final class OpenApiDataMocker implements IMocker
|
||||
foreach ($properties as $propName => $propValue) {
|
||||
$options = $this->extractSchemaProperties($propValue);
|
||||
$dataType = $options['type'];
|
||||
$dataFormat = $options['dataFormat'] ?? null;
|
||||
$dataFormat = $options['format'] ?? null;
|
||||
$ref = $options['$ref'] ?? null;
|
||||
$data = $this->mockFromRef($ref);
|
||||
$obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options);
|
||||
@ -525,7 +541,7 @@ final class OpenApiDataMocker implements IMocker
|
||||
if ($maxDecimals > 0) {
|
||||
return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $maxDecimals);
|
||||
}
|
||||
return mt_rand($min, $max);
|
||||
return mt_rand((int) $min, (int) $max);
|
||||
}
|
||||
}
|
||||
{{/apiInfo}}
|
||||
|
@ -198,6 +198,36 @@ class OpenApiDataMockerTest extends TestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::mockInteger
|
||||
* @dataProvider provideMockIntegerFormats
|
||||
*/
|
||||
public function testMockIntegerWithFormats(
|
||||
$dataFormat,
|
||||
$minimum,
|
||||
$maximum,
|
||||
$expectedMin,
|
||||
$expectedMax
|
||||
) {
|
||||
$mocker = new OpenApiDataMocker();
|
||||
$integer = $mocker->mockInteger($dataFormat, $minimum, $maximum);
|
||||
$this->assertGreaterThanOrEqual($expectedMin, $integer);
|
||||
$this->assertLessThanOrEqual($expectedMax, $integer);
|
||||
}
|
||||
|
||||
public function provideMockIntegerFormats()
|
||||
{
|
||||
return [
|
||||
[IMocker::DATA_FORMAT_INT32, -2147483648, 2147483648, -2147483647, 2147483647],
|
||||
[IMocker::DATA_FORMAT_INT64, '-9223372036854775808', '9223372036854775808', -9223372036854775807, 9223372036854775807],
|
||||
[IMocker::DATA_FORMAT_INT32, -10, 10, -10, 10],
|
||||
[IMocker::DATA_FORMAT_INT64, -10, 10, -10, 10],
|
||||
[IMocker::DATA_FORMAT_INT32, -9223372036854775807, 9223372036854775807, -2147483647, 2147483647],
|
||||
[strtoupper(IMocker::DATA_FORMAT_INT32), -2147483648, 2147483648, -2147483647, 2147483647],
|
||||
[strtoupper(IMocker::DATA_FORMAT_INT64), '-9223372036854775808', '9223372036854775808', -9223372036854775807, 9223372036854775807],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideMockNumberCorrectArguments
|
||||
* @covers ::mockNumber
|
||||
|
@ -119,6 +119,22 @@ final class OpenApiDataMocker implements IMocker
|
||||
$exclusiveMinimum = false,
|
||||
$exclusiveMaximum = false
|
||||
) {
|
||||
$dataFormat = is_string($dataFormat) ? strtolower($dataFormat) : $dataFormat;
|
||||
switch ($dataFormat) {
|
||||
case IMocker::DATA_FORMAT_INT32:
|
||||
// -2147483647..2147483647
|
||||
$minimum = is_numeric($minimum) ? max($minimum, -2147483647) : -2147483647;
|
||||
$maximum = is_numeric($maximum) ? min($maximum, 2147483647) : 2147483647;
|
||||
break;
|
||||
case IMocker::DATA_FORMAT_INT64:
|
||||
// -9223372036854775807..9223372036854775807
|
||||
$minimum = is_numeric($minimum) ? max($minimum, -9223372036854775807) : -9223372036854775807;
|
||||
$maximum = is_numeric($maximum) ? min($maximum, 9223372036854775807) : 9223372036854775807;
|
||||
break;
|
||||
default:
|
||||
// do nothing, unsupported format
|
||||
}
|
||||
|
||||
return $this->getRandomNumber($minimum, $maximum, $exclusiveMinimum, $exclusiveMaximum, 0);
|
||||
}
|
||||
|
||||
@ -357,7 +373,7 @@ final class OpenApiDataMocker implements IMocker
|
||||
foreach ($properties as $propName => $propValue) {
|
||||
$options = $this->extractSchemaProperties($propValue);
|
||||
$dataType = $options['type'];
|
||||
$dataFormat = $options['dataFormat'] ?? null;
|
||||
$dataFormat = $options['format'] ?? null;
|
||||
$ref = $options['$ref'] ?? null;
|
||||
$data = $this->mockFromRef($ref);
|
||||
$obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options);
|
||||
@ -517,6 +533,6 @@ final class OpenApiDataMocker implements IMocker
|
||||
if ($maxDecimals > 0) {
|
||||
return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $maxDecimals);
|
||||
}
|
||||
return mt_rand($min, $max);
|
||||
return mt_rand((int) $min, (int) $max);
|
||||
}
|
||||
}
|
||||
|
@ -190,6 +190,36 @@ class OpenApiDataMockerTest extends TestCase
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers ::mockInteger
|
||||
* @dataProvider provideMockIntegerFormats
|
||||
*/
|
||||
public function testMockIntegerWithFormats(
|
||||
$dataFormat,
|
||||
$minimum,
|
||||
$maximum,
|
||||
$expectedMin,
|
||||
$expectedMax
|
||||
) {
|
||||
$mocker = new OpenApiDataMocker();
|
||||
$integer = $mocker->mockInteger($dataFormat, $minimum, $maximum);
|
||||
$this->assertGreaterThanOrEqual($expectedMin, $integer);
|
||||
$this->assertLessThanOrEqual($expectedMax, $integer);
|
||||
}
|
||||
|
||||
public function provideMockIntegerFormats()
|
||||
{
|
||||
return [
|
||||
[IMocker::DATA_FORMAT_INT32, -2147483648, 2147483648, -2147483647, 2147483647],
|
||||
[IMocker::DATA_FORMAT_INT64, '-9223372036854775808', '9223372036854775808', -9223372036854775807, 9223372036854775807],
|
||||
[IMocker::DATA_FORMAT_INT32, -10, 10, -10, 10],
|
||||
[IMocker::DATA_FORMAT_INT64, -10, 10, -10, 10],
|
||||
[IMocker::DATA_FORMAT_INT32, -9223372036854775807, 9223372036854775807, -2147483647, 2147483647],
|
||||
[strtoupper(IMocker::DATA_FORMAT_INT32), -2147483648, 2147483648, -2147483647, 2147483647],
|
||||
[strtoupper(IMocker::DATA_FORMAT_INT64), '-9223372036854775808', '9223372036854775808', -9223372036854775807, 9223372036854775807],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider provideMockNumberCorrectArguments
|
||||
* @covers ::mockNumber
|
||||
|
Loading…
x
Reference in New Issue
Block a user