/*! * @license * Copyright Squiz Australia Pty Ltd. All Rights Reserved. */ import 'aws-sdk-client-mock-jest'; import { AwsClientStub, mockClient } from 'aws-sdk-client-mock'; import { GetObjectCommand, PutObjectCommand, S3Client } from '@aws-sdk/client-s3'; import { sdkStreamMixin } from '@smithy/util-stream'; import { Readable } from 'node:stream'; import { JobDetailsRepository } from './JobDetailsRepository'; import { initIocContainer, iocContainer } from '../../../mocks/mockIoc'; import { InjectTokens } from '../constants/InjectTokens'; import { createMockJobContext } from '../model/JobContext'; import { createMockJobManifest } from '../manifest'; import { createMockJobExecution } from '../model/JobExecution'; initIocContainer(); describe('JobDetailsRepositoryV2', (): void => { let s3Client: AwsClientStub; let jobDetailsRepository: JobDetailsRepository; let bucketName: string; let tenant: string; beforeEach(() => { s3Client = mockClient(iocContainer.get(S3Client)); jobDetailsRepository = iocContainer.get(JobDetailsRepository); bucketName = iocContainer.get(InjectTokens.JobDetailsBucket); tenant = iocContainer.get(InjectTokens.Tenant); }); describe(`get`, (): void => { it(`should return a response for get`, async (): Promise => { const mockKey = `mock`; s3Client.on(GetObjectCommand).resolves({ Body: sdkStreamMixin(Readable.from(['file'])), }); const response = await jobDetailsRepository.get(mockKey); expect(response).toBe('file'); expect(s3Client).toHaveReceivedCommandWith(GetObjectCommand, { Bucket: bucketName, Key: mockKey, }); }); }); describe('createJobDetailsFile', (): void => { it('should create the job details file', async () => { s3Client.on(PutObjectCommand).resolves({}); const jobContext = createMockJobContext(); const jobManifest = createMockJobManifest(); const jobExecution = createMockJobExecution(); const expectedKey = `${tenant}/${jobExecution.id}`; const response = await jobDetailsRepository.createJobDetailsFile(tenant, jobContext, jobManifest, jobExecution); expect(response).toBe(expectedKey); expect(s3Client).toHaveReceivedCommandWith(PutObjectCommand, { Bucket: bucketName, Key: expectedKey, Body: JSON.stringify({ jobContext, jobManifest, jobExecution }), }); }); }); });