Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(IT Wallet): [SIW-2012] Notify the user 30 days before credential expiration #6727

Merged
merged 5 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ import { getCredentialStatus } from "../itwCredentialStatusUtils";
import { ItwStoredCredentialsMocks } from "../itwMocksUtils";
import { StoredCredential } from "../itwTypesUtils";

const options: Parameters<typeof getCredentialStatus>[1] = {
expiringDays: 14
};

describe("getCredentialStatus", () => {
afterEach(() => {
MockDate.reset();
Expand All @@ -26,7 +30,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "invalid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("expired");
expect(getCredentialStatus(mockCredential, options)).toEqual("expired");
});

it("should return the digital document expired status", () => {
Expand All @@ -47,7 +51,9 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("jwtExpired");
expect(getCredentialStatus(mockCredential, options)).toEqual(
"jwtExpired"
);
});

// Physical document wins
Expand All @@ -68,7 +74,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "invalid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("expired");
expect(getCredentialStatus(mockCredential, options)).toEqual("expired");
});

it("should return jwtExpired when only JWT data are available", () => {
Expand All @@ -81,7 +87,9 @@ describe("getCredentialStatus", () => {
}
};

expect(getCredentialStatus(mockCredential)).toEqual("jwtExpired");
expect(getCredentialStatus(mockCredential, options)).toEqual(
"jwtExpired"
);
});
});

Expand All @@ -104,7 +112,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("expiring");
expect(getCredentialStatus(mockCredential, options)).toEqual("expiring");
});

it("should return the digital document expiring status", () => {
Expand All @@ -125,7 +133,9 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("jwtExpiring");
expect(getCredentialStatus(mockCredential, options)).toEqual(
"jwtExpiring"
);
});

// Digital document wins
Expand All @@ -147,7 +157,9 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("jwtExpiring");
expect(getCredentialStatus(mockCredential, options)).toEqual(
"jwtExpiring"
);
});

// Physical document wins
Expand All @@ -169,7 +181,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("expiring");
expect(getCredentialStatus(mockCredential, options)).toEqual("expiring");
});

it("should return jwtExpiring when only JWT data are available", () => {
Expand All @@ -182,7 +194,9 @@ describe("getCredentialStatus", () => {
}
};

expect(getCredentialStatus(mockCredential)).toEqual("jwtExpiring");
expect(getCredentialStatus(mockCredential, options)).toEqual(
"jwtExpiring"
);
});
});

Expand All @@ -204,7 +218,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "invalid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("invalid");
expect(getCredentialStatus(mockCredential, options)).toEqual("invalid");
});

it("should return the physical document invalid status over any digital document status", () => {
Expand All @@ -224,7 +238,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "invalid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("invalid");
expect(getCredentialStatus(mockCredential, options)).toEqual("invalid");
});
});

Expand All @@ -247,7 +261,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("valid");
expect(getCredentialStatus(mockCredential, options)).toEqual("valid");
});

it("should return valid when the credential does not have an expiration date and it is not invalid for other reasons", () => {
Expand All @@ -268,7 +282,7 @@ describe("getCredentialStatus", () => {
storedStatusAttestation: { credentialStatus: "valid" }
};

expect(getCredentialStatus(mockCredential)).toEqual("valid");
expect(getCredentialStatus(mockCredential, options)).toEqual("valid");
});

it("should return valid when only JWT data are available", () => {
Expand All @@ -281,7 +295,7 @@ describe("getCredentialStatus", () => {
}
};

expect(getCredentialStatus(mockCredential)).toEqual("valid");
expect(getCredentialStatus(mockCredential, options)).toEqual("valid");
});
});

Expand All @@ -293,7 +307,7 @@ describe("getCredentialStatus", () => {
credentialStatus: "unknown"
}
};
expect(getCredentialStatus(mockCredential)).toEqual("unknown");
expect(getCredentialStatus(mockCredential, options)).toEqual("unknown");
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@ import * as O from "fp-ts/lib/Option";
import { getCredentialExpireDate } from "./itwClaimsUtils";
import { ItwCredentialStatus, StoredCredential } from "./itwTypesUtils";

const DEFAULT_EXPIRING_DAYS = 30;

type GetCredentialStatusOptions = {
/**
* Number of days before expiration required to mark a credential as "EXPIRING".
* @default 30
*/
expiringDays?: number;
};
Expand All @@ -25,7 +28,7 @@ export const getCredentialStatus = (
credential: StoredCredential,
options: GetCredentialStatusOptions = {}
): ItwCredentialStatus => {
const { expiringDays = 14 } = options;
const { expiringDays = DEFAULT_EXPIRING_DAYS } = options;
const {
jwt,
parsedCredential,
Expand Down
Loading