118 lines
4.8 KiB
JavaScript
118 lines
4.8 KiB
JavaScript
import { MockUseState, formatMessage } from 'testUtils';
|
|
import { keyStore } from 'utils';
|
|
|
|
import { ErrorStatuses } from 'data/constants/requests';
|
|
|
|
import * as hooks from './hooks';
|
|
|
|
const testValue = 'Test-Value';
|
|
const state = new MockUseState(hooks);
|
|
const hookKeys = keyStore(hooks);
|
|
|
|
let hook;
|
|
describe('FilePreview hooks', () => {
|
|
describe('state hooks', () => {
|
|
});
|
|
describe('non-state hooks', () => {
|
|
beforeEach(() => {
|
|
state.mock();
|
|
});
|
|
afterEach(() => {
|
|
state.restore();
|
|
});
|
|
describe('utility methods', () => {
|
|
describe('getFileType', () => {
|
|
it('returns file extension if available, in lowercase', () => {
|
|
expect(hooks.getFileType('thing.TXT')).toEqual('txt');
|
|
expect(hooks.getFileType(testValue)).toEqual(testValue.toLowerCase());
|
|
});
|
|
});
|
|
describe('isSupported', () => {
|
|
it('returns true iff the filetype is included in SUPPORTED_TYPES', () => {
|
|
let spy = jest.spyOn(hooks, hookKeys.getFileType).mockImplementationOnce(v => v);
|
|
expect(hooks.isSupported({ name: hooks.SUPPORTED_TYPES[0] })).toEqual(true);
|
|
spy = jest.spyOn(hooks, hookKeys.getFileType).mockImplementationOnce(v => v);
|
|
expect(hooks.isSupported({ name: testValue })).toEqual(false);
|
|
spy.mockRestore();
|
|
});
|
|
});
|
|
});
|
|
describe('component hooks', () => {
|
|
describe('renderHooks', () => {
|
|
const file = {
|
|
name: 'test-file-name.txt',
|
|
downloadUrl: 'my-test-download-url.jpg',
|
|
};
|
|
beforeEach(() => {
|
|
hook = hooks.renderHooks({ intl: { formatMessage }, file });
|
|
});
|
|
describe('returned object', () => {
|
|
test('errorStatus and isLoading tied to state, initialized to null and true', () => {
|
|
expect(hook.errorStatus).toEqual(state.stateVals.errorStatus);
|
|
expect(hook.errorStatus).toEqual(null);
|
|
expect(hook.isLoading).toEqual(state.stateVals.isLoading);
|
|
expect(hook.isLoading).toEqual(true);
|
|
});
|
|
describe('error', () => {
|
|
it('loads message from current error status, if valid, else from serverError', () => {
|
|
expect(hook.error.headingMessage).toEqual(
|
|
hooks.ERROR_STATUSES[ErrorStatuses.serverError],
|
|
);
|
|
expect(hook.error.children).toEqual(
|
|
formatMessage(hooks.ERROR_STATUSES[ErrorStatuses.serverError]),
|
|
);
|
|
state.mockVal(state.keys.errorStatus, ErrorStatuses.notFound);
|
|
hook = hooks.renderHooks({ intl: { formatMessage }, file });
|
|
expect(hook.error.headingMessage).toEqual(
|
|
hooks.ERROR_STATUSES[ErrorStatuses.notFound],
|
|
);
|
|
expect(hook.error.children).toEqual(
|
|
formatMessage(hooks.ERROR_STATUSES[ErrorStatuses.notFound]),
|
|
);
|
|
});
|
|
it('provides a single action', () => {
|
|
expect(hook.error.actions.length).toEqual(1);
|
|
});
|
|
describe('action', () => {
|
|
it('sets errorState to null and isLoading to true on click', () => {
|
|
hook.error.actions[0].onClick();
|
|
expect(state.setState.isLoading).toHaveBeenCalledWith(true);
|
|
expect(state.setState.errorStatus).toHaveBeenCalledWith(null);
|
|
});
|
|
});
|
|
});
|
|
describe('Renderer', () => {
|
|
it('returns configured renderer based on filetype', () => {
|
|
hooks.SUPPORTED_TYPES.forEach(type => {
|
|
jest.spyOn(hooks, hookKeys.getFileType).mockReturnValueOnce(type);
|
|
hook = hooks.renderHooks({ intl: { formatMessage }, file });
|
|
expect(hook.Renderer).toEqual(hooks.RENDERERS[type]);
|
|
});
|
|
});
|
|
});
|
|
describe('rendererProps', () => {
|
|
it('forwards url and fileName from file', () => {
|
|
expect(hook.rendererProps.fileName).toEqual(file.name);
|
|
expect(hook.rendererProps.url).toEqual(file.downloadUrl);
|
|
});
|
|
describe('onError', () => {
|
|
it('it sets isLoading to false and loads errorStatus', () => {
|
|
hook.rendererProps.onError(testValue);
|
|
expect(state.setState.isLoading).toHaveBeenCalledWith(false);
|
|
expect(state.setState.errorStatus).toHaveBeenCalledWith(testValue);
|
|
});
|
|
});
|
|
describe('onSuccess', () => {
|
|
it('it sets isLoading to false and errorStatus to null', () => {
|
|
hook.rendererProps.onSuccess(testValue);
|
|
expect(state.setState.isLoading).toHaveBeenCalledWith(false);
|
|
expect(state.setState.errorStatus).toHaveBeenCalledWith(null);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|