@fluid-experimental/property-changeset 1.2.7 → 2.0.0-dev.1.3.0.96595
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/changeset.d.ts +39 -45
- package/dist/changeset.d.ts.map +1 -1
- package/dist/changeset.js +42 -51
- package/dist/changeset.js.map +1 -1
- package/dist/changeset_operations/array.d.ts +34 -3
- package/dist/changeset_operations/array.d.ts.map +1 -1
- package/dist/changeset_operations/array.js +97 -94
- package/dist/changeset_operations/array.js.map +1 -1
- package/dist/changeset_operations/indexedCollection.d.ts +13 -15
- package/dist/changeset_operations/indexedCollection.d.ts.map +1 -1
- package/dist/changeset_operations/indexedCollection.js +14 -15
- package/dist/changeset_operations/indexedCollection.js.map +1 -1
- package/dist/helpers/typeidHelper.d.ts +14 -14
- package/dist/helpers/typeidHelper.d.ts.map +1 -1
- package/dist/helpers/typeidHelper.js +24 -34
- package/dist/helpers/typeidHelper.js.map +1 -1
- package/dist/pathHelper.d.ts +5 -5
- package/dist/pathHelper.d.ts.map +1 -1
- package/dist/pathHelper.js +54 -56
- package/dist/pathHelper.js.map +1 -1
- package/dist/templateValidator.d.ts +62 -30
- package/dist/templateValidator.d.ts.map +1 -1
- package/dist/templateValidator.js +128 -94
- package/dist/templateValidator.js.map +1 -1
- package/dist/test/array.spec.js +3 -6
- package/dist/test/array.spec.js.map +1 -1
- package/dist/test/pathHelper.spec.js +2 -4
- package/dist/test/pathHelper.spec.js.map +1 -1
- package/dist/test/reversibleCs.spec.js +2 -4
- package/dist/test/reversibleCs.spec.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/test/validator/templateValidator.spec.js +5 -10
- package/dist/test/validator/templateValidator.spec.js.map +1 -1
- package/dist/utils.d.ts +137 -109
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +167 -174
- package/dist/utils.js.map +1 -1
- package/dist/validationResultBuilder.d.ts +6 -8
- package/dist/validationResultBuilder.d.ts.map +1 -1
- package/dist/validationResultBuilder.js +5 -11
- package/dist/validationResultBuilder.js.map +1 -1
- package/lib/changeset.js +42 -51
- package/lib/changeset.js.map +1 -1
- package/lib/changeset_operations/array.js +97 -94
- package/lib/changeset_operations/array.js.map +1 -1
- package/lib/changeset_operations/indexedCollection.js +14 -15
- package/lib/changeset_operations/indexedCollection.js.map +1 -1
- package/lib/helpers/typeidHelper.js +24 -34
- package/lib/helpers/typeidHelper.js.map +1 -1
- package/lib/pathHelper.js +54 -56
- package/lib/pathHelper.js.map +1 -1
- package/lib/templateValidator.js +128 -94
- package/lib/templateValidator.js.map +1 -1
- package/lib/utils.js +167 -174
- package/lib/utils.js.map +1 -1
- package/lib/validationResultBuilder.js +5 -11
- package/lib/validationResultBuilder.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateValidator.spec.js","sourceRoot":"","sources":["../../../src/test/validator/templateValidator.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* eslint no-unused-expressions: 0 */\n/* eslint-disable no-undef */\n/* eslint-disable max-nested-callbacks */\n/**\n * @fileoverview In this file, we will test template validation.\n */\n\nimport { expect } from \"chai\";\nimport { SchemaValidator } from \"../schemaValidator\";\nimport { TemplateValidator } from \"../../templateValidator\";\n\n(function() {\n let MSG = require('@fluid-experimental/property-common').constants.MSG;\n let semver = require('semver');\n\n const performValidation = function(async, template, templatePrevious, skipSemver, asyncErrorMessage?) {\n let schemaValidator = new SchemaValidator();\n\n if (async) {\n // @ts-ignore\n return schemaValidator.validate(template, templatePrevious, async, skipSemver).catch((error) => {\n expect(error.message).to.have.string(asyncErrorMessage);\n });\n } else {\n return new Promise((resolve) => {\n resolve(schemaValidator.validate(template, templatePrevious, async, skipSemver));\n });\n }\n };\n\n // Performs both synchronous and asynchronous validation\n let validate = function(expectations, template?, templatePrevious?, skipSemver?, asyncErrorMessage?) {\n return performValidation(false, template, templatePrevious, skipSemver)\n .then(expectations)\n .then(performValidation(true, template, templatePrevious, skipSemver, asyncErrorMessage))\n .then(expectations);\n };\n\n describe('Template Validation', function() {\n // --- INPUT ---\n describe('input validation', function() {\n it('fail: empty template', function() {\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.NO_TEMPLATE);\n return result;\n };\n return validate(expectations);\n });\n\n it('fail: template with no typeid', function() {\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MISSING_TYPE_ID);\n return result;\n };\n return validate(expectations, {});\n });\n });\n\n // --- TYPEID ---\n describe('typeid validation', function() {\n it('pass: valid typeid', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n\n return validate(expectations, template);\n });\n\n it('fail: missing semver', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/badMissingSemverInTypeid')));\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string('\\'TeamLeoValidation2:PointID\\' is not valid');\n expect(result.errors[0].dataPath).to.equal('/typeid');\n return result;\n };\n return validate(expectations, template);\n });\n\n it('fail: invalid semver 1', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/badInvalidSemverInTypeid')));\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].dataPath).to.equal('/typeid');\n return result;\n };\n\n return validate(expectations, template);\n });\n\n it('fail: invalid semver 2', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/badInvalidSemverInTypeid')));\n template.typeid = 'TeamLeoValidation2:PointID-1.0.01';\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.INVALID_VERSION_1);\n return result;\n };\n return validate(expectations, template);\n });\n\n it('fail: previous template: invalid semver', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n let badTypeId = 'TeamLeoValidation2:PointID-1.0.0.1';\n templatePrevious.typeid = badTypeId;\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(badTypeId);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(`'${badTypeId}' is not valid`);\n return result;\n };\n return validate(expectations, template, templatePrevious, false, 'Invalid Version: 1.0.0.1');\n });\n });\n\n // --- Template versioning ---\n describe('template versioning', function() {\n it('fail: version regression: 1.0.0 -> 0.9.9', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-0.9.9';\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.VERSION_REGRESSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n describe('same version', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.annotation.description = 'Changed!';\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'id'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('fail: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('fail: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n\n describe('incremented patch level', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: unstable with major content change: 0.0.1 -> 0.0.2', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.typeid = 'TeamLeoValidation2:PointID-0.0.1';\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-0.0.2';\n template.properties[1].typeid = 'TeamLeoValidation2:ColorID-9.0.0';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.annotation.description = 'Changed!';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'Adsk.Core:UI.Border-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'id' (delete, add)\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(2); // 1st for the delete and the 2nd for the add\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:Example-' + semver.inc('1.0.0', 'patch');\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('warn: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('warn: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n\n describe('incremented minor level', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.annotation.description = 'Changed!';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'Adsk.Core:UI.Border-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'id' (delete, add)\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:Example-' + semver.inc('1.0.0', 'minor');\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('warn: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n\n describe('incremented major level', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.annotation.description = 'Changed!';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'Adsk.Core:UI.Border-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'id' (delete, add)\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:Example-' + semver.inc('1.0.0', 'major');\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n });\n\n describe('skip semver validation', function() {\n it('pass: deep equal on scrambled arrays', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n let tmp = template.properties[0].properties[0];\n template.properties[0].properties[0] = template.properties[0].properties[2];\n template.properties[0].properties[2] = tmp;\n tmp = template.properties[1];\n template.properties[1] = template.properties[2];\n template.properties[2] = tmp;\n // Skip semver validation to cause a deep compare\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n\n it('pass: deep equal with version regression', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n\n it('pass: preserves input templates', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n\n let copies = [\n JSON.parse(JSON.stringify(templatePrevious)),\n JSON.parse(JSON.stringify(template)),\n ];\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n expect(templatePrevious).to.deep.equal(copies[0]);\n expect(template).to.deep.equal(copies[1]);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('fail: changed value', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.warnings).to.be.empty;\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n return result;\n };\n\n return validate(expectations, template, templatePrevious, true);\n });\n });\n\n describe('syntax validation', function() {\n it('pass: validate a simple file', function() {\n let template = require('../schemas/goodPointId');\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n return validate(expectations, template, null, true);\n });\n\n it('fail: invalid file', function() {\n let template = require('../schemas/badPrimitiveTypeid');\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.be.greaterThan(0);\n expect(result.unresolvedTypes.length).to.equal(1);\n return result;\n };\n return validate(expectations, template, null, true);\n });\n\n it('should pass a schema with an empty array of properties', function() {\n let EmptyPropertySchema = {\n typeid: 'Test:EmptyPropertySchema-1.0.0',\n properties: [],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n return validate(expectations, EmptyPropertySchema, null);\n });\n });\n\n describe('bugs', function() {\n describe('@bugfix Template validation with multiple inheritance', function() {\n it('pass: deep equal with multiple inheritance', function() {\n let templateString =\n '{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}';\n let templatePrevious = JSON.parse(templateString);\n let template = JSON.parse(templateString);\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n\n it('fail: deep equal with out of order multiple inheritance', function() {\n let template = JSON.parse('{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n '\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}',\n );\n let templatePrevious = JSON.parse('{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n '\"inherits\":[\"NodeProperty\",\"NamedProperty\"]}',\n );\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.greaterThan(0);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n });\n\n describe('@bugfix Local templates with \\'abstract\\' properties fail validation ' +\n 'with remote one.', () => {\n describe('pass: deep equal between no properties and an empty properties array', () => {\n let templateArray = {\n typeid: 'SimpleTest:Shape-1.0.0',\n properties: [],\n };\n let templateAbstract = {\n typeid: 'SimpleTest:Shape-1.0.0',\n };\n\n it('source is abstract and target is an empty properties array', function() {\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n\n return validate(expectations, templateAbstract, templateArray);\n });\n\n it('target is abstract and source is an empty properties array', function() {\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n\n return validate(expectations, templateArray, templateAbstract);\n });\n });\n });\n });\n\n describe('Constants', function() {\n before(function() {\n let schemaValidator = new SchemaValidator();\n\n new TemplateValidator({\n skipSemver: true,\n inheritsFrom: schemaValidator.inheritsFrom as any,\n hasSchema: schemaValidator.hasSchema as any,\n });\n });\n\n let expectationsGenerator = function(msg) {\n return function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.equal(1);\n expect(result.errors[0].message).to.equal(msg);\n\n return result;\n };\n };\n\n it('should pass a valid template', function() {\n let ConstantValid = {\n typeid: 'ConstantTest:ConstantValid-1.0.0',\n constants: [{ id: 'valid', typeid: 'String', value: 'value' }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, ConstantValid, null);\n });\n\n it('should fail if constants array has no elements', function() {\n let ConstantEmptyArray = {\n typeid: 'ConstantTest:ConstantEmptyArray-1.0.0',\n constants: [],\n };\n\n return validate(expectationsGenerator('/constants should NOT have fewer than 1 items'),\n ConstantEmptyArray, null, true);\n });\n\n it('should fail if constant does not have an id', function() {\n let ConstantNoId = {\n typeid: 'ConstantTest:ConstantNoId-1.0.0',\n constants: [{ typeid: 'String', value: 'value' }],\n };\n\n return validate(expectationsGenerator('/constants/0 should have required property \\'id\\''),\n ConstantNoId, null, true);\n });\n\n it('should fail if constant does not have a typeid', function() {\n let ConstantNoTypeid = {\n typeid: 'ConstantTest:ConstantNoTypeid-1.0.0',\n constants: [{ id: 'id', value: 'value' }],\n };\n\n return validate(\n function(result) {\n expect(result.isValid).to.equal(false);\n // console.log(result.errors);\n expect(result.errors.length).to.equal(5);\n expect(result.errors[3].message).to.include(\"should have required property 'inherits'\");\n expect(result.errors[4].message).to.include(\"/constants/0 should have required property 'typeid'\");\n return result;\n },\n ConstantNoTypeid, null, true,\n );\n });\n\n it('should pass if constant does not have a typeid but maybe inherits from elsewhere', function() {\n let ConstantNoTypeid = {\n typeid: 'ConstantTest:ConstantNoTypeid-1.0.0',\n inherits: 'ConstantTest:ConstantParentWithTypeid-1.0.0',\n constants: [{ id: 'id', value: 'value' }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, ConstantNoTypeid, null);\n });\n\n it('should not fail if constant does not have a value or typedValue', function() {\n let ConstantNoValue = {\n typeid: 'ConstantTest:ConstantNoValue-1.0.0',\n constants: [{ id: 'id', typeid: 'String' }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, ConstantNoValue, null, true);\n });\n\n it('should pass if constant map with context key type typeid has typeids as keys', function() {\n let Constant = {\n typeid: 'ConstantTest:Constant-1.0.0',\n constants: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, Constant, null, true);\n });\n\n it('should fail if constant map with context key type that is not a valid value', function() {\n let ConstantNoValue = {\n typeid: 'ConstantTest:ConstantNoValue-1.0.0',\n constants: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'badvalue',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n }],\n };\n\n return validate(\n function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.equal(1);\n expect(result.errors[0].message).to.include('should match one of the following: typeid,string');\n return result;\n },\n ConstantNoValue,\n null,\n true,\n );\n });\n\n it('should fail if constant map with context key type typeid has invalid typeids as keys', function() {\n let ConstantMapWithBadKeys = {\n typeid: 'ConstantTest:ConstantMapWithBadKeys-1.0.0',\n constants: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'NotATypeId': 1, 'AlsoNotATypeId': -1 },\n }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.equal(2);\n expect(result.errors[0].message).to.include(\n MSG.KEY_MUST_BE_TYPEID + 'NotATypeId');\n expect(result.errors[1].message).to.include(\n MSG.KEY_MUST_BE_TYPEID + 'AlsoNotATypeId');\n\n return result;\n };\n\n return validate(expectations, ConstantMapWithBadKeys, null, true);\n });\n\n it('should fail if map with context key type typeid is not constant', function() {\n let ConstantMapWithProperty = {\n typeid: 'ConstantTest:Outerprop-1.0.0',\n properties: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n }],\n };\n\n let expectations = function(result) {\n throw new Error('This should not be called');\n };\n let failExpectations = function(error) {\n expect(error.toString()).to.include(\n 'SV-013: A map with typeids as keys must be constant');\n };\n return performValidation(false, ConstantMapWithProperty, null, true)\n .then(expectations).catch(failExpectations);\n });\n });\n\n describe('Async validation', function() {\n it('can perform context validation asynchronously', function(done) {\n let schemaValidator = new SchemaValidator();\n\n let templateValidator = new TemplateValidator({\n inheritsFromAsync: schemaValidator.inheritsFromAsync as any,\n hasSchemaAsync: schemaValidator.hasSchemaAsync as any,\n });\n\n // Doesn't inherit from 'NamedProperty'. Will cause an error\n let grandParentSchema = {\n 'typeid': 'test:grandparentschema-1.0.0',\n };\n\n let parentSchema = {\n 'typeid': 'test:parentschema-1.0.0',\n 'inherits': ['test:grandparentschema-1.0.0'],\n };\n\n let childSchema = {\n 'typeid': 'test:childchema-1.0.0',\n properties: [{\n id: 'set',\n typeid: 'test:parentschema-1.0.0',\n context: 'set',\n }],\n };\n\n schemaValidator.register(grandParentSchema);\n schemaValidator.register(parentSchema);\n\n templateValidator.validateAsync(childSchema as any).then(\n () => {\n done(new Error('Should not be valid!'));\n },\n (error) => {\n expect(error).to.exist;\n done();\n },\n );\n });\n });\n });\n})();\n"]}
|
|
1
|
+
{"version":3,"file":"templateValidator.spec.js","sourceRoot":"","sources":["../../../src/test/validator/templateValidator.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/* eslint no-unused-expressions: 0 */\n/* eslint-disable no-undef */\n/* eslint-disable max-nested-callbacks */\n/**\n * @fileoverview In this file, we will test template validation.\n */\n\nimport { expect } from \"chai\";\nimport { SchemaValidator } from \"../schemaValidator\";\nimport { TemplateValidator } from \"../../templateValidator\";\n\n(function() {\n let MSG = require('@fluid-experimental/property-common').constants.MSG;\n let semver = require('semver');\n\n const performValidation = function(async, template, templatePrevious, skipSemver, asyncErrorMessage?) {\n let schemaValidator = new SchemaValidator();\n\n return async\n ? schemaValidator.validate(template, templatePrevious, async, skipSemver).catch((error) => {\n expect(error.message).to.have.string(asyncErrorMessage);\n }) : new Promise((resolve) => {\n resolve(schemaValidator.validate(template, templatePrevious, async, skipSemver));\n });\n };\n\n // Performs both synchronous and asynchronous validation\n let validate = function(expectations, template?, templatePrevious?, skipSemver?, asyncErrorMessage?) {\n return performValidation(false, template, templatePrevious, skipSemver)\n .then(expectations)\n .then(performValidation(true, template, templatePrevious, skipSemver, asyncErrorMessage))\n .then(expectations);\n };\n\n describe('Template Validation', function() {\n // --- INPUT ---\n describe('input validation', function() {\n it('fail: empty template', function() {\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.NO_TEMPLATE);\n return result;\n };\n return validate(expectations);\n });\n\n it('fail: template with no typeid', function() {\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MISSING_TYPE_ID);\n return result;\n };\n return validate(expectations, {});\n });\n });\n\n // --- TYPEID ---\n describe('typeid validation', function() {\n it('pass: valid typeid', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n\n return validate(expectations, template);\n });\n\n it('fail: missing semver', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/badMissingSemverInTypeid')));\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string('\\'TeamLeoValidation2:PointID\\' is not valid');\n expect(result.errors[0].dataPath).to.equal('/typeid');\n return result;\n };\n return validate(expectations, template);\n });\n\n it('fail: invalid semver 1', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/badInvalidSemverInTypeid')));\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].dataPath).to.equal('/typeid');\n return result;\n };\n\n return validate(expectations, template);\n });\n\n it('fail: invalid semver 2', function() {\n let template = JSON.parse(JSON.stringify(require('../schemas/badInvalidSemverInTypeid')));\n template.typeid = 'TeamLeoValidation2:PointID-1.0.01';\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(template.typeid);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.INVALID_VERSION_1);\n return result;\n };\n return validate(expectations, template);\n });\n\n it('fail: previous template: invalid semver', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n let badTypeId = 'TeamLeoValidation2:PointID-1.0.0.1';\n templatePrevious.typeid = badTypeId;\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.typeid).to.equal(badTypeId);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(`'${badTypeId}' is not valid`);\n return result;\n };\n return validate(expectations, template, templatePrevious, false, 'Invalid Version: 1.0.0.1');\n });\n });\n\n // --- Template versioning ---\n describe('template versioning', function() {\n it('fail: version regression: 1.0.0 -> 0.9.9', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-0.9.9';\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.VERSION_REGRESSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n describe('same version', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.annotation.description = 'Changed!';\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'id'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"fail: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('fail: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('fail: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_SAME_VERSION_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n\n describe('incremented patch level', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: unstable with major content change: 0.0.1 -> 0.0.2', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.typeid = 'TeamLeoValidation2:PointID-0.0.1';\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-0.0.2';\n template.properties[1].typeid = 'TeamLeoValidation2:ColorID-9.0.0';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.annotation.description = 'Changed!';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'Adsk.Core:UI.Border-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'id' (delete, add)\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(2); // 1st for the delete and the 2nd for the add\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:Example-' + semver.inc('1.0.0', 'patch');\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('warn: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('warn: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'patch');\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n\n describe('incremented minor level', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.annotation.description = 'Changed!';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'Adsk.Core:UI.Border-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'id' (delete, add)\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"warn: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:Example-' + semver.inc('1.0.0', 'minor');\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('warn: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'minor');\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings.length).to.be.at.least(1);\n expect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n\n describe('incremented major level', function() {\n it('pass: same content', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.annotation.description = 'Changed!';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: deleted 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n delete template.annotation;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: added 'annotation'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.annotation = { description: 'Test' };\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'value'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'Adsk.Core:UI.Border-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'id' (delete, add)\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties[0].id = 'xx';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it(\"pass: changed 'inherits'\", function() {\n let templatePrevious = JSON.parse(JSON.stringify(\n require('../schemas/goodReservedTypes'),\n ));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:Example-' + semver.inc('1.0.0', 'major');\n template.inherits = 'Reference<Adsk.Core:Math.Color-1.0.0>';\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: added property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties.push({ 'id': 'newPropId', 'typeid': 'Float32' });\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('pass: deleted property', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n templatePrevious.annotation = { description: 'Test' };\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.typeid = 'TeamLeoValidation2:PointID-' + semver.inc('1.0.0', 'major');\n template.properties[0].properties.pop();\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n });\n });\n\n describe('skip semver validation', function() {\n it('pass: deep equal on scrambled arrays', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n let tmp = template.properties[0].properties[0];\n template.properties[0].properties[0] = template.properties[0].properties[2];\n template.properties[0].properties[2] = tmp;\n tmp = template.properties[1];\n template.properties[1] = template.properties[2];\n template.properties[2] = tmp;\n // Skip semver validation to cause a deep compare\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n\n it('pass: deep equal with version regression', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n\n it('pass: preserves input templates', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodPointId')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n\n let copies = [\n JSON.parse(JSON.stringify(templatePrevious)),\n JSON.parse(JSON.stringify(template)),\n ];\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n expect(templatePrevious).to.deep.equal(copies[0]);\n expect(template).to.deep.equal(copies[1]);\n return result;\n };\n return validate(expectations, template, templatePrevious);\n });\n\n it('fail: changed value', function() {\n let templatePrevious = JSON.parse(JSON.stringify(require('../schemas/goodUIBorder')));\n let template = JSON.parse(JSON.stringify(templatePrevious));\n template.properties[0].properties[0].value = 123456;\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.warnings).to.be.empty;\n expect(result.errors.length).to.be.at.least(1);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n return result;\n };\n\n return validate(expectations, template, templatePrevious, true);\n });\n });\n\n describe('syntax validation', function() {\n it('pass: validate a simple file', function() {\n let template = require('../schemas/goodPointId');\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n return validate(expectations, template, null, true);\n });\n\n it('fail: invalid file', function() {\n let template = require('../schemas/badPrimitiveTypeid');\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.be.greaterThan(0);\n expect(result.unresolvedTypes.length).to.equal(1);\n return result;\n };\n return validate(expectations, template, null, true);\n });\n\n it('should pass a schema with an empty array of properties', function() {\n let EmptyPropertySchema = {\n typeid: 'Test:EmptyPropertySchema-1.0.0',\n properties: [],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n return validate(expectations, EmptyPropertySchema, null);\n });\n });\n\n describe('bugs', function() {\n describe('@bugfix Template validation with multiple inheritance', function() {\n it('pass: deep equal with multiple inheritance', function() {\n let templateString =\n '{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}';\n let templatePrevious = JSON.parse(templateString);\n let template = JSON.parse(templateString);\n\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n\n it('fail: deep equal with out of order multiple inheritance', function() {\n let template = JSON.parse('{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n '\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}',\n );\n let templatePrevious = JSON.parse('{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n '\"inherits\":[\"NodeProperty\",\"NamedProperty\"]}',\n );\n\n let expectations = function(result) {\n expect(result).property('isValid', false);\n expect(result.errors.length).to.be.greaterThan(0);\n expect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n return result;\n };\n return validate(expectations, template, templatePrevious, true);\n });\n });\n\n describe('@bugfix Local templates with \\'abstract\\' properties fail validation ' +\n 'with remote one.', () => {\n describe('pass: deep equal between no properties and an empty properties array', () => {\n let templateArray = {\n typeid: 'SimpleTest:Shape-1.0.0',\n properties: [],\n };\n let templateAbstract = {\n typeid: 'SimpleTest:Shape-1.0.0',\n };\n\n it('source is abstract and target is an empty properties array', function() {\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n\n return validate(expectations, templateAbstract, templateArray);\n });\n\n it('target is abstract and source is an empty properties array', function() {\n let expectations = function(result) {\n expect(result).property('isValid', true);\n expect(result.errors).to.be.empty;\n expect(result.warnings).to.be.empty;\n return result;\n };\n\n return validate(expectations, templateArray, templateAbstract);\n });\n });\n });\n });\n\n describe('Constants', function() {\n before(function() {\n let schemaValidator = new SchemaValidator();\n\n new TemplateValidator({\n skipSemver: true,\n inheritsFrom: schemaValidator.inheritsFrom as any,\n hasSchema: schemaValidator.hasSchema as any,\n });\n });\n\n let expectationsGenerator = function(msg) {\n return function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.equal(1);\n expect(result.errors[0].message).to.equal(msg);\n\n return result;\n };\n };\n\n it('should pass a valid template', function() {\n let ConstantValid = {\n typeid: 'ConstantTest:ConstantValid-1.0.0',\n constants: [{ id: 'valid', typeid: 'String', value: 'value' }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, ConstantValid, null);\n });\n\n it('should fail if constants array has no elements', function() {\n let ConstantEmptyArray = {\n typeid: 'ConstantTest:ConstantEmptyArray-1.0.0',\n constants: [],\n };\n\n return validate(expectationsGenerator('/constants should NOT have fewer than 1 items'),\n ConstantEmptyArray, null, true);\n });\n\n it('should fail if constant does not have an id', function() {\n let ConstantNoId = {\n typeid: 'ConstantTest:ConstantNoId-1.0.0',\n constants: [{ typeid: 'String', value: 'value' }],\n };\n\n return validate(expectationsGenerator('/constants/0 should have required property \\'id\\''),\n ConstantNoId, null, true);\n });\n\n it('should fail if constant does not have a typeid', function() {\n let ConstantNoTypeid = {\n typeid: 'ConstantTest:ConstantNoTypeid-1.0.0',\n constants: [{ id: 'id', value: 'value' }],\n };\n\n return validate(\n function(result) {\n expect(result.isValid).to.equal(false);\n // console.log(result.errors);\n expect(result.errors.length).to.equal(5);\n expect(result.errors[3].message).to.include(\"should have required property 'inherits'\");\n expect(result.errors[4].message).to.include(\"/constants/0 should have required property 'typeid'\");\n return result;\n },\n ConstantNoTypeid, null, true,\n );\n });\n\n it('should pass if constant does not have a typeid but maybe inherits from elsewhere', function() {\n let ConstantNoTypeid = {\n typeid: 'ConstantTest:ConstantNoTypeid-1.0.0',\n inherits: 'ConstantTest:ConstantParentWithTypeid-1.0.0',\n constants: [{ id: 'id', value: 'value' }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, ConstantNoTypeid, null);\n });\n\n it('should not fail if constant does not have a value or typedValue', function() {\n let ConstantNoValue = {\n typeid: 'ConstantTest:ConstantNoValue-1.0.0',\n constants: [{ id: 'id', typeid: 'String' }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, ConstantNoValue, null, true);\n });\n\n it('should pass if constant map with context key type typeid has typeids as keys', function() {\n let Constant = {\n typeid: 'ConstantTest:Constant-1.0.0',\n constants: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(true);\n return result;\n };\n\n return validate(expectations, Constant, null, true);\n });\n\n it('should fail if constant map with context key type that is not a valid value', function() {\n let ConstantNoValue = {\n typeid: 'ConstantTest:ConstantNoValue-1.0.0',\n constants: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'badvalue',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n }],\n };\n\n return validate(\n function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.equal(1);\n expect(result.errors[0].message).to.include('should match one of the following: typeid,string');\n return result;\n },\n ConstantNoValue,\n null,\n true,\n );\n });\n\n it('should fail if constant map with context key type typeid has invalid typeids as keys', function() {\n let ConstantMapWithBadKeys = {\n typeid: 'ConstantTest:ConstantMapWithBadKeys-1.0.0',\n constants: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'NotATypeId': 1, 'AlsoNotATypeId': -1 },\n }],\n };\n\n let expectations = function(result) {\n expect(result.isValid).to.equal(false);\n expect(result.errors.length).to.equal(2);\n expect(result.errors[0].message).to.include(\n MSG.KEY_MUST_BE_TYPEID + 'NotATypeId');\n expect(result.errors[1].message).to.include(\n MSG.KEY_MUST_BE_TYPEID + 'AlsoNotATypeId');\n\n return result;\n };\n\n return validate(expectations, ConstantMapWithBadKeys, null, true);\n });\n\n it('should fail if map with context key type typeid is not constant', function() {\n let ConstantMapWithProperty = {\n typeid: 'ConstantTest:Outerprop-1.0.0',\n properties: [{\n id: 'map',\n typeid: 'Int32',\n context: 'map',\n contextKeyType: 'typeid',\n value: { 'SimpleTest:ConstantTemplate1-1.0.0': 1, 'SimpleTest:ConstantTemplate2-1.0.0': -1 },\n }],\n };\n\n let expectations = function(result) {\n throw new Error('This should not be called');\n };\n let failExpectations = function(error) {\n expect(error.toString()).to.include(\n 'SV-013: A map with typeids as keys must be constant');\n };\n return performValidation(false, ConstantMapWithProperty, null, true)\n .then(expectations).catch(failExpectations);\n });\n });\n\n describe('Async validation', function() {\n it('can perform context validation asynchronously', function(done) {\n let schemaValidator = new SchemaValidator();\n\n let templateValidator = new TemplateValidator({\n inheritsFromAsync: schemaValidator.inheritsFromAsync as any,\n hasSchemaAsync: schemaValidator.hasSchemaAsync as any,\n });\n\n // Doesn't inherit from 'NamedProperty'. Will cause an error\n let grandParentSchema = {\n 'typeid': 'test:grandparentschema-1.0.0',\n };\n\n let parentSchema = {\n 'typeid': 'test:parentschema-1.0.0',\n 'inherits': ['test:grandparentschema-1.0.0'],\n };\n\n let childSchema = {\n 'typeid': 'test:childchema-1.0.0',\n properties: [{\n id: 'set',\n typeid: 'test:parentschema-1.0.0',\n context: 'set',\n }],\n };\n\n schemaValidator.register(grandParentSchema);\n schemaValidator.register(parentSchema);\n\n templateValidator.validateAsync(childSchema as any).then(\n () => {\n done(new Error('Should not be valid!'));\n },\n (error) => {\n expect(error).to.exist;\n done();\n },\n );\n });\n });\n });\n})();\n"]}
|