From a994a498cb730560f957db3d70019ba9e8c8692b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BRAMILLE=20S=C3=A9bastien?= <2752200+oktapodia@users.noreply.github.com> Date: Wed, 11 Sep 2019 14:49:17 +0100 Subject: [PATCH] Replace empty value by random value (#522) * Update doc * Declare option * Permit test to handle multiple requires * Add tests * Add replaceEmptyByRandomValue test option * Handle replaceEmptyByRandomValue option --- docs/README.md | 1 + src/class/OptionRegistry.js | 1 + src/core/traverse.js | 4 +++- .../core/option/replaceEmptyByRandomValue.js | 7 ++++++ tests/schema/core/option/useDefaultValue.json | 24 +++++++++++++++++++ tests/schema/main.spec.js | 6 ++++- 6 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 tests/schema/core/option/replaceEmptyByRandomValue.js diff --git a/docs/README.md b/docs/README.md index 903ae34d..65fbb49a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -123,6 +123,7 @@ jsf.locate('faker'); - `reuseProperties` — If enabled, it will try to generate missing properties from existing ones. Only when `fillProperties` is enabled too (default: `false`) - `fillProperties` — If enabled, it will try to generate missing properties to fulfill the schema definition (default: `true`) - `random` — Setup a custom _randonmess_ generator, useful for getting deterministic results (default: `Math.random`) +- `replaceEmptyByRandomValue` — Remplace default empty value by a random value (default: `false`) ## Building diff --git a/src/class/OptionRegistry.js b/src/class/OptionRegistry.js index 7ed7c203..09595cd0 100644 --- a/src/class/OptionRegistry.js +++ b/src/class/OptionRegistry.js @@ -25,6 +25,7 @@ defaults.maxLength = null; defaults.resolveJsonPath = false; defaults.reuseProperties = false; defaults.fillProperties = true; +defaults.replaceEmptyByRandomValue = false; defaults.random = Math.random; diff --git a/src/core/traverse.js b/src/core/traverse.js index f5bc8886..0f800f06 100644 --- a/src/core/traverse.js +++ b/src/core/traverse.js @@ -25,7 +25,9 @@ function traverse(schema, path, resolve, rootSchema) { } if (optionAPI('useDefaultValue') && 'default' in schema) { - return schema.default; + if (schema.default !== '' || !optionAPI('replaceEmptyByRandomValue')) { + return schema.default; + } } if ('template' in schema) { diff --git a/tests/schema/core/option/replaceEmptyByRandomValue.js b/tests/schema/core/option/replaceEmptyByRandomValue.js new file mode 100644 index 00000000..753d7db9 --- /dev/null +++ b/tests/schema/core/option/replaceEmptyByRandomValue.js @@ -0,0 +1,7 @@ +module.exports = { + register(jsf) { + return jsf.option({ + replaceEmptyByRandomValue: true, + }); + }, +}; diff --git a/tests/schema/core/option/useDefaultValue.json b/tests/schema/core/option/useDefaultValue.json index 6973c7e3..6f6d5895 100644 --- a/tests/schema/core/option/useDefaultValue.json +++ b/tests/schema/core/option/useDefaultValue.json @@ -10,6 +10,30 @@ }, "equal": "Hello", "require": "core/option/useDefaultValue" + }, + { + "description": "should handle useDefaultValue option with an empty default value", + "schema": { + "type": "string", + "default": "" + }, + "equal": "", + "require": "core/option/useDefaultValue" + }, + { + "description": "should handle useDefaultValue & replaceEmptyByRandomValue option", + "schema": { + "test-response": { + "type": "string", + "default": "" + } + }, + "valid": true, + "notEmpty": ["test-response"], + "require": [ + "core/option/useDefaultValue", + "core/option/replaceEmptyByRandomValue" + ] } ] } diff --git a/tests/schema/main.spec.js b/tests/schema/main.spec.js index 0dba88bc..88840a36 100644 --- a/tests/schema/main.spec.js +++ b/tests/schema/main.spec.js @@ -29,7 +29,11 @@ function seed() { }); if (test.require) { - require(`./${test.require}`).register(jsf); + test.require = Array.isArray(test.require) ? test.require : [test.require]; + + test.require.map(toRequire => { + return require(`./${toRequire}`).register(jsf); + }); } const schema = typeof test.schema === 'string' -- GitLab