diff --git a/packages/providers/upload-aws-s3/jest.config.js b/packages/providers/upload-aws-s3/jest.config.js new file mode 100644 index 0000000000..10e09dd095 --- /dev/null +++ b/packages/providers/upload-aws-s3/jest.config.js @@ -0,0 +1,10 @@ +'use strict'; + +const baseConfig = require('../../../jest.base-config'); +const pkg = require('./package.json'); + +module.exports = { + ...baseConfig, + displayName: pkg.name, + roots: [__dirname], +}; diff --git a/packages/providers/upload-aws-s3/lib/__tests__/upload-aws-s3.test.js b/packages/providers/upload-aws-s3/lib/__tests__/upload-aws-s3.test.js new file mode 100644 index 0000000000..6c92864e94 --- /dev/null +++ b/packages/providers/upload-aws-s3/lib/__tests__/upload-aws-s3.test.js @@ -0,0 +1,60 @@ +'use strict'; + +const AWS = require('aws-sdk'); +const awsProvider = require('../index'); + +jest.mock('aws-sdk'); + +const S3InstanceMock = { + upload: jest.fn((params, callback) => callback(null, {})), +}; + +AWS.S3.mockReturnValue(S3InstanceMock); + +describe('AWS-S3 provider', () => { + const providerInstance = awsProvider.init({}); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('upload', () => { + test('Should add url to file object', async () => { + S3InstanceMock.upload.mockImplementationOnce((params, callback) => + callback(null, { Location: 'https://validurl.test' }) + ); + const file = { + path: '/tmp/', + hash: 'test', + ext: 'json', + mime: 'application/json', + buffer: '', + }; + + await providerInstance.upload(file); + + expect(S3InstanceMock.upload).toBeCalled(); + expect(file.url).toBeDefined(); + expect(file.url).toEqual('https://validurl.test'); + }); + + test('Should add to the url the https protocol as it is missing', async () => { + S3InstanceMock.upload.mockImplementationOnce((params, callback) => + callback(null, { Location: 'uri.test' }) + ); + const file = { + path: '/tmp/', + hash: 'test', + ext: 'json', + mime: 'application/json', + buffer: '', + }; + + await providerInstance.upload(file); + + expect(S3InstanceMock.upload).toBeCalled(); + expect(file.url).toBeDefined(); + expect(file.url).toEqual('https://uri.test'); + }); + }); +}); diff --git a/packages/providers/upload-aws-s3/lib/index.js b/packages/providers/upload-aws-s3/lib/index.js index 32ae12789c..c44e52f82a 100644 --- a/packages/providers/upload-aws-s3/lib/index.js +++ b/packages/providers/upload-aws-s3/lib/index.js @@ -9,6 +9,11 @@ const _ = require('lodash'); const AWS = require('aws-sdk'); +function assertUrlProtocol(url) { + // Regex to test protocol like "http://", "https://" + return /^\w*:\/\//.test(url); +} + module.exports = { init(config) { const S3 = new AWS.S3({ @@ -34,7 +39,12 @@ module.exports = { } // set the bucket file url - file.url = data.Location; + if (assertUrlProtocol(data.Location)) { + file.url = data.Location; + } else { + // Default protocol to https protocol + file.url = `https://${data.Location}`; + } resolve(); }