Skip to content

Commit

Permalink
[js] fix boolean in oneOf, add tests (#14380)
Browse files Browse the repository at this point in the history
  • Loading branch information
wing328 authored Jan 6, 2023
1 parent c514dc3 commit b22bf0a
Show file tree
Hide file tree
Showing 24 changed files with 646 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -111,59 +111,67 @@ class {{classname}} {
}
{{/items.isString}}
{{#items.isNumber}}
// validate array of string
// validate array of number
for (const item of instance) {
if (!(typeof instance === 'number' && instance % 1 != 0)) {
throw new Error("Invalid array items. Must be number. Input: " + JSON.stringify(instance));
}
}
{{/items.isNumber}}
{{#items.isBoolean}}
// validate array of boolean
for (const item of instance) {
if (!(typeof instance === 'boolean')) {
throw new Error("Invalid array items. Must be boolean. Input: " + JSON.stringify(instance));
}
}
{{/items.isBoolean}}
{{/isArray}}
{{^isArray}}
{{#isInteger}}
// validate array of integer
// validate integer
if (!(typeof instance === 'number' && instance % 1 === 0)) {
throw new Error("Invalid array items. Must be integer. Input: " + JSON.stringify(instance));
throw new Error("Invalid value. Must be integer. Input: " + JSON.stringify(instance));
}
{{#maximum}}
{{#minimum}}
if (instance > {{maximum}} || instance < {{minimum}}) {
throw new Error("Invalid integer value in an array items. Max.: {{maximum}}. Min.: {{minimum}}. Input: " + JSON.stringify(instance));
throw new Error("Invalid integer value. Max.: {{maximum}}. Min.: {{minimum}}. Input: " + JSON.stringify(instance));
}
{{/minimum}}
{{^minimum}}
if (instance > {{maximum}}) {
throw new Error("Invalid integer value in an array items. Max.: {{maximum}}. Input: " + JSON.stringify(instance));
throw new Error("Invalid integer value. Max.: {{maximum}}. Input: " + JSON.stringify(instance));
}
{{/minimum}}
{{/maximum}}
{{^maximum}}
{{#minimum}}
if (instance < {{minimum}}) {
throw new Error("Invalid integer value in an array items. Min.: {{minimum}}. Input: " + JSON.stringify(instance));
throw new Error("Invalid integer value. Min.: {{minimum}}. Input: " + JSON.stringify(instance));
}
{{/minimum}}
{{/maximum}}
{{/isInteger}}
{{#isString}}
// validate array of string
// validate string
if (!(typeof instance === 'string')) {
throw new Error("Invalid input. Must be string. Input: " + JSON.stringify(instance));
throw new Error("Invalid value. Must be string. Input: " + JSON.stringify(instance));
}
{{#pattern}}
if (!{{{pattern}}}.test(instance)) {
throw new Error("Invalid string value in an array items. Must conform to {{{.}}}. Input: " + JSON.stringify(instance));
throw new Error("Invalid string value. Must conform to {{{.}}}. Input: " + JSON.stringify(instance));
}
{{/pattern}}
{{#minLength}}
{{#maxLength}}
if (instance.length > {{maxLength}} && instance.length < {{minLength}}) {
throw new Error("Invalid string value in an array items. Max. length: {{{maxLength}}}. Min. length: {{{minLength}}}. Input: " + JSON.stringify(instance));
throw new Error("Invalid string value. Max. length: {{{maxLength}}}. Min. length: {{{minLength}}}. Input: " + JSON.stringify(instance));
}
{{/maxLength}}
{{^maxLength}}
if (instance.length < {{minLength}}) {
throw new Error("Invalid string value in an array items. Min. length: {{{minLength}}}. Input: " + instance);
throw new Error("Invalid string value. Min. length: {{{minLength}}}. Input: " + instance);
}
{{/maxLength}}
{{/minLength}}
Expand All @@ -176,11 +184,17 @@ class {{classname}} {
{{/minLength}}
{{/isString}}
{{#isNumber}}
// validate array of string
// validate number
if (!(typeof instance === 'number' && instance % 1 != 0)) {
throw new Error("Invalid array items. Must be number. Input: " + JSON.stringify(instance));
throw new Error("Invalid value. Must be number. Input: " + JSON.stringify(instance));
}
{{/isNumber}}
{{#isBoolean}}
// validate boolean
if (!(typeof instance === 'boolean')) {
throw new Error("Invalid value. Must be boolean. Input: " + JSON.stringify(instance));
}
{{/isBoolean}}
{{/isArray}}
this.actualInstance = instance;
{{/isPrimitiveType}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1977,3 +1977,8 @@ components:
- $ref: '#/components/schemas/RgbColor'
- $ref: '#/components/schemas/RgbaColor'
- $ref: '#/components/schemas/HexColor'
StringOrBoolean:
description: String or boolean
oneOf:
- type: string
- type: boolean
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ docs/ReadOnlyFirst.md
docs/Return.md
docs/SpecialModelName.md
docs/StoreApi.md
docs/StringOrBoolean.md
docs/Tag.md
docs/User.md
docs/UserApi.md
Expand Down Expand Up @@ -123,5 +124,6 @@ src/model/Pig.js
src/model/ReadOnlyFirst.js
src/model/Return.js
src/model/SpecialModelName.js
src/model/StringOrBoolean.js
src/model/Tag.js
src/model/User.js
1 change: 1 addition & 0 deletions samples/client/petstore/javascript-apollo/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ Class | Method | HTTP request | Description
- [OpenApiPetstore.ReadOnlyFirst](docs/ReadOnlyFirst.md)
- [OpenApiPetstore.Return](docs/Return.md)
- [OpenApiPetstore.SpecialModelName](docs/SpecialModelName.md)
- [OpenApiPetstore.StringOrBoolean](docs/StringOrBoolean.md)
- [OpenApiPetstore.Tag](docs/Tag.md)
- [OpenApiPetstore.User](docs/User.md)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# OpenApiPetstore.StringOrBoolean

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------


7 changes: 7 additions & 0 deletions samples/client/petstore/javascript-apollo/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ import Pig from './model/Pig';
import ReadOnlyFirst from './model/ReadOnlyFirst';
import Return from './model/Return';
import SpecialModelName from './model/SpecialModelName';
import StringOrBoolean from './model/StringOrBoolean';
import Tag from './model/Tag';
import User from './model/User';
import AnotherFakeApi from './api/AnotherFakeApi';
Expand Down Expand Up @@ -412,6 +413,12 @@ export {
*/
SpecialModelName,

/**
* The StringOrBoolean model constructor.
* @property {module:model/StringOrBoolean}
*/
StringOrBoolean,

/**
* The Tag model constructor.
* @property {module:model/Tag}
Expand Down
8 changes: 4 additions & 4 deletions samples/client/petstore/javascript-apollo/src/model/Color.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,15 @@ class Color {

// Hex color string, such as #00FF00.
try {
// validate array of string
// validate string
if (!(typeof instance === 'string')) {
throw new Error("Invalid input. Must be string. Input: " + JSON.stringify(instance));
throw new Error("Invalid value. Must be string. Input: " + JSON.stringify(instance));
}
if (!/^#(?:[0-9a-fA-F]{3}){1,2}$/.test(instance)) {
throw new Error("Invalid string value in an array items. Must conform to /^#(?:[0-9a-fA-F]{3}){1,2}$/. Input: " + JSON.stringify(instance));
throw new Error("Invalid string value. Must conform to /^#(?:[0-9a-fA-F]{3}){1,2}$/. Input: " + JSON.stringify(instance));
}
if (instance.length > 7 && instance.length < 7) {
throw new Error("Invalid string value in an array items. Max. length: 7. Min. length: 7. Input: " + JSON.stringify(instance));
throw new Error("Invalid string value. Max. length: 7. Min. length: 7. Input: " + JSON.stringify(instance));
}
this.actualInstance = instance;
match++;
Expand Down
119 changes: 119 additions & 0 deletions samples/client/petstore/javascript-apollo/src/model/StringOrBoolean.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
/**
* OpenAPI Petstore
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
*
* The version of the OpenAPI document: 1.0.0
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*
*/

import ApiClient from '../ApiClient';

/**
* The StringOrBoolean model module.
* @module model/StringOrBoolean
* @version 1.0.0
*/
class StringOrBoolean {
/**
* Constructs a new <code>StringOrBoolean</code>.
* String or boolean
* @alias module:model/StringOrBoolean
* @param {(module:model/Boolean|module:model/String)} instance The actual instance to initialize StringOrBoolean.
*/
constructor(instance = null) {
if (instance === null) {
this.actualInstance = null;
return;
}
var match = 0;
var errorMessages = [];
try {
// validate string
if (!(typeof instance === 'string')) {
throw new Error("Invalid value. Must be string. Input: " + JSON.stringify(instance));
}
this.actualInstance = instance;
match++;
} catch(err) {
// json data failed to deserialize into String
errorMessages.push("Failed to construct String: " + err)
}

try {
// validate boolean
if (!(typeof instance === 'boolean')) {
throw new Error("Invalid value. Must be boolean. Input: " + JSON.stringify(instance));
}
this.actualInstance = instance;
match++;
} catch(err) {
// json data failed to deserialize into Boolean
errorMessages.push("Failed to construct Boolean: " + err)
}

if (match > 1) {
throw new Error("Multiple matches found constructing `StringOrBoolean` with oneOf schemas Boolean, String. Input: " + JSON.stringify(instance));
} else if (match === 0) {
this.actualInstance = null; // clear the actual instance in case there are multiple matches
throw new Error("No match found constructing `StringOrBoolean` with oneOf schemas Boolean, String. Details: " +
errorMessages.join(", "));
} else { // only 1 match
// the input is valid
}
}

/**
* Constructs a <code>StringOrBoolean</code> from a plain JavaScript object, optionally creating a new instance.
* Copies all relevant properties from <code>data</code> to <code>obj</code> if supplied or a new instance if not.
* @param {Object} data The plain JavaScript object bearing properties of interest.
* @param {module:model/StringOrBoolean} obj Optional instance to populate.
* @return {module:model/StringOrBoolean} The populated <code>StringOrBoolean</code> instance.
*/
static constructFromObject(data, obj) {
return new StringOrBoolean(data);
}

/**
* Gets the actual instance, which can be <code>Boolean</code>, <code>String</code>.
* @return {(module:model/Boolean|module:model/String)} The actual instance.
*/
getActualInstance() {
return this.actualInstance;
}

/**
* Sets the actual instance, which can be <code>Boolean</code>, <code>String</code>.
* @param {(module:model/Boolean|module:model/String)} obj The actual instance.
*/
setActualInstance(obj) {
this.actualInstance = StringOrBoolean.constructFromObject(obj).getActualInstance();
}

/**
* Returns the JSON representation of the actual instance.
* @return {string}
*/
toJSON = function(){
return this.getActualInstance();
}

/**
* Create an instance of StringOrBoolean from a JSON string.
* @param {string} json_string JSON string.
* @return {module:model/StringOrBoolean} An instance of StringOrBoolean.
*/
static fromJSON = function(json_string){
return StringOrBoolean.constructFromObject(JSON.parse(json_string));
}
}


StringOrBoolean.OneOf = ["Boolean", "String"];

export default StringOrBoolean;

Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
/**
* OpenAPI Petstore
* This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: \" \\
*
* The version of the OpenAPI document: 1.0.0
*
*
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
* https://openapi-generator.tech
* Do not edit the class manually.
*
*/

(function(root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD.
define(['expect.js', process.cwd()+'/src/index'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS-like environments that support module.exports, like Node.
factory(require('expect.js'), require(process.cwd()+'/src/index'));
} else {
// Browser globals (root is window)
factory(root.expect, root.OpenApiPetstore);
}
}(this, function(expect, OpenApiPetstore) {
'use strict';

var instance;

beforeEach(function() {
instance = new OpenApiPetstore.StringOrBoolean();
});

var getProperty = function(object, getter, property) {
// Use getter method if present; otherwise, get the property directly.
if (typeof object[getter] === 'function')
return object[getter]();
else
return object[property];
}

var setProperty = function(object, setter, property, value) {
// Use setter method if present; otherwise, set the property directly.
if (typeof object[setter] === 'function')
object[setter](value);
else
object[property] = value;
}

describe('StringOrBoolean', function() {
it('should create an instance of StringOrBoolean', function() {
// uncomment below and update the code to test StringOrBoolean
//var instance = new OpenApiPetstore.StringOrBoolean();
//expect(instance).to.be.a(OpenApiPetstore.StringOrBoolean);
});

});

}));
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ docs/ReadOnlyFirst.md
docs/Return.md
docs/SpecialModelName.md
docs/StoreApi.md
docs/StringOrBoolean.md
docs/Tag.md
docs/User.md
docs/UserApi.md
Expand Down Expand Up @@ -123,5 +124,6 @@ src/model/Pig.js
src/model/ReadOnlyFirst.js
src/model/Return.js
src/model/SpecialModelName.js
src/model/StringOrBoolean.js
src/model/Tag.js
src/model/User.js
1 change: 1 addition & 0 deletions samples/client/petstore/javascript-es6/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ Class | Method | HTTP request | Description
- [OpenApiPetstore.ReadOnlyFirst](docs/ReadOnlyFirst.md)
- [OpenApiPetstore.Return](docs/Return.md)
- [OpenApiPetstore.SpecialModelName](docs/SpecialModelName.md)
- [OpenApiPetstore.StringOrBoolean](docs/StringOrBoolean.md)
- [OpenApiPetstore.Tag](docs/Tag.md)
- [OpenApiPetstore.User](docs/User.md)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# OpenApiPetstore.StringOrBoolean

## Properties

Name | Type | Description | Notes
------------ | ------------- | ------------- | -------------


Loading

0 comments on commit b22bf0a

Please sign in to comment.