diff --git a/docs/README.md b/docs/README.md index 903ae34d5f0e9127ebad30af2a6425eb9abd8b5b..65fbb49afb9c4a8d94a947dc3194f8a0e95f55e2 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 7ed7c203a8e232be28f087b4dc7e58c7d2746714..09595cd0bb930a48a80ec60fc37b0b9fb66c3c57 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 f5bc888616543e0f37f03b65ad46f12f2e1a10cf..0f800f061214bb9bc8f38ffe13304524a6261100 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 0000000000000000000000000000000000000000..753d7db988e211ca3c63d06ae575d0f117c29849 --- /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 6973c7e3092fc4d56f9e4ca20664798b3798145b..6f6d5895f4b02bd39fc72ac683d5f8c957a5d64c 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 0dba88bcbdd09cdc319ba4075f4ded1a3dcec854..88840a368334222a0177e00b10ee36900866c96b 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'