diff --git a/services/liquid-auth-api-js/src/attestation/attestation.controller.spec.ts b/services/liquid-auth-api-js/src/attestation/attestation.controller.spec.ts index b51c19c..045bf69 100644 --- a/services/liquid-auth-api-js/src/attestation/attestation.controller.spec.ts +++ b/services/liquid-auth-api-js/src/attestation/attestation.controller.spec.ts @@ -21,9 +21,7 @@ import androidUserAgentFixtures from '../__fixtures__/user-agent.android.fixture import attestationRequestResponseFixtures from './__fixtures__/attestation.request.response.fixtures.json'; import attestationRequestBodyFixtures from './__fixtures__/attestation.request.body.fixtures.json'; import attestationResponseBodyFixtures from './__fixtures__/attestation.response.body.fixtures.json'; -// TODO: Response Fixtures import attestationResponseResponseFixtures from './__fixtures__/attestation.response.response.fixtures.json'; -import { join } from "node:path"; describe('AttestationController', () => { let attestationController: AttestationController; let userModel: Model; @@ -94,7 +92,7 @@ describe('AttestationController', () => { }); }); it('should fail if liquid extension is not enabled', async () => { - attestationRequestBodyFixtures.forEach((fixture, i) => { + attestationRequestBodyFixtures.forEach((fixture) => { expect(() => attestationController.request({}, { ...fixture, @@ -108,7 +106,7 @@ describe('AttestationController', () => { describe('POST /response', () => { it('should register a key', async () => { const session: Record = new Session(); - authService.addCredential = jest.fn(async (username, credential)=>{ + authService.addCredential = jest.fn(async () => { return attestationResponseResponseFixtures[0]; }); session.challenge = attestationRequestResponseFixtures[0].challenge; @@ -124,13 +122,20 @@ describe('AttestationController', () => { }); it('should set a default device if empty', async () => { const session: Record = new Session(); - authService.addCredential = jest.fn(async (username, credential)=>{ + authService.addCredential = jest.fn(async () => { return attestationResponseResponseFixtures[0]; }); session.challenge = attestationRequestResponseFixtures[0].challenge; session.liquidExtension = true; - const body = - {...attestationResponseBodyFixtures[0], clientExtensionResults: {liquid: {...attestationResponseBodyFixtures[0].clientExtensionResults.liquid, device: null}}} as AttestationCredentialJSONDto; + const body = { + ...attestationResponseBodyFixtures[0], + clientExtensionResults: { + liquid: { + ...attestationResponseBodyFixtures[0].clientExtensionResults.liquid, + device: null, + }, + }, + } as AttestationCredentialJSONDto; const headers = { 'user-agent': androidUserAgentFixtures[0] }; await expect( attestationController.attestationResponse(session, headers, body), @@ -140,7 +145,7 @@ describe('AttestationController', () => { }); it('should fail if the challenge is not a string', async () => { await Promise.all( - attestationResponseBodyFixtures.map(async (fixture, i) => { + attestationResponseBodyFixtures.map(async (fixture) => { const body = fixture as AttestationCredentialJSONDto; const headers = { 'user-agent': androidUserAgentFixtures[0] }; @@ -162,7 +167,7 @@ describe('AttestationController', () => { const body = fixture as AttestationCredentialJSONDto; const headers = { 'user-agent': androidUserAgentFixtures[0] }; const session = { - challenge: attestationRequestResponseFixtures[0].challenge, + challenge: attestationRequestResponseFixtures[i].challenge, }; await expect( attestationController.attestationResponse(session, headers, body), @@ -179,7 +184,7 @@ describe('AttestationController', () => { } as AttestationCredentialJSONDto; const headers = { 'user-agent': androidUserAgentFixtures[0] }; const session = { - challenge: attestationRequestResponseFixtures[0].challenge, + challenge: attestationRequestResponseFixtures[i].challenge, liquidExtension: true, }; await expect( @@ -203,7 +208,7 @@ describe('AttestationController', () => { } as AttestationCredentialJSONDto; const headers = { 'user-agent': androidUserAgentFixtures[0] }; const session = { - challenge: attestationRequestResponseFixtures[0].challenge, + challenge: attestationRequestResponseFixtures[i].challenge, liquidExtension: true, }; await expect(() => diff --git a/services/liquid-auth-api-js/src/attestation/attestation.service.spec.ts b/services/liquid-auth-api-js/src/attestation/attestation.service.spec.ts index a6a2fa1..749d089 100644 --- a/services/liquid-auth-api-js/src/attestation/attestation.service.spec.ts +++ b/services/liquid-auth-api-js/src/attestation/attestation.service.spec.ts @@ -1,33 +1,35 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AttestationService } from './attestation.service.js'; -import { ConfigModule, ConfigService } from "@nestjs/config"; +import { ConfigModule, ConfigService } from '@nestjs/config'; import { AppService } from '../app.service.js'; import { AlgodService } from '../algod/algod.service.js'; -import configurationFixture from "../__fixtures__/configuration.fixture.json"; +import configurationFixture from '../__fixtures__/configuration.fixture.json'; import attestationRequestResponseFixtures from './__fixtures__/attestation.request.response.fixtures.json'; import attestationResponseBodyFixtures from './__fixtures__/attestation.response.body.fixtures.json'; - describe('AttestationService', () => { let provider: AttestationService; - let algodServiceMockFactory = (addr: string)=> ({ - accountInformation: jest.fn(()=>{ + const algodServiceMockFactory = (addr: string) => + ({ + accountInformation: jest.fn(() => { return { - exclude: jest.fn(()=>{ + exclude: jest.fn(() => { return { - do: jest.fn(()=>{ + do: jest.fn(() => { return { - 'auth-addr': addr - } - }) - } - }) - } - }) - } as unknown as AlgodService); - let currentMock = algodServiceMockFactory("24FEVK3D3VPVHP2MHVTZZSP6PINKW7PGPYTFHLO6X6LV4VNFWDTM6AQI7U") + 'auth-addr': addr, + }; + }), + }; + }), + }; + }), + }) as unknown as AlgodService; + let currentMock = algodServiceMockFactory( + '24FEVK3D3VPVHP2MHVTZZSP6PINKW7PGPYTFHLO6X6LV4VNFWDTM6AQI7U', + ); beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -54,25 +56,50 @@ describe('AttestationService', () => { expect(provider).toBeDefined(); }); - it('should validate a signature', ()=>{ + it('should validate a signature', () => { attestationResponseBodyFixtures.forEach((fixture, i) => { - const liquid = fixture.clientExtensionResults.liquid - expect(provider.verify(currentMock, liquid.type, attestationRequestResponseFixtures[i].challenge, liquid.signature, liquid.address)).resolves.toEqual(true); - }) - }) - it('should validate a rekeyed address', ()=>{ + const liquid = fixture.clientExtensionResults.liquid; + expect( + provider.verify( + currentMock, + liquid.type, + attestationRequestResponseFixtures[i].challenge, + liquid.signature, + liquid.address, + ), + ).resolves.toEqual(true); + }); + }); + it('should validate a rekeyed address', () => { attestationResponseBodyFixtures.forEach((fixture, i) => { - const rekeyAddress = "24FEVK3D3VPVHP2MHVTZZSP6PINKW7PGPYTFHLO6X6LV4VNFWDTM6AQI7U" - const liquid = fixture.clientExtensionResults.liquid - currentMock = algodServiceMockFactory(liquid.address) - expect(provider.verify(currentMock, liquid.type, attestationRequestResponseFixtures[i].challenge, liquid.signature, rekeyAddress)).resolves.toEqual(true); - }) - }) - it('should fail to validate unsupported signatures',()=>{ + const rekeyAddress = + '24FEVK3D3VPVHP2MHVTZZSP6PINKW7PGPYTFHLO6X6LV4VNFWDTM6AQI7U'; + const liquid = fixture.clientExtensionResults.liquid; + currentMock = algodServiceMockFactory(liquid.address); + expect( + provider.verify( + currentMock, + liquid.type, + attestationRequestResponseFixtures[i].challenge, + liquid.signature, + rekeyAddress, + ), + ).resolves.toEqual(true); + }); + }); + it('should fail to validate unsupported signatures', () => { attestationResponseBodyFixtures.forEach((fixture, i) => { - const liquid = fixture.clientExtensionResults.liquid - currentMock = algodServiceMockFactory(liquid.address) - expect(provider.verify(currentMock, "unknown", attestationRequestResponseFixtures[i].challenge, liquid.signature, liquid.address)).resolves.toEqual(false); - }) - }) + const liquid = fixture.clientExtensionResults.liquid; + currentMock = algodServiceMockFactory(liquid.address); + expect( + provider.verify( + currentMock, + 'unknown', + attestationRequestResponseFixtures[i].challenge, + liquid.signature, + liquid.address, + ), + ).resolves.toEqual(false); + }); + }); });