UNPKG

asksuite-core

Version:
73 lines (61 loc) 2.03 kB
const AWSS3Caller = require('../services/AWSS3Caller'); const nock = require('nock'); beforeAll(() => { jest.setTimeout(60000); }); describe('Asksuite S3 Caller testing...', () => { const mockBucketName = 'bucket-name'; const mockObjectKey = 'object-key'; const mockAwsConfig = { accessKeyId: 'x', secretAccessKey: 'x', region: 'us-east-1', }; const defaultTimeout = 15000; const s3 = new AWSS3Caller(mockAwsConfig); const baseMock = (bucket = mockBucketName) => nock(`https://${bucket}.s3.amazonaws.com`).persist(false); describe('When get object completes before timeout', () => { beforeAll(() => baseMock() .get(`/${mockObjectKey}`) .reply(200, { payload: 'value' }), ); it('Should return object value', async () => { const object = await s3.getObject(mockBucketName, mockObjectKey); expect(object).toEqual({ payload: 'value' }); }); }); describe('When get object timeouts', () => { beforeAll(() => baseMock() .get(`/${mockObjectKey}`) .delay(defaultTimeout) .reply(200, { payload: 'value' }) .get(`/${mockObjectKey}`) .reply(200, { payload: 'value2' }), ); it('Should retry and return object value', async () => { const object = await s3.getObject(mockBucketName, mockObjectKey); expect(object).toEqual({ payload: 'value2' }); }); }); describe('When get object timeouts after max retries', () => { beforeAll(() => baseMock() .get(`/${mockObjectKey}`) .delay(defaultTimeout) .reply(200, { payload: 'value' }) .get(`/${mockObjectKey}`) .delay(defaultTimeout) .reply(200, { payload: 'value2' }) .get(`/${mockObjectKey}`) .delay(defaultTimeout) .reply(200, { payload: 'value3' }), ); it('Should throw error', async () => { const objectPromise = s3.getObject(mockBucketName, mockObjectKey); await expect(objectPromise).rejects.toThrow(); }); }); });