filestack-js
Version:
Official JavaScript library for Filestack
120 lines (100 loc) • 4.24 kB
text/typescript
/*
* Copyright (c) 2018 by Filestack.
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { preview, getUrl } from './preview';
import { config } from './../../config';
const mockAppendChild = jest.fn();
const defaultSession = {
apikey: 'TEST_API_KEY',
urls: Object.assign({}, config.urls),
};
describe('api:upload:preview', () => {
beforeEach(() => {
jest.spyOn(window, 'open').mockImplementation();
const createdElement: any = {
src: '',
width: '',
height: '',
};
jest.spyOn(document, 'createElement').mockReturnValue(createdElement);
jest.spyOn(document, 'getElementById').mockImplementation((id) => {
let obj;
if (id === 'testId') {
obj = { appendChild: mockAppendChild };
}
return obj;
});
});
describe('preview', () => {
it('should open a proper url with preview of a file', () => {
const handle = 'testHandle';
preview(defaultSession, handle);
expect(window.open).toBeCalledTimes(1);
expect(window.open).toBeCalledWith('https://cdn.filestackcontent.com/preview/testHandle', 'testHandle');
});
it('should open a proper url with preview of a file with src handle', () => {
const handle = 'src://test123/test.jpg';
preview(defaultSession, handle);
expect(window.open).toBeCalledTimes(1);
expect(window.open).toBeCalledWith('https://cdn.filestackcontent.com/TEST_API_KEY/preview/src://test123/test.jpg', 'src://test123/test.jpg');
});
it('should open iframe inside provided options.id', () => {
const handle = 'src://test123/test.jpg';
const options = {
id: 'testId',
css: 'customCss',
};
preview(defaultSession, handle, options);
const expected = { 'height': '100%', 'width': '100%', 'src': 'https://cdn.filestackcontent.com/TEST_API_KEY/preview=css:%22customCss%22/src://test123/test.jpg' };
expect(mockAppendChild).toBeCalledTimes(1);
expect(mockAppendChild).toBeCalledWith(expected);
});
it('should throw an error when handle is not provided', () => {
expect(() => { preview(defaultSession); }).toThrow('A valid Filestack handle or storage alias is required for preview');
});
it('should throw an error when id provided and dom element not found', () => {
const handle = 'src://test123/test.jpg';
const options = {
id: 'testId2',
};
expect(() => { preview(defaultSession, handle, options); }).toThrow('DOM Element with id "testId2" not found.');
});
it('should throw an error on invalid preview params', () => {
const handle = 'src://test123/test.jpg';
const options = {
id: {},
test: 123,
};
// @ts-ignore
expect(() => { preview(defaultSession, handle, options); }).toThrow('Invalid preview params');
});
});
describe('getUrl', () => {
it('should be able to get url with security', () => {
const handle = 'TEST_HANDLE';
const options = {
id: 'testId2',
};
const security = {
policy: 'eyJleHBpcnkiOjE1MjM1OTU2MDAsImNhbGwiOlsicmVhZCIsImNvbnZlcnQiXSwiaGFuZGxlIjoiYmZUTkNpZ1JMcTBRTU9yc0ZLemIifQ==',
signature: 'ab1624c9f219ca0118f1af43d21ee87a09a07645c15c9fdbb7447818739c2b8b',
};
const result = getUrl(defaultSession, handle, options, security);
const expected = 'https://cdn.filestackcontent.com/preview/security=policy:eyJleHBpcnkiOjE1MjM1OTU2MDAsImNhbGwiOlsicmVhZCIsImNvbnZlcnQiXSwiaGFuZGxlIjoiYmZUTkNpZ1JMcTBRTU9yc0ZLemIifQ==,signature:ab1624c9f219ca0118f1af43d21ee87a09a07645c15c9fdbb7447818739c2b8b/TEST_HANDLE';
expect(result).toBe(expected);
});
});
});