mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-25 11:28:51 +01:00
80 lines
2.7 KiB
JavaScript
80 lines
2.7 KiB
JavaScript
|
import browser from 'webextension-polyfill';
|
||
|
import LocalStore from './local-store';
|
||
|
|
||
|
jest.mock('webextension-polyfill', () => ({
|
||
|
storage: { local: true },
|
||
|
}));
|
||
|
|
||
|
const setup = ({ isSupported }) => {
|
||
|
browser.storage.local = isSupported;
|
||
|
return new LocalStore();
|
||
|
};
|
||
|
describe('LocalStore', () => {
|
||
|
afterEach(() => {
|
||
|
jest.resetModules();
|
||
|
});
|
||
|
describe('contructor', () => {
|
||
|
it('should set isSupported property to false when browser does not support local storage', () => {
|
||
|
const localStore = setup({ isSupported: false });
|
||
|
|
||
|
expect(localStore.isSupported).toBe(false);
|
||
|
});
|
||
|
|
||
|
it('should set isSupported property to true when browser supports local storage', () => {
|
||
|
const localStore = setup({ isSupported: true });
|
||
|
expect(localStore.isSupported).toBe(true);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('setMetadata', () => {
|
||
|
it('should set the metadata property on LocalStore', () => {
|
||
|
const metadata = { version: 74 };
|
||
|
const localStore = setup({ isSupported: true });
|
||
|
localStore.setMetadata(metadata);
|
||
|
|
||
|
expect(localStore.metadata).toStrictEqual(metadata);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('set', () => {
|
||
|
it('should throw an error if called in a browser that does not support local storage', async () => {
|
||
|
const localStore = setup({ isSupported: false });
|
||
|
await expect(() => localStore.set()).rejects.toThrow(
|
||
|
'Metamask- cannot persist state to local store as this browser does not support this action',
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it('should throw an error if not passed a truthy value as an argument', async () => {
|
||
|
const localStore = setup({ isSupported: true });
|
||
|
await expect(() => localStore.set()).rejects.toThrow(
|
||
|
'MetaMask - updated state is missing',
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it('should throw an error if passed a valid argument but metadata has not yet been set', async () => {
|
||
|
const localStore = setup({ isSupported: true });
|
||
|
await expect(() =>
|
||
|
localStore.set({ appState: { test: true } }),
|
||
|
).rejects.toThrow(
|
||
|
'MetaMask - metadata must be set on instance of ExtensionStore before calling "set"',
|
||
|
);
|
||
|
});
|
||
|
|
||
|
it('should not throw if passed a valid argument and metadata has been set', async () => {
|
||
|
const localStore = setup({ isSupported: true });
|
||
|
localStore.setMetadata({ version: 74 });
|
||
|
await expect(async function () {
|
||
|
localStore.set({ appState: { test: true } });
|
||
|
}).not.toThrow();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe('get', () => {
|
||
|
it('should return undefined if called in a browser that does not support local storage', async () => {
|
||
|
const localStore = setup({ isSupported: false });
|
||
|
const result = await localStore.get();
|
||
|
expect(result).toStrictEqual(undefined);
|
||
|
});
|
||
|
});
|
||
|
});
|