Skip to content

Commit b6ec6cb

Browse files
committed
Use live dates to better integration test expiration logic.
1 parent 29b9643 commit b6ec6cb

File tree

2 files changed

+37
-50
lines changed

2 files changed

+37
-50
lines changed

test/10-verify.spec.js

Lines changed: 32 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
} from './testDocumentLoader.js';
1313
import {assertionController} from './mocks/assertionController.js';
1414
import chai from 'chai';
15-
import {createTimeStamp} from './helpers.js';
15+
import {createSkewedTimeStamp} from './helpers.js';
1616
import {CredentialIssuancePurpose} from '../lib/CredentialIssuancePurpose.js';
1717
import {DataIntegrityProof} from '@digitalbazaar/data-integrity';
1818
import {Ed25519Signature2018} from '@digitalbazaar/ed25519-signature-2018';
@@ -155,11 +155,8 @@ for(const [version, mockCredential] of versionedCredentials) {
155155
it('should issue "validUntil" in the future', async () => {
156156
const credential = jsonld.clone(mockCredential);
157157
credential.issuer = 'did:example:12345';
158-
const validUntil = new Date();
159158
// set validUntil one year in the future
160-
validUntil.setFullYear(validUntil.getFullYear() + 1);
161-
// turn it into an ISO Time Stamp
162-
credential.validUntil = createTimeStamp({date: validUntil});
159+
credential.validUntil = createSkewedTimeStamp({skewYear: 1});
163160
let error;
164161
let verifiableCredential;
165162
try {
@@ -186,11 +183,8 @@ for(const [version, mockCredential] of versionedCredentials) {
186183
it('should issue "validUntil" in the past', async () => {
187184
const credential = jsonld.clone(mockCredential);
188185
credential.issuer = 'did:example:12345';
189-
const validUntil = new Date();
190186
// set validUntil one year in the past
191-
validUntil.setFullYear(validUntil.getFullYear() - 1);
192-
// turn it into an ISO Time Stamp
193-
credential.validUntil = createTimeStamp({date: validUntil});
187+
credential.validUntil = createSkewedTimeStamp({skewYear: -1});
194188
let error;
195189
let verifiableCredential;
196190
try {
@@ -217,9 +211,7 @@ for(const [version, mockCredential] of versionedCredentials) {
217211
it('should issue "validFrom" in the past', async () => {
218212
const credential = jsonld.clone(mockCredential);
219213
credential.issuer = 'did:example:12345';
220-
const validFrom = new Date();
221-
validFrom.setFullYear(validFrom.getFullYear() - 1);
222-
credential.validFrom = createTimeStamp({date: validFrom});
214+
credential.validFrom = createSkewedTimeStamp({skewYear: -1});
223215
let error;
224216
let verifiableCredential;
225217
try {
@@ -246,9 +238,7 @@ for(const [version, mockCredential] of versionedCredentials) {
246238
it('should issue "validFrom" in the future', async () => {
247239
const credential = jsonld.clone(mockCredential);
248240
credential.issuer = 'did:example:12345';
249-
const validFrom = new Date();
250-
validFrom.setFullYear(validFrom.getFullYear() + 1);
251-
credential.validFrom = createTimeStamp({date: validFrom});
241+
credential.validFrom = createSkewedTimeStamp({skewYear: 1});
252242
let error;
253243
let verifiableCredential;
254244
try {
@@ -275,12 +265,8 @@ for(const [version, mockCredential] of versionedCredentials) {
275265
it('should issue both "validFrom" and "validUntil"', async () => {
276266
const credential = jsonld.clone(mockCredential);
277267
credential.issuer = 'did:example:12345';
278-
const validFrom = new Date();
279-
validFrom.setFullYear(validFrom.getFullYear() - 1);
280-
credential.validFrom = createTimeStamp({date: validFrom});
281-
const validUntil = new Date();
282-
validUntil.setFullYear(validFrom.getFullYear() + 1);
283-
credential.validUntil = createTimeStamp({date: validUntil});
268+
credential.validFrom = createSkewedTimeStamp({skewYear: -1});
269+
credential.validUntil = createSkewedTimeStamp({skewYear: 1});
284270
let error;
285271
let verifiableCredential;
286272
try {
@@ -792,11 +778,14 @@ for(const [version, mockCredential] of versionedCredentials) {
792778
.contain('Credential has expired.');
793779
});
794780
if(version === 1.0) {
781+
// we submit with second precission,
782+
// but throw with millisecond precision
783+
const getISOString = stamp => new Date(stamp).toISOString();
795784
it('should reject if "now" is before "issuanceDate"', () => {
796785
const credential = jsonld.clone(mockCredential);
797786
credential.issuer = 'did:example:12345';
798-
credential.issuanceDate = '2022-10-31T19:21:25Z';
799-
const now = '2022-06-30T19:21:25Z';
787+
credential.issuanceDate = createSkewedTimeStamp({skewYear: 1});
788+
const now = createSkewedTimeStamp({skewYear: 0});
800789
let error;
801790
try {
802791
vc._checkCredential({credential, now});
@@ -806,19 +795,18 @@ for(const [version, mockCredential] of versionedCredentials) {
806795
should.exist(error,
807796
'Should throw error when "now" is before "issuanceDate"');
808797
error.message.should.contain(
809-
'The current date time (2022-06-30T19:21:25.000Z) is before the ' +
810-
'"issuanceDate" (2022-10-31T19:21:25.000Z).');
798+
`The current date time (${getISOString(now)}) is before the ` +
799+
`"issuanceDate" (${getISOString(credential.issuanceDate)}).`);
811800
});
812801
}
813802
if(version === 2.0) {
814803
it('should reject "validFrom" in the future', () => {
815804
const credential = jsonld.clone(mockCredential);
816805
credential.issuer = 'did:example:12345';
817-
credential.validFrom = '2022-10-30T19:21:25Z';
818-
const now = '2022-06-30T19:21:25Z';
806+
credential.validFrom = createSkewedTimeStamp({skewYear: 1});
819807
let error;
820808
try {
821-
vc._checkCredential({credential, now});
809+
vc._checkCredential({credential});
822810
} catch(e) {
823811
error = e;
824812
}
@@ -828,11 +816,10 @@ for(const [version, mockCredential] of versionedCredentials) {
828816
it('should accept "validFrom" in the past', () => {
829817
const credential = jsonld.clone(mockCredential);
830818
credential.issuer = 'did:example:12345';
831-
credential.validFrom = '2022-06-30T19:21:25Z';
832-
const now = '2022-10-30T19:21:25Z';
819+
credential.validFrom = createSkewedTimeStamp({skewYear: -1});
833820
let error;
834821
try {
835-
vc._checkCredential({credential, now});
822+
vc._checkCredential({credential});
836823
} catch(e) {
837824
error = e;
838825
}
@@ -842,11 +829,10 @@ for(const [version, mockCredential] of versionedCredentials) {
842829
it('should reject "validUntil" in the past', () => {
843830
const credential = jsonld.clone(mockCredential);
844831
credential.issuer = 'did:example:12345';
845-
credential.validUntil = '2022-06-31T19:21:25Z';
846-
const now = '2025-10-30T19:21:25Z';
832+
credential.validUntil = createSkewedTimeStamp({skewYear: -1});
847833
let error;
848834
try {
849-
vc._checkCredential({credential, now});
835+
vc._checkCredential({credential});
850836
} catch(e) {
851837
error = e;
852838
}
@@ -856,11 +842,10 @@ for(const [version, mockCredential] of versionedCredentials) {
856842
it('should accept "validUntil" in the future', () => {
857843
const credential = jsonld.clone(mockCredential);
858844
credential.issuer = 'did:example:12345';
859-
credential.validUntil = '2025-10-31T19:21:25Z';
860-
const now = '2022-06-30T19:21:25Z';
845+
credential.validUntil = createSkewedTimeStamp({skewYear: 1});
861846
let error;
862847
try {
863-
vc._checkCredential({credential, now});
848+
vc._checkCredential({credential});
864849
} catch(e) {
865850
error = e;
866851
}
@@ -870,12 +855,11 @@ for(const [version, mockCredential] of versionedCredentials) {
870855
it('should accept if now is between "validFrom" & "validUntil"', () => {
871856
const credential = jsonld.clone(mockCredential);
872857
credential.issuer = 'did:example:12345';
873-
credential.validFrom = '2022-05-30T19:21:25Z';
874-
credential.validUntil = '2025-05-30T19:21:25Z';
875-
const now = '2022-06-30T19:21:25Z';
858+
credential.validFrom = createSkewedTimeStamp({skewYear: -1});
859+
credential.validUntil = createSkewedTimeStamp({skewYear: 1});
876860
let error;
877861
try {
878-
vc._checkCredential({credential, now});
862+
vc._checkCredential({credential});
879863
} catch(e) {
880864
error = e;
881865
}
@@ -886,7 +870,7 @@ for(const [version, mockCredential] of versionedCredentials) {
886870
() => {
887871
const credential = jsonld.clone(mockCredential);
888872
credential.issuer = 'did:example:12345';
889-
const now = '2022-06-30T19:21:25Z';
873+
const now = createSkewedTimeStamp({skewYear: 0});
890874
credential.validFrom = now;
891875
credential.validUntil = now;
892876
let error;
@@ -901,12 +885,11 @@ for(const [version, mockCredential] of versionedCredentials) {
901885
it('should reject if now is after "validFrom" & "validUntil"', () => {
902886
const credential = jsonld.clone(mockCredential);
903887
credential.issuer = 'did:example:12345';
904-
credential.validFrom = '2022-05-30T19:21:25Z';
905-
credential.validUntil = '2023-05-30T19:21:25Z';
906-
const now = '2024-06-30T19:21:25Z';
888+
credential.validFrom = createSkewedTimeStamp({skewYear: -2});
889+
credential.validUntil = createSkewedTimeStamp({skewYear: -1});
907890
let error;
908891
try {
909-
vc._checkCredential({credential, now});
892+
vc._checkCredential({credential});
910893
} catch(e) {
911894
error = e;
912895
}
@@ -916,12 +899,11 @@ for(const [version, mockCredential] of versionedCredentials) {
916899
it('should reject if now is before "validFrom" & "validUntil"', () => {
917900
const credential = jsonld.clone(mockCredential);
918901
credential.issuer = 'did:example:12345';
919-
credential.validFrom = '2024-05-30T19:21:25Z';
920-
credential.validUntil = '2025-05-30T19:21:25Z';
921-
const now = '2023-06-30T19:21:25Z';
902+
credential.validFrom = createSkewedTimeStamp({skewYear: 1});
903+
credential.validUntil = createSkewedTimeStamp({skewYear: 2});
922904
let error;
923905
try {
924-
vc._checkCredential({credential, now});
906+
vc._checkCredential({credential});
925907
} catch(e) {
926908
error = e;
927909
}

test/helpers.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,8 @@ export function createTimeStamp({date}) {
33
// remove the milliseconds from the iso time stamp
44
return isoString.substr(0, isoString.length - 5) + 'Z';
55
}
6+
7+
export function createSkewedTimeStamp({date = new Date(), skewYear}) {
8+
date.setFullYear(date.getFullYear() + skewYear);
9+
return createTimeStamp({date});
10+
}

0 commit comments

Comments
 (0)