Skip to content

Commit

Permalink
fix exclusive limit issue #27 and multipleOf max value enhancement #26
Browse files Browse the repository at this point in the history
  • Loading branch information
subeeshcbabu committed Sep 12, 2016
1 parent f6ba2e3 commit 0770eca
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 9 deletions.
12 changes: 7 additions & 5 deletions lib/generators/index.js
Expand Up @@ -86,17 +86,19 @@ const integerMock = schema => {
}

if (Number.isInteger(schema.minimum)) {
opts.min = (schema.exclusiveMinimum) ? schema.minimum : schema.minimum + 1;
opts.min = (schema.exclusiveMinimum) ? schema.minimum + 1 : schema.minimum;
}
if (Number.isInteger(schema.maximum)) {
opts.max = (schema.exclusiveMaximum) ? schema.maximum : schema.maximum - 1;
opts.max = (schema.exclusiveMaximum) ? schema.maximum - 1 : schema.maximum;
}
//Generate a number that is multiple of schema.multipleOf
if (Number.isInteger(schema.multipleOf) && schema.multipleOf > 0) {
//Use the muplilier as the min number
opts.min = schema.multipleOf;
//Use the min/muplilier as the min number
//Use default min as 1 if min is not properly set.
opts.min = (Number.isInteger(opts.min) && opts.min > 0) ? (Math.ceil(opts.min / schema.multipleOf)) : 1;
//Use the max/muplilier as the new max value
opts.max = (Number.isInteger(opts.max)) ? (Math.floor(opts.max / schema.multipleOf)) : opts.max;
//Use a default - min + 10 - if max value is not properly set.
opts.max = (Number.isInteger(opts.max)) ? (Math.floor(opts.max / schema.multipleOf)) : (opts.min + 10);
intmock = Chance.integer(opts);
intmock = intmock * schema.multipleOf;
} else {
Expand Down
7 changes: 7 additions & 0 deletions tests/fixture/petstore.json
Expand Up @@ -290,6 +290,10 @@
"description": "ID of pet to update",
"required": true,
"type": "integer",
"exclusiveMinimum": true,
"exclusiveMaximum": true,
"minimum": 1000,
"maximum": 1010,
"format": "int64"
}, {
"name": "additionalMetadata",
Expand Down Expand Up @@ -754,6 +758,9 @@
},
"userStatus": {
"type": "integer",
"multipleOf": 100,
"minimum": 1000,
"exclusiveMinimum": true,
"format": "int32",
"description": "User Status"
}
Expand Down
8 changes: 5 additions & 3 deletions tests/param_mockgen.js
Expand Up @@ -19,7 +19,7 @@ describe('Parameter Mock generator', () => {
Assert.ok(params, 'Generated parameters');
Assert.ok(params.path, 'Generated path parameter');
Assert.ok(params.path[0].name === 'orderId', 'generated mock parameter for orderId');
Assert.ok(params.path[0].value > 0 && params.path[0].value < 10, 'OK value for orderId');
Assert.ok(params.path[0].value >= 1 && params.path[0].value <= 10, 'OK value for orderId');
done();
});
});
Expand Down Expand Up @@ -54,7 +54,7 @@ describe('Parameter Mock generator', () => {
Assert.ok(params.path[0].name === 'petId', 'generated mock parameter for petId');
Assert.ok(Number.isInteger(params.path[0].value), 'OK value for petId');
//Test the operation level overrides
Assert.ok(params.path[0].value > 1000 && params.path[0].value < 2000, 'OK value for petId');
Assert.ok(params.path[0].value >= 1000 && params.path[0].value <= 2000, 'OK value for petId');

Assert.ok(params.query, 'Generated query parameter');
Assert.ok(params.query[0].name === 'petName', 'generated mock parameter for petName');
Expand Down Expand Up @@ -92,7 +92,7 @@ describe('Parameter Mock generator', () => {
Assert.ok(params.path, 'Generated path parameter');
Assert.ok(params.path[0].name === 'petId', 'generated mock parameter for petId');
Assert.ok(Number.isInteger(params.path[0].value), 'OK value for petId');

Assert.ok(params.path[0].value > 1000 && params.path[0].value < 1010, 'OK value for petId');
Assert.ok(params.formData, 'Generated formData parameter');
Assert.ok(params.formData[0].name === 'additionalMetadata', 'generated mock parameter for additionalMetadata');
Assert.ok(typeof params.formData[0].value === 'string', 'OK value for additionalMetadata');
Expand Down Expand Up @@ -154,6 +154,8 @@ describe('Parameter Mock generator', () => {
Assert.ok(typeof user === 'object', 'OK value for user parameter');
Assert.ok(Number.isInteger(user.id), 'user.id is integer');
Assert.ok(Number.isInteger(user.userStatus), 'user.userStatus is integer');
Assert.ok(user.userStatus > 1000, 'user.userStatus is greater than 1000');
Assert.ok(user.userStatus % 100 === 0, 'user.userStatus is multipleOf 100');
Assert.ok(typeof user.username === 'string', 'user.username is string');

done();
Expand Down
2 changes: 1 addition & 1 deletion tests/params_mockgen.js
Expand Up @@ -18,7 +18,7 @@ describe('Parameters Mock generator', () => {
Assert.ok(params, 'Generated parameters');
Assert.ok(params.path, 'Generated path parameter');
Assert.ok(params.path[0].name === 'orderId', 'generated mock parameter for orderId');
Assert.ok(params.path[0].value > 0 && params.path[0].value < 10, 'OK value for orderId');
Assert.ok(params.path[0].value >= 1 && params.path[0].value <= 10, 'OK value for orderId');
done();
}).catch(err => {
Assert.ok(!err, 'No error');
Expand Down

0 comments on commit 0770eca

Please sign in to comment.