From b6fa6d39df30641c23085da67260e21d92ea8297 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Thu, 7 Dec 2023 21:14:13 +0000 Subject: [PATCH] Use klona for test data & move klona to mock file. --- package.json | 5 +++-- test/10-verify.spec.js | 34 +++++++++++++++++----------------- test/mocks/credential.js | 13 +++++++++---- 3 files changed, 29 insertions(+), 23 deletions(-) diff --git a/package.json b/package.json index 10388527..4ecb6bed 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "dependencies": { "@digitalbazaar/credentials-v2-context": "github:digitalbazaar/credentials-v2-context#initial", "credentials-context": "^2.0.0", + "ed25519-signature-2018-context": "^1.1.0", "jsonld": "^8.3.1", - "jsonld-signatures": "^11.2.1", - "ed25519-signature-2018-context": "^1.1.0" + "jsonld-signatures": "^11.2.1" }, "devDependencies": { "@digitalbazaar/credentials-examples-context": "^1.0.0", @@ -60,6 +60,7 @@ "karma-mocha-reporter": "^2.2.5", "karma-sourcemap-loader": "^0.4.0", "karma-webpack": "^5.0.0", + "klona": "^2.0.6", "mocha": "^10.2.0", "mocha-lcov-reporter": "^1.3.0", "uuid": "^9.0.0", diff --git a/test/10-verify.spec.js b/test/10-verify.spec.js index 7ae9fb4d..97a1ea4c 100644 --- a/test/10-verify.spec.js +++ b/test/10-verify.spec.js @@ -89,7 +89,7 @@ for(const [version, mockCredential] of versionedCredentials) { describe(`Verifiable Credentials Data Model ${version}`, async function() { describe('vc.issue()', () => { it('should issue a verifiable credential with proof', async () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); const verifiableCredential = await vc.issue({ credential, suite, @@ -108,7 +108,7 @@ for(const [version, mockCredential] of versionedCredentials) { publicKeyBase58: keyPair.publicKeyBase58 }); keyPair.id = `did:key:${fp}#${fp}`; - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential.id = `urn:uuid:${uuid()}`; credential.issuer = `did:key:${fp}`; credential.expirationDate = '2020-05-31T19:21:25Z'; @@ -129,7 +129,7 @@ for(const [version, mockCredential] of versionedCredentials) { verifiableCredential.proof.should.be.an('object'); }); it('should add "issuanceDate" to verifiable credentials', async () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); delete credential.issuanceDate; const now = new Date(); const expectedIssuanceDate = `${now.toISOString().slice(0, -5)}Z`; @@ -157,7 +157,7 @@ for(const [version, mockCredential] of versionedCredentials) { let error; try { await vc.issue({ - credential: jsonld.clone(mockCredential), + credential: mockCredential(), suite }); } catch(e) { @@ -174,7 +174,7 @@ for(const [version, mockCredential] of versionedCredentials) { describe('vc.createPresentation()', () => { it('should create an unsigned presentation', () => { const presentation = vc.createPresentation({ - verifiableCredential: jsonld.clone(mockCredential), + verifiableCredential: mockCredential(), id: 'test:ebc6f1c2', holder: 'did:ex:holder123' }); @@ -189,7 +189,7 @@ for(const [version, mockCredential] of versionedCredentials) { describe('vc.signPresentation()', () => { it('should create a signed VP', async () => { const presentation = vc.createPresentation({ - verifiableCredential: jsonld.clone(mockCredential), + verifiableCredential: mockCredential(), id: 'test:ebc6f1c2', holder: 'did:ex:holder123', version @@ -214,7 +214,7 @@ for(const [version, mockCredential] of versionedCredentials) { describe('verify API (credentials)', () => { it('should verify a vc', async () => { const verifiableCredential = await vc.issue({ - credential: jsonld.clone(mockCredential), + credential: mockCredential(), suite, documentLoader }); @@ -257,7 +257,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); const verifiableCredential = await vc.issue({ - credential: jsonld.clone(mockCredential), + credential: mockCredential(), suite: ecdsaSdSignSuite, documentLoader }); @@ -280,7 +280,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); it('should verify a vc with a positive status check', async () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential['@context'].push({ '@context': { id: '@id', @@ -394,7 +394,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); it('should fail to verify a vc with a negative status check', async () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential['@context'].push({ '@context': { id: '@id', @@ -429,7 +429,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); it('should not run "checkStatus" on a vc without a ' + '"credentialStatus" property', async () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); const verifiableCredential = await vc.issue({ credential, suite, @@ -474,7 +474,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); const verifiableCredential = await vc.issue({ - credential: jsonld.clone(mockCredential), + credential: mockCredential(), suite: ecdsaSdSignSuite, documentLoader }); @@ -696,7 +696,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); if(version === 1.0) { it('should reject if "now" is before "issuanceDate"', () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential.issuer = 'did:example:12345'; credential.issuanceDate = '2022-10-31T19:21:25Z'; const now = '2022-06-30T19:21:25Z'; @@ -715,7 +715,7 @@ for(const [version, mockCredential] of versionedCredentials) { } it('should reject if "credentialSubject" is empty', () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential.credentialSubject = {}; credential.issuer = 'did:example:12345'; if(version === 1.0) { @@ -733,7 +733,7 @@ for(const [version, mockCredential] of versionedCredentials) { '"credentialSubject" must make a claim.'); }); it('should reject if a "credentialSubject" is empty', () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential.credentialSubject = [{}, {id: 'did:key:zFoo'}]; credential.issuer = 'did:example:12345'; if(version === 1.0) { @@ -752,7 +752,7 @@ for(const [version, mockCredential] of versionedCredentials) { }); it('should accept multiple credentialSubjects', () => { - const credential = jsonld.clone(mockCredential); + const credential = mockCredential(); credential.credentialSubject = [ {id: 'did:key:zFoo'}, {name: 'did key'} @@ -776,7 +776,7 @@ for(const [version, mockCredential] of versionedCredentials) { } async function _generateCredential(_mockCredential) { - const mockCredential = jsonld.clone(_mockCredential); + const mockCredential = _mockCredential(); const {didDocument, documentLoader} = await _loadDid(); mockCredential.issuer = didDocument.didDocument.id; mockCredential.id = `http://example.edu/credentials/${uuid()}`; diff --git a/test/mocks/credential.js b/test/mocks/credential.js index 541f0bb2..0698faae 100644 --- a/test/mocks/credential.js +++ b/test/mocks/credential.js @@ -1,5 +1,10 @@ +/*! +* Copyright (c) 2019-2023 Digital Bazaar, Inc. All rights reserved. +*/ +import {klona} from 'klona'; + export const versionedCredentials = new Map([ - [1.0, { + [1.0, () => klona({ '@context': [ 'https://www.w3.org/2018/credentials/v1', 'https://www.w3.org/2018/credentials/examples/v1' @@ -12,8 +17,8 @@ export const versionedCredentials = new Map([ id: 'did:example:ebfeb1f712ebc6f1c276e12ec21', alumniOf: 'Example University' } - }], - [2.0, { + })], + [2.0, () => klona({ '@context': [ 'https://www.w3.org/ns/credentials/v2', 'https://www.w3.org/2018/credentials/examples/v1' @@ -25,5 +30,5 @@ export const versionedCredentials = new Map([ id: 'did:example:ebfeb1f712ebc6f1c276e12ec21', alumniOf: 'Example University' } - }] + })] ]);