asksuite-core
Version:
73 lines (61 loc) • 2.03 kB
JavaScript
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();
});
});
});