mirror of
https://codeberg.org/keyoxide/doipjs.git
synced 2024-12-22 22:49:28 -07:00
Update tests
This commit is contained in:
parent
5f5f663e4b
commit
841b90d580
6 changed files with 138 additions and 181 deletions
94
test/claimDefinitions.js
Normal file
94
test/claimDefinitions.js
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
Copyright 2021 Yarmo Mackenbach
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
const chai = require('chai')
|
||||||
|
const expect = chai.expect
|
||||||
|
const chaiMatchPattern = require('chai-match-pattern')
|
||||||
|
chai.use(chaiMatchPattern)
|
||||||
|
chai.use(require('chai-as-promised'))
|
||||||
|
|
||||||
|
const _ = chaiMatchPattern.getLodashModule()
|
||||||
|
const doipjs = require('../src')
|
||||||
|
|
||||||
|
const pattern = {
|
||||||
|
serviceprovider: {
|
||||||
|
type: _.isString,
|
||||||
|
name: _.isString,
|
||||||
|
},
|
||||||
|
match: {
|
||||||
|
regularExpression: _.isRegExp,
|
||||||
|
isAmbiguous: _.isBoolean,
|
||||||
|
},
|
||||||
|
profile: {
|
||||||
|
display: _.isString,
|
||||||
|
uri: _.isString,
|
||||||
|
qr: (x) => {
|
||||||
|
return _.isString(x) || _.isNull(x)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
proof: {
|
||||||
|
uri: (x) => {
|
||||||
|
return _.isString(x) || _.isNull(x)
|
||||||
|
},
|
||||||
|
request: {
|
||||||
|
fetcher: _.isString,
|
||||||
|
access: _.isInteger,
|
||||||
|
format: _.isString,
|
||||||
|
data: _.isObject,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
claim: {
|
||||||
|
format: _.isInteger,
|
||||||
|
relation: _.isInteger,
|
||||||
|
path: _.isArray,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
doipjs.claimDefinitions.list.forEach((claimDefName, i) => {
|
||||||
|
const claimDef = doipjs.claimDefinitions.data[claimDefName]
|
||||||
|
|
||||||
|
describe(`claimDefinitions.${claimDefName}`, () => {
|
||||||
|
it('should be an object', () => {
|
||||||
|
expect(claimDef).to.be.a('object')
|
||||||
|
})
|
||||||
|
it('should have a RegExp instance named "reURI"', () => {
|
||||||
|
expect(claimDef.reURI).to.be.instanceof(RegExp)
|
||||||
|
})
|
||||||
|
it('should have a function named "processURI" (1 argument)', () => {
|
||||||
|
expect(claimDef.processURI).to.be.a('function')
|
||||||
|
expect(claimDef.processURI).to.have.length(1)
|
||||||
|
})
|
||||||
|
it('should have an array named "tests"', () => {
|
||||||
|
expect(claimDef.tests).to.be.instanceof(Array)
|
||||||
|
})
|
||||||
|
|
||||||
|
claimDef.tests.forEach((test, j) => {
|
||||||
|
if (test.shouldMatch) {
|
||||||
|
it(`should match "${test.uri}"`, () => {
|
||||||
|
expect(claimDef.reURI.test(test.uri)).to.be.true
|
||||||
|
})
|
||||||
|
it(`should return a valid object for "${test.uri}"`, async () => {
|
||||||
|
const obj = claimDef.processURI(claimDef.tests[0].uri)
|
||||||
|
expect(obj).to.be.a('object')
|
||||||
|
expect(obj).to.matchPattern(pattern)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
it(`should not match "${test.uri}"`, () => {
|
||||||
|
expect(claimDef.reURI.test(test.uri)).to.be.false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
|
@ -1,86 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2021 Yarmo Mackenbach
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
const chai = require('chai')
|
|
||||||
const expect = chai.expect
|
|
||||||
const chaiMatchPattern = require('chai-match-pattern')
|
|
||||||
chai.use(chaiMatchPattern)
|
|
||||||
chai.use(require('chai-as-promised'))
|
|
||||||
|
|
||||||
const _ = chaiMatchPattern.getLodashModule()
|
|
||||||
const doipjs = require('../src')
|
|
||||||
|
|
||||||
const pattern = {
|
|
||||||
serviceprovider: {
|
|
||||||
type: _.isString,
|
|
||||||
name: _.isString,
|
|
||||||
},
|
|
||||||
profile: {
|
|
||||||
display: _.isString,
|
|
||||||
uri: _.isString,
|
|
||||||
qr: (x) => {
|
|
||||||
return _.isString(x) || _.isNull(x)
|
|
||||||
},
|
|
||||||
},
|
|
||||||
proof: {
|
|
||||||
uri: (x) => {
|
|
||||||
return _.isString(x) || _.isNull(x)
|
|
||||||
},
|
|
||||||
request: {
|
|
||||||
fetcher: _.isString,
|
|
||||||
access: _.isInteger,
|
|
||||||
format: _.isInteger,
|
|
||||||
data: _.isObject,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
claim: {
|
|
||||||
fingerprint: (x) => {
|
|
||||||
return _.isString(x) || _.isNull(x)
|
|
||||||
},
|
|
||||||
format: _.isInteger,
|
|
||||||
relation: _.isInteger,
|
|
||||||
path: _.isArray,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('claims.verify', () => {
|
|
||||||
it('should be a function (3 arguments)', () => {
|
|
||||||
expect(doipjs.claims.verify).to.be.a('function')
|
|
||||||
expect(doipjs.claims.verify).to.have.length(3)
|
|
||||||
})
|
|
||||||
it('should return undefined for non-valid URIs', () => {
|
|
||||||
return expect(doipjs.claims.verify('noURI')).to.eventually.be.rejectedWith(
|
|
||||||
undefined
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
doipjs.serviceproviders.list.forEach((spName, i) => {
|
|
||||||
const sp = doipjs.serviceproviders.data[spName]
|
|
||||||
|
|
||||||
if (sp.tests.length == 0) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
it(`should return a valid object for the "${spName}" service provider`, async () => {
|
|
||||||
const matches = await doipjs.claims.verify(sp.tests[0].uri, null, {
|
|
||||||
returnMatchesOnly: true,
|
|
||||||
})
|
|
||||||
expect(matches).to.be.a('array')
|
|
||||||
expect(matches).to.be.length.above(0)
|
|
||||||
expect(matches[0].serviceprovider.name).to.be.equal(spName)
|
|
||||||
expect(matches[0]).to.matchPattern(pattern)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
|
@ -117,32 +117,11 @@ describe('keys.process', () => {
|
||||||
it('should return an object with specific keys', async () => {
|
it('should return an object with specific keys', async () => {
|
||||||
const pubKey = await doipjs.keys.fetch.plaintext(pubKeyPlaintext)
|
const pubKey = await doipjs.keys.fetch.plaintext(pubKeyPlaintext)
|
||||||
const obj = await doipjs.keys.process(pubKey)
|
const obj = await doipjs.keys.process(pubKey)
|
||||||
expect(obj).to.have.keys(['users', 'fingerprint', 'primaryUserIndex'])
|
expect(obj).to.have.keys([
|
||||||
})
|
'users',
|
||||||
})
|
'fingerprint',
|
||||||
|
'primaryUserIndex',
|
||||||
describe('keys.getFingerprint', () => {
|
'key',
|
||||||
it('should be a function (1 argument)', () => {
|
])
|
||||||
expect(doipjs.keys.getFingerprint).to.be.a('function')
|
|
||||||
expect(doipjs.keys.getFingerprint).to.have.length(1)
|
|
||||||
})
|
|
||||||
it('should return a string', async () => {
|
|
||||||
const pubKey = await doipjs.keys.fetch.plaintext(pubKeyPlaintext)
|
|
||||||
const fp = await doipjs.keys.getFingerprint(pubKey)
|
|
||||||
expect(fp).to.be.equal(pubKeyFingerprint)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('keys.getUserData', () => {
|
|
||||||
it('should be a function (1 argument)', () => {
|
|
||||||
expect(doipjs.keys.getUserData).to.be.a('function')
|
|
||||||
expect(doipjs.keys.getUserData).to.have.length(1)
|
|
||||||
})
|
|
||||||
it('should return an array of userData objects', async () => {
|
|
||||||
const pubKey = await doipjs.keys.fetch.plaintext(pubKeyPlaintext)
|
|
||||||
const userData = await doipjs.keys.getUserData(pubKey)
|
|
||||||
expect(userData).to.be.lengthOf(1)
|
|
||||||
expect(userData[0].userData.email).to.be.equal(pubKeyEmail)
|
|
||||||
expect(userData[0].notations[0]).to.be.equal('dns:doip.rocks')
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2021 Yarmo Mackenbach
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
const chai = require('chai')
|
|
||||||
const expect = chai.expect
|
|
||||||
|
|
||||||
const doipjs = require('../src')
|
|
||||||
|
|
||||||
doipjs.serviceproviders.list.forEach((sp, i) => {
|
|
||||||
describe(`serviceproviders.${sp}`, () => {
|
|
||||||
it('should be an object', () => {
|
|
||||||
expect(doipjs.serviceproviders.data[sp]).to.be.a('object')
|
|
||||||
})
|
|
||||||
it('should have a RegExp instance named "reURI"', () => {
|
|
||||||
expect(doipjs.serviceproviders.data[sp].reURI).to.be.instanceof(RegExp)
|
|
||||||
})
|
|
||||||
it('should have a function named "processURI" (2 arguments)', () => {
|
|
||||||
expect(doipjs.serviceproviders.data[sp].processURI).to.be.a('function')
|
|
||||||
expect(doipjs.serviceproviders.data[sp].processURI).to.have.length(2)
|
|
||||||
})
|
|
||||||
it('should have an array named "tests"', () => {
|
|
||||||
expect(doipjs.serviceproviders.data[sp].tests).to.be.instanceof(Array)
|
|
||||||
})
|
|
||||||
|
|
||||||
doipjs.serviceproviders.data[sp].tests.forEach((test, j) => {
|
|
||||||
if (test.shouldMatch) {
|
|
||||||
it(`should match "${test.uri}"`, () => {
|
|
||||||
expect(doipjs.serviceproviders.data[sp].reURI.test(test.uri)).to.be
|
|
||||||
.true
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
it(`should not match "${test.uri}"`, () => {
|
|
||||||
expect(doipjs.serviceproviders.data[sp].reURI.test(test.uri)).to.be
|
|
||||||
.false
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
|
@ -41,18 +41,16 @@ cXbjvHSGniZ7M3S9S8knAfIquPvTp7+L7wWgSSB5VObPp1r+96n87hyFZUp7PCvl
|
||||||
=ADl+
|
=ADl+
|
||||||
-----END PGP SIGNATURE-----`
|
-----END PGP SIGNATURE-----`
|
||||||
|
|
||||||
describe('signatures.verify', () => {
|
describe('signatures.process', () => {
|
||||||
it('should be a function (2 arguments)', () => {
|
it('should be a function (2 arguments)', () => {
|
||||||
expect(doipjs.signatures.verify).to.be.a('function')
|
expect(doipjs.signatures.process).to.be.a('function')
|
||||||
expect(doipjs.signatures.verify).to.have.length(2)
|
expect(doipjs.signatures.process).to.have.length(1)
|
||||||
})
|
})
|
||||||
it('should verify the demonstration signature', async () => {
|
it('should verify the demonstration signature', async () => {
|
||||||
const verification = await doipjs.signatures.verify(sigProfile)
|
const verification = await doipjs.signatures.process(sigProfile)
|
||||||
expect(verification.errors).to.be.length(0)
|
expect(verification.fingerprint).to.be.equal(
|
||||||
expect(verification.publicKey.fingerprint).to.be.equal(
|
|
||||||
'3637202523e7c1309ab79e99ef2dc5827b445f4b'
|
'3637202523e7c1309ab79e99ef2dc5827b445f4b'
|
||||||
)
|
)
|
||||||
expect(verification.claims).to.be.length(1)
|
expect(verification.users[0].claims).to.be.length(1)
|
||||||
expect(verification.claims[0].isVerified).to.be.true
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -24,18 +24,41 @@ describe('utils.generateClaim', () => {
|
||||||
expect(doipjs.utils.generateClaim).to.have.length(2)
|
expect(doipjs.utils.generateClaim).to.have.length(2)
|
||||||
})
|
})
|
||||||
it('should generate a correct "uri" claim', () => {
|
it('should generate a correct "uri" claim', () => {
|
||||||
expect(doipjs.utils.generateClaim('123456789', 'uri')).to.equal(
|
expect(
|
||||||
'openpgp4fpr:123456789'
|
doipjs.utils.generateClaim('123456789', doipjs.enums.ClaimFormat.URI)
|
||||||
)
|
).to.equal('openpgp4fpr:123456789')
|
||||||
})
|
})
|
||||||
it('should generate a correct "message" claim', () => {
|
it('should generate a correct "message" claim', () => {
|
||||||
expect(doipjs.utils.generateClaim('123456789', 'message')).to.equal(
|
expect(
|
||||||
'[Verifying my OpenPGP key: openpgp4fpr:123456789]'
|
doipjs.utils.generateClaim('123456789', doipjs.enums.ClaimFormat.MESSAGE)
|
||||||
)
|
).to.equal('[Verifying my OpenPGP key: openpgp4fpr:123456789]')
|
||||||
})
|
})
|
||||||
it('should generate a correct "fingerprint" claim', () => {
|
it('should generate a correct "fingerprint" claim', () => {
|
||||||
expect(doipjs.utils.generateClaim('123456789', 'fingerprint')).to.equal(
|
expect(
|
||||||
'123456789'
|
doipjs.utils.generateClaim(
|
||||||
)
|
'123456789',
|
||||||
|
doipjs.enums.ClaimFormat.FINGERPRINT
|
||||||
|
)
|
||||||
|
).to.equal('123456789')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('utils.generateProxyURL', () => {
|
||||||
|
it('should be a function (3 arguments)', () => {
|
||||||
|
expect(doipjs.utils.generateProxyURL).to.be.a('function')
|
||||||
|
expect(doipjs.utils.generateProxyURL).to.have.length(3)
|
||||||
|
})
|
||||||
|
it('should generate correct proxy URLs', () => {
|
||||||
|
const opts = {
|
||||||
|
proxy: {
|
||||||
|
hostname: 'localhost',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
expect(
|
||||||
|
doipjs.utils.generateProxyURL('http', { domain: 'domain.org' }, opts)
|
||||||
|
).to.equal('http://localhost/api/2/get/http?domain=domain.org')
|
||||||
|
expect(
|
||||||
|
doipjs.utils.generateProxyURL('dns', { domain: 'domain.org' }, opts)
|
||||||
|
).to.equal('http://localhost/api/2/get/dns?domain=domain.org')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue