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,
|
$exclusiveMinimum = false,
|
||||||
$exclusiveMaximum = 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);
|
return $this->getRandomNumber($minimum, $maximum, $exclusiveMinimum, $exclusiveMaximum, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +381,7 @@ final class OpenApiDataMocker implements IMocker
|
|||||||
foreach ($properties as $propName => $propValue) {
|
foreach ($properties as $propName => $propValue) {
|
||||||
$options = $this->extractSchemaProperties($propValue);
|
$options = $this->extractSchemaProperties($propValue);
|
||||||
$dataType = $options['type'];
|
$dataType = $options['type'];
|
||||||
$dataFormat = $options['dataFormat'] ?? null;
|
$dataFormat = $options['format'] ?? null;
|
||||||
$ref = $options['$ref'] ?? null;
|
$ref = $options['$ref'] ?? null;
|
||||||
$data = $this->mockFromRef($ref);
|
$data = $this->mockFromRef($ref);
|
||||||
$obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options);
|
$obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options);
|
||||||
@ -525,7 +541,7 @@ final class OpenApiDataMocker implements IMocker
|
|||||||
if ($maxDecimals > 0) {
|
if ($maxDecimals > 0) {
|
||||||
return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $maxDecimals);
|
return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $maxDecimals);
|
||||||
}
|
}
|
||||||
return mt_rand($min, $max);
|
return mt_rand((int) $min, (int) $max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
{{/apiInfo}}
|
{{/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
|
* @dataProvider provideMockNumberCorrectArguments
|
||||||
* @covers ::mockNumber
|
* @covers ::mockNumber
|
||||||
|
@ -119,6 +119,22 @@ final class OpenApiDataMocker implements IMocker
|
|||||||
$exclusiveMinimum = false,
|
$exclusiveMinimum = false,
|
||||||
$exclusiveMaximum = 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);
|
return $this->getRandomNumber($minimum, $maximum, $exclusiveMinimum, $exclusiveMaximum, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,7 +373,7 @@ final class OpenApiDataMocker implements IMocker
|
|||||||
foreach ($properties as $propName => $propValue) {
|
foreach ($properties as $propName => $propValue) {
|
||||||
$options = $this->extractSchemaProperties($propValue);
|
$options = $this->extractSchemaProperties($propValue);
|
||||||
$dataType = $options['type'];
|
$dataType = $options['type'];
|
||||||
$dataFormat = $options['dataFormat'] ?? null;
|
$dataFormat = $options['format'] ?? null;
|
||||||
$ref = $options['$ref'] ?? null;
|
$ref = $options['$ref'] ?? null;
|
||||||
$data = $this->mockFromRef($ref);
|
$data = $this->mockFromRef($ref);
|
||||||
$obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options);
|
$obj->$propName = ($data) ? $data : $this->mock($dataType, $dataFormat, $options);
|
||||||
@ -517,6 +533,6 @@ final class OpenApiDataMocker implements IMocker
|
|||||||
if ($maxDecimals > 0) {
|
if ($maxDecimals > 0) {
|
||||||
return round($min + mt_rand() / mt_getrandmax() * ($max - $min), $maxDecimals);
|
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
|
* @dataProvider provideMockNumberCorrectArguments
|
||||||
* @covers ::mockNumber
|
* @covers ::mockNumber
|
||||||
|
Loading…
x
Reference in New Issue
Block a user