diff --git a/test/definitions/3.0.0/security/index.js b/test/definitions/3.0.0/security/index.js index a36f93a8..c5a30c51 100644 --- a/test/definitions/3.0.0/security/index.js +++ b/test/definitions/3.0.0/security/index.js @@ -4,4 +4,5 @@ describe('Security Schemes', () => { require('./gssapi/gssapi.js'); require('./openIdconnect/openIdconnect.js'); require('./plain/plain.js'); + require('./scramSha256/scramSha256.js'); }); diff --git a/test/definitions/3.0.0/security/scramSha256/empty.json b/test/definitions/3.0.0/security/scramSha256/empty.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/test/definitions/3.0.0/security/scramSha256/empty.json @@ -0,0 +1 @@ +{} diff --git a/test/definitions/3.0.0/security/scramSha256/extended.json b/test/definitions/3.0.0/security/scramSha256/extended.json new file mode 100644 index 00000000..a2a64539 --- /dev/null +++ b/test/definitions/3.0.0/security/scramSha256/extended.json @@ -0,0 +1,9 @@ +{ + "type": "scramSha256", + "description": "scramSha256", + "x-number": 0, + "x-string": "", + "x-object": { + "property": {} + } +} diff --git a/test/definitions/3.0.0/security/scramSha256/only required properties.json b/test/definitions/3.0.0/security/scramSha256/only required properties.json new file mode 100644 index 00000000..3b7f6567 --- /dev/null +++ b/test/definitions/3.0.0/security/scramSha256/only required properties.json @@ -0,0 +1,3 @@ +{ + "type": "scramSha256" +} diff --git a/test/definitions/3.0.0/security/scramSha256/scramSha256.js b/test/definitions/3.0.0/security/scramSha256/scramSha256.js new file mode 100644 index 00000000..6a90a37e --- /dev/null +++ b/test/definitions/3.0.0/security/scramSha256/scramSha256.js @@ -0,0 +1,64 @@ +const Ajv = require('ajv'); +const assert = require('assert'); +const addFormats = require('ajv-formats'); +const fs = require('fs'); + +const ajv = new Ajv({ + jsonPointers: true, + allErrors: true, + schemaId: '$id', + logger: false, + validateFormats: true, + strict: false, +}); +addFormats(ajv); + +const jsonSchema = require('../../../../../definitions/3.0.0/SaslScramSecurityScheme.json'); +const validator = ajv + .addMetaSchema(require('../../../../../definitions/3.0.0/schema.json')) + .addSchema(require('../../../../../definitions/3.0.0/specificationExtension.json')) + .compile(jsonSchema); + +describe('SCRAM-SHA-256', () => { + it('empty', () => { + const model = JSON.parse(fs.readFileSync(`${__dirname}/empty.json`, 'utf-8')); + const validationResult = validator(model); + + assert(validationResult === false, 'SCRAM-SHA-256 with empty body is not valid'); + assert(validator.errors[0].message === 'must have required property \'type\''); + assert(validator.errors.length === 1); + }); + + it('without required properties', () => { + const model = JSON.parse(fs.readFileSync(`${__dirname}/without required properties.json`, 'utf-8')); + const validationResult = validator(model); + + assert(validationResult === false, 'SCRAM-SHA-256 without required properties is not valid'); + assert(validator.errors[0].message === 'must have required property \'type\''); + assert(validator.errors.length === 1); + }); + + it('only required properties', () => { + const model = JSON.parse(fs.readFileSync(`${__dirname}/only required properties.json`, 'utf-8')); + const validationResult = validator(model); + + assert(validationResult === true, 'SCRAM-SHA-256 is valid with only required properties'); + }); + + it('extended', () => { + const model = JSON.parse(fs.readFileSync(`${__dirname}/extended.json`, 'utf-8')); + const validationResult = validator(model); + + assert(validationResult === true, 'SCRAM-SHA-256 can be extended'); + }); + + it('wrongly extended', () => { + const model = JSON.parse(fs.readFileSync(`${__dirname}/wrongly extended.json`, 'utf-8')); + const validationResult = validator(model); + + assert(validationResult === false, 'SCRAM-SHA-256 is not valid when was wrongly extended'); + assert(validator.errors[0].message === 'must NOT have additional properties'); + assert(validator.errors[0].params.additionalProperty === 'ext-number'); + assert(validator.errors.length === 1); + }); +}); diff --git a/test/definitions/3.0.0/security/scramSha256/without required properties.json b/test/definitions/3.0.0/security/scramSha256/without required properties.json new file mode 100644 index 00000000..1d128c52 --- /dev/null +++ b/test/definitions/3.0.0/security/scramSha256/without required properties.json @@ -0,0 +1,3 @@ +{ + "description": "scramSha256" +} diff --git a/test/definitions/3.0.0/security/scramSha256/wrongly extended.json b/test/definitions/3.0.0/security/scramSha256/wrongly extended.json new file mode 100644 index 00000000..f44423d1 --- /dev/null +++ b/test/definitions/3.0.0/security/scramSha256/wrongly extended.json @@ -0,0 +1,10 @@ +{ + "type": "scramSha256", + "description": "scramSha256", + "x-number": 0, + "x-string": "", + "x-object": { + "property": {} + }, + "ext-number": 1 +}