/*! * @license * Copyright Squiz Australia Pty Ltd. All Rights Reserved. */ import { Logger } from '@squiz/dx-logger-lib'; import { AxiosInstance } from 'axios'; import { JobManifestV1Model } from '../../../../manifest'; import { pollForResult } from './resultPoller'; jest.mock('./responseHandler', () => ({ handleResponse: jest.fn(), isAxiosResponse: jest.fn(), })); jest.mock('./versionChecker', () => ({ checkIfVersionExists: jest.fn(), })); import { handleResponse, isAxiosResponse } from './responseHandler'; describe('resultPoller', () => { let mockApiClient: AxiosInstance; let mockLogger: Logger; const mockHandleResponse = handleResponse as jest.MockedFunction; const mockIsAxiosResponse = isAxiosResponse as jest.MockedFunction; beforeEach(() => { jest.clearAllMocks(); mockApiClient = { get: jest.fn(), post: jest.fn(), } as any; mockLogger = { info: jest.fn(), error: jest.fn(), warn: jest.fn(), debug: jest.fn(), } as any; mockIsAxiosResponse.mockReturnValue(true); }); describe('pollForResult', () => { const testUploadId = 'upload-123'; const testManifest = { name: 'test-job', version: '1.0.0', } as any as JobManifestV1Model; it('should return result data on success', async () => { const mockResult = { status: 'completed', data: 'result data' }; mockHandleResponse.mockResolvedValue(mockResult); const result = await pollForResult(mockApiClient, testUploadId, testManifest, mockLogger); expect(mockApiClient.post).toHaveBeenCalledWith('/upload-job/next', { id: testUploadId, manifest: testManifest, }); expect(mockHandleResponse).toHaveBeenCalled(); expect(result).toEqual(mockResult); }); it('should throw error when request fails', async () => { const mockError = new Error('Request failed'); mockHandleResponse.mockRejectedValue(mockError); await expect(pollForResult(mockApiClient, testUploadId, testManifest, mockLogger)).rejects.toThrow( 'Request failed', ); expect(mockApiClient.post).toHaveBeenCalledWith('/upload-job/next', { id: testUploadId, manifest: testManifest, }); }); }); });