Files
self/app/tests/utils/proving/provingMachine.startFetchingData.test.ts
2025-09-17 12:48:42 -07:00

104 lines
3.0 KiB
TypeScript

// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
import type { SelfClient } from '@selfxyz/mobile-sdk-alpha';
import { useProtocolStore } from '@selfxyz/mobile-sdk-alpha/stores';
import { useProvingStore } from '@/utils/proving/provingMachine';
import { actorMock } from './actorMock';
jest.mock('xstate', () => {
const { actorMock: mockActor } = require('./actorMock');
return {
createActor: jest.fn(() => mockActor),
createMachine: jest.fn(),
assign: jest.fn(),
send: jest.fn(),
spawn: jest.fn(),
interpret: jest.fn(),
fromPromise: jest.fn(),
fromObservable: jest.fn(),
fromEventObservable: jest.fn(),
fromCallback: jest.fn(),
fromTransition: jest.fn(),
fromReducer: jest.fn(),
fromRef: jest.fn(),
};
});
jest.mock('@/utils/analytics', () => () => ({
trackEvent: jest.fn(),
}));
jest.mock('@/providers/passportDataProvider', () => ({
loadSelectedDocument: jest.fn(),
unsafe_getPrivateKey: jest.fn(),
}));
jest.mock('@/providers/authProvider', () => ({
unsafe_getPrivateKey: jest.fn(),
}));
// app/tests/utils/proving/provingMachine.startFetchingData.test.ts
jest.mock('@selfxyz/mobile-sdk-alpha', () => {
const actual = jest.requireActual('@selfxyz/mobile-sdk-alpha');
return {
__esModule: true,
...actual,
loadSelectedDocument: jest.fn().mockResolvedValue({
data: {
documentCategory: 'passport',
mock: false,
dsc_parsed: { authorityKeyIdentifier: 'key' },
},
}),
};
});
describe('startFetchingData', () => {
let mockSelfClient: SelfClient;
beforeEach(async () => {
jest.clearAllMocks();
const {
loadSelectedDocument,
} = require('@/providers/passportDataProvider');
loadSelectedDocument.mockResolvedValue({
data: {
documentCategory: 'passport',
mock: false,
dsc_parsed: { authorityKeyIdentifier: 'key' },
},
});
const { unsafe_getPrivateKey } = require('@/providers/authProvider');
unsafe_getPrivateKey.mockResolvedValue('secret');
// Create mock selfClient
mockSelfClient = {
getPrivateKey: jest.fn().mockResolvedValue('mock-secret'),
trackEvent: jest.fn(),
} as unknown as SelfClient;
useProtocolStore.setState({
passport: { fetch_all: jest.fn().mockResolvedValue(undefined) },
} as any);
await useProvingStore.getState().init(mockSelfClient, 'register');
actorMock.send.mockClear();
useProtocolStore.setState({
passport: { fetch_all: jest.fn() },
} as any);
useProvingStore.setState({
// @ts-expect-error
passportData: { documentCategory: 'passport', mock: false },
env: 'prod',
});
});
it('emits FETCH_ERROR when dsc_parsed is missing', async () => {
await useProvingStore.getState().startFetchingData(mockSelfClient);
expect(
useProtocolStore.getState().passport.fetch_all,
).not.toHaveBeenCalled();
expect(actorMock.send).toHaveBeenCalledWith({ type: 'FETCH_ERROR' });
});
});