diff --git a/test/resources/biometric-tokens.test.ts b/test/resources/biometric-tokens.test.ts new file mode 100644 index 0000000..0074be8 --- /dev/null +++ b/test/resources/biometric-tokens.test.ts @@ -0,0 +1,137 @@ +/// +/// + +import { Applicant, ApplicantConsentName, BiometricToken } from "onfido-node"; + +import { + cleanUpApplicants, + createApplicant, + createWorkflowRunWithCustomInputs, + onfido, + sleep, + uploadLivePhoto, +} from "../test-helpers"; + +const biometricWorkflowId = + process.env.ONFIDO_SAMPLE_WORKFLOW_ID_BIOMETRIC_TOKEN || + "b79dcf69-41a0-412d-b803-d1a618730f72"; + +function createBiometricCustomerUserId() { + return `test-user-id-${Date.now()}-${Math.round(Math.random() * 1_000_000)}`; +} + +function expectBiometricToken(token: BiometricToken) { + expect(token.uuid).toEqual(expect.stringMatching(/^[0-9a-f-]+$/i)); + expect(token.data.inserted_at).toEqual(expect.any(String)); + expect(token.data.media_type).toEqual(expect.any(String)); + expect(token.data.status).toEqual(expect.any(String)); +} + +async function createBiometricToken() { + const applicant = ( + await createApplicant({ + consents: [ + { + name: ApplicantConsentName.PrivacyNoticesRead, + granted: true, + }, + ], + }) + ).data; + + const customerUserId = createBiometricCustomerUserId(); + const livePhoto = await uploadLivePhoto(applicant); + const workflowRun = await createWorkflowRunWithCustomInputs({ + applicant_id: applicant.id, + workflow_id: biometricWorkflowId, + customer_user_id: customerUserId, + custom_data: { + media_ids: [ + { + id: livePhoto.data.id, + }, + ], + }, + }); + + expect(workflowRun.data.customer_user_id).toEqual(customerUserId); + + let biometricTokens = (await onfido.listBiometricTokens(customerUserId)).data; + + for (let iteration = 0; iteration < 10; iteration += 1) { + if (biometricTokens.biometric_tokens.length > 0) { + return { + applicant, + customerUserId, + biometricTokens, + }; + } + + await sleep(3000); + biometricTokens = (await onfido.listBiometricTokens(customerUserId)).data; + } + + throw new Error("Biometric tokens were not created in time"); +} + +afterAll(() => { + return cleanUpApplicants(); +}); + +it("lists biometric tokens", async () => { + const { biometricTokens } = await createBiometricToken(); + + expect(biometricTokens.biometric_tokens.length).toBeGreaterThan(0); + expectBiometricToken(biometricTokens.biometric_tokens[0]); +}, 45000); + +it("finds a biometric token", async () => { + const { customerUserId, biometricTokens } = await createBiometricToken(); + const tokenUuid = biometricTokens.biometric_tokens[0].uuid; + + const biometricTokenResponse = await onfido.findBiometricToken( + customerUserId, + tokenUuid, + ); + + expect(biometricTokenResponse.data.biometric_token.uuid).toEqual(tokenUuid); + expectBiometricToken(biometricTokenResponse.data.biometric_token); +}, 45000); + +it("updates a biometric token status", async () => { + const { customerUserId, biometricTokens } = await createBiometricToken(); + const tokenUuid = biometricTokens.biometric_tokens[0].uuid; + + const updatedBiometricToken = await onfido.updateBiometricToken( + customerUserId, + tokenUuid, + { + status: "approved", + }, + ); + + expect(updatedBiometricToken.data.biometric_token.uuid).toEqual(tokenUuid); + expect(updatedBiometricToken.data.biometric_token.data.status).toEqual( + "approved", + ); +}, 45000); + +it("invalidates a biometric token", async () => { + const { customerUserId, biometricTokens } = await createBiometricToken(); + const tokenUuid = biometricTokens.biometric_tokens[0].uuid; + + const response = await onfido.invalidateBiometricToken( + customerUserId, + tokenUuid, + ); + + expect(response.status).toEqual(200); +}, 45000); + +it("invalidates biometric tokens", async () => { + const { customerUserId } = await createBiometricToken(); + + const response = await onfido.invalidateBiometricTokens(customerUserId); + + expect(response.status).toEqual(200); +}, 45000);