2020-01-01 13:55:28 +05:30
|
|
|
import { useLocalStorageSpy } from 'helpers/local_storage_helper';
|
2017-08-17 22:00:37 +05:30
|
|
|
import AccessorUtilities from '~/lib/utils/accessor';
|
|
|
|
|
|
|
|
describe('AccessorUtilities', () => {
|
2020-01-01 13:55:28 +05:30
|
|
|
useLocalStorageSpy();
|
|
|
|
|
2017-08-17 22:00:37 +05:30
|
|
|
const testError = new Error('test error');
|
|
|
|
|
|
|
|
describe('isPropertyAccessSafe', () => {
|
|
|
|
let base;
|
|
|
|
|
|
|
|
it('should return `true` if access is safe', () => {
|
2020-01-01 13:55:28 +05:30
|
|
|
base = {
|
|
|
|
testProp: 'testProp',
|
|
|
|
};
|
2017-08-17 22:00:37 +05:30
|
|
|
expect(AccessorUtilities.isPropertyAccessSafe(base, 'testProp')).toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return `false` if access throws an error', () => {
|
2018-12-13 13:39:08 +05:30
|
|
|
base = {
|
|
|
|
get testProp() {
|
|
|
|
throw testError;
|
|
|
|
},
|
|
|
|
};
|
2017-08-17 22:00:37 +05:30
|
|
|
|
|
|
|
expect(AccessorUtilities.isPropertyAccessSafe(base, 'testProp')).toBe(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return `false` if property is undefined', () => {
|
|
|
|
base = {};
|
|
|
|
|
|
|
|
expect(AccessorUtilities.isPropertyAccessSafe(base, 'testProp')).toBe(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('isFunctionCallSafe', () => {
|
|
|
|
const base = {};
|
|
|
|
|
|
|
|
it('should return `true` if calling is safe', () => {
|
|
|
|
base.func = () => {};
|
|
|
|
|
|
|
|
expect(AccessorUtilities.isFunctionCallSafe(base, 'func')).toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return `false` if calling throws an error', () => {
|
2018-12-13 13:39:08 +05:30
|
|
|
base.func = () => {
|
|
|
|
throw new Error('test error');
|
|
|
|
};
|
2017-08-17 22:00:37 +05:30
|
|
|
|
|
|
|
expect(AccessorUtilities.isFunctionCallSafe(base, 'func')).toBe(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return `false` if function is undefined', () => {
|
|
|
|
base.func = undefined;
|
|
|
|
|
|
|
|
expect(AccessorUtilities.isFunctionCallSafe(base, 'func')).toBe(false);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('isLocalStorageAccessSafe', () => {
|
|
|
|
it('should return `true` if access is safe', () => {
|
|
|
|
expect(AccessorUtilities.isLocalStorageAccessSafe()).toBe(true);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should return `false` if access to .setItem isnt safe', () => {
|
2020-01-01 13:55:28 +05:30
|
|
|
window.localStorage.setItem.mockImplementation(() => {
|
2018-12-13 13:39:08 +05:30
|
|
|
throw testError;
|
|
|
|
});
|
2017-08-17 22:00:37 +05:30
|
|
|
|
|
|
|
expect(AccessorUtilities.isLocalStorageAccessSafe()).toBe(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should set a test item if access is safe', () => {
|
|
|
|
AccessorUtilities.isLocalStorageAccessSafe();
|
|
|
|
|
|
|
|
expect(window.localStorage.setItem).toHaveBeenCalledWith('isLocalStorageAccessSafe', 'true');
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should remove the test item if access is safe', () => {
|
|
|
|
AccessorUtilities.isLocalStorageAccessSafe();
|
|
|
|
|
|
|
|
expect(window.localStorage.removeItem).toHaveBeenCalledWith('isLocalStorageAccessSafe');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|