From 5710c76e54b16057ef04aaec64d3e4ba3435a505 Mon Sep 17 00:00:00 2001 From: Rumiantsev Oleksii Date: Wed, 15 May 2019 17:17:37 +0300 Subject: [PATCH] Add tests for metaschema context support --- .../context/duplicate/context.context | 3 + .../fixtures/context/duplicate/custom.domains | 3 + .../context/duplicate/duplicateDomain.context | 3 + .../context/unresolved/context.context | 3 + .../validation/invalid/context.context | 4 + .../validation/system/context.category | 3 + .../context/validation/system/domain.category | 3 + .../validation/system/domains.category | 3 + .../context/validation/system/field.category | 4 + .../context/validation/system/system.domains | 8 ++ .../context/validation/valid/context.context | 3 + .../context/validation/valid/custom.domains | 3 + test/ms.context.js | 73 +++++++++++++++++++ 13 files changed, 116 insertions(+) create mode 100644 test/fixtures/context/duplicate/context.context create mode 100644 test/fixtures/context/duplicate/custom.domains create mode 100644 test/fixtures/context/duplicate/duplicateDomain.context create mode 100644 test/fixtures/context/unresolved/context.context create mode 100644 test/fixtures/context/validation/invalid/context.context create mode 100644 test/fixtures/context/validation/system/context.category create mode 100644 test/fixtures/context/validation/system/domain.category create mode 100644 test/fixtures/context/validation/system/domains.category create mode 100644 test/fixtures/context/validation/system/field.category create mode 100644 test/fixtures/context/validation/system/system.domains create mode 100644 test/fixtures/context/validation/valid/context.context create mode 100644 test/fixtures/context/validation/valid/custom.domains create mode 100644 test/ms.context.js diff --git a/test/fixtures/context/duplicate/context.context b/test/fixtures/context/duplicate/context.context new file mode 100644 index 00000000..02e94e61 --- /dev/null +++ b/test/fixtures/context/duplicate/context.context @@ -0,0 +1,3 @@ +({ + Nomen: { domain: 'Nomen' }, +}); diff --git a/test/fixtures/context/duplicate/custom.domains b/test/fixtures/context/duplicate/custom.domains new file mode 100644 index 00000000..a16a5cf8 --- /dev/null +++ b/test/fixtures/context/duplicate/custom.domains @@ -0,0 +1,3 @@ +({ + Nomen: { type: 'string' }, +}); diff --git a/test/fixtures/context/duplicate/duplicateDomain.context b/test/fixtures/context/duplicate/duplicateDomain.context new file mode 100644 index 00000000..02e94e61 --- /dev/null +++ b/test/fixtures/context/duplicate/duplicateDomain.context @@ -0,0 +1,3 @@ +({ + Nomen: { domain: 'Nomen' }, +}); diff --git a/test/fixtures/context/unresolved/context.context b/test/fixtures/context/unresolved/context.context new file mode 100644 index 00000000..02e94e61 --- /dev/null +++ b/test/fixtures/context/unresolved/context.context @@ -0,0 +1,3 @@ +({ + Nomen: { domain: 'Nomen' }, +}); diff --git a/test/fixtures/context/validation/invalid/context.context b/test/fixtures/context/validation/invalid/context.context new file mode 100644 index 00000000..cd08b3c9 --- /dev/null +++ b/test/fixtures/context/validation/invalid/context.context @@ -0,0 +1,4 @@ +({ + MissingProp: {}, + UnresolvedProp: { category: '__SOME_CATEGORY__' }, +}); diff --git a/test/fixtures/context/validation/system/context.category b/test/fixtures/context/validation/system/context.category new file mode 100644 index 00000000..ecda8c6e --- /dev/null +++ b/test/fixtures/context/validation/system/context.category @@ -0,0 +1,3 @@ +({ + [Symbol.for('additionallyAllowedProperties')]: ['field'], +}); diff --git a/test/fixtures/context/validation/system/domain.category b/test/fixtures/context/validation/system/domain.category new file mode 100644 index 00000000..f970bf72 --- /dev/null +++ b/test/fixtures/context/validation/system/domain.category @@ -0,0 +1,3 @@ +({ + type: { domain: 'type' }, +}); diff --git a/test/fixtures/context/validation/system/domains.category b/test/fixtures/context/validation/system/domains.category new file mode 100644 index 00000000..9fdc6a36 --- /dev/null +++ b/test/fixtures/context/validation/system/domains.category @@ -0,0 +1,3 @@ +({ + [Symbol.for('additionallyAllowedProperties')]: ['domain'], +}); diff --git a/test/fixtures/context/validation/system/field.category b/test/fixtures/context/validation/system/field.category new file mode 100644 index 00000000..e2435f4d --- /dev/null +++ b/test/fixtures/context/validation/system/field.category @@ -0,0 +1,4 @@ +({ + domain: { domain: 'string', required: true }, + required: { domain: 'boolean' }, +}); diff --git a/test/fixtures/context/validation/system/system.domains b/test/fixtures/context/validation/system/system.domains new file mode 100644 index 00000000..77f6e2bd --- /dev/null +++ b/test/fixtures/context/validation/system/system.domains @@ -0,0 +1,8 @@ +({ + string: { type: 'string' }, + boolean: { type: 'boolean' }, + type: Enum( + 'string', + 'boolean', + ), +}); diff --git a/test/fixtures/context/validation/valid/context.context b/test/fixtures/context/validation/valid/context.context new file mode 100644 index 00000000..46becf21 --- /dev/null +++ b/test/fixtures/context/validation/valid/context.context @@ -0,0 +1,3 @@ +({ + Nomen: { domain: 'Nomen', required: true }, +}); diff --git a/test/fixtures/context/validation/valid/custom.domains b/test/fixtures/context/validation/valid/custom.domains new file mode 100644 index 00000000..a16a5cf8 --- /dev/null +++ b/test/fixtures/context/validation/valid/custom.domains @@ -0,0 +1,3 @@ +({ + Nomen: { type: 'string' }, +}); diff --git a/test/ms.context.js b/test/ms.context.js new file mode 100644 index 00000000..21e2bee2 --- /dev/null +++ b/test/ms.context.js @@ -0,0 +1,73 @@ +'use strict'; + +const metaschema = require('metaschema'); +const metatests = require('metatests'); + +const { default: defaultConfig } = metaschema; +const { options, config } = require('../lib/metaschema-config/config'); + +const { + MetaschemaError, + ValidationError, + SchemaValidationError, +} = metaschema.errors; + +metatests.test('metaschema context error on duplicated domains', async test => { + await test.rejects( + metaschema.fs.load('test/fixtures/context/duplicate', options, config), + new MetaschemaError([ + new SchemaValidationError('duplicate', 'duplicateDomain', { + type: 'domain', + value: 'Nomen', + }), + ]) + ); +}); + +metatests.test('metaschema context error on unresolved domain', async test => { + await test.rejects( + metaschema.fs.load('test/fixtures/context/unresolved', options, config), + new MetaschemaError([ + new SchemaValidationError('unresolved', 'context.Nomen', { + type: 'domain', + value: 'Nomen', + }), + ]) + ); +}); + +metatests.test('metaschema context validation', async test => { + const schemaConfig = await metaschema.fs.applySystemConfig( + 'test/fixtures/context/validation/system', + defaultConfig, + { options, config } + ); + + await test.resolves(async () => { + await metaschema.fs.load( + 'test/fixtures/context/validation/valid', + schemaConfig.options, + schemaConfig.config + ); + }); + + await test.rejects( + metaschema.fs.load( + 'test/fixtures/context/validation/invalid', + schemaConfig.options, + schemaConfig.config + ), + new MetaschemaError([ + new ValidationError('notAllowedAdditionalProp', 'context.MissingProp', { + allowed: ['field'], + }), + new ValidationError( + 'notAllowedAdditionalProp', + 'context.UnresolvedProp', + { + allowed: ['field'], + } + ), + ]) + ); +});