plugins/graphiql: add tests for StorageBucket + minor fix

This commit is contained in:
Patrik Oldsberg
2020-04-23 17:48:34 +02:00
parent 9d080a4dce
commit 7ec8e0d0c2
2 changed files with 63 additions and 1 deletions
@@ -27,4 +27,66 @@ describe('StorageBucket', () => {
return bucket['dunno-this-one'];
}).toThrow('Direct property access is not allowed for StorageBuckets');
});
describe('with mocked underlying storage', () => {
const mockStorage = {
getItem: jest.fn(),
setItem: jest.fn(),
removeItem: jest.fn(),
};
const bucket = StorageBucket.forStorage(
(mockStorage as unknown) as Storage,
'my-bucket',
);
afterEach(() => {
jest.resetAllMocks();
});
it('should set a first item', () => {
bucket.setItem('x', 'a');
expect(mockStorage.getItem).toHaveBeenCalledTimes(1);
expect(mockStorage.getItem).toHaveBeenLastCalledWith('my-bucket');
expect(mockStorage.setItem).toHaveBeenCalledTimes(1);
expect(mockStorage.setItem).toHaveBeenLastCalledWith(
'my-bucket',
JSON.stringify({ x: 'a' }),
);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
it('should set a second item', () => {
mockStorage.getItem.mockReturnValueOnce(JSON.stringify({ y: 'b' }));
bucket.setItem('x', 'a');
expect(mockStorage.getItem).toHaveBeenCalledTimes(1);
expect(mockStorage.getItem).toHaveBeenLastCalledWith('my-bucket');
expect(mockStorage.setItem).toHaveBeenCalledTimes(1);
expect(mockStorage.setItem).toHaveBeenLastCalledWith(
'my-bucket',
JSON.stringify({ y: 'b', x: 'a' }),
);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
it('should clear the bucket', () => {
bucket.clear();
expect(mockStorage.getItem).toHaveBeenCalledTimes(0);
expect(mockStorage.setItem).toHaveBeenCalledTimes(0);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(1);
expect(mockStorage.removeItem).toHaveBeenLastCalledWith('my-bucket');
});
it('should get an item', () => {
mockStorage.getItem.mockReturnValueOnce(JSON.stringify({ x: 'X' }));
expect(bucket.getItem('x')).toBe('X');
expect(mockStorage.getItem).toHaveBeenCalledTimes(1);
expect(mockStorage.getItem).toHaveBeenLastCalledWith('my-bucket');
expect(mockStorage.setItem).toHaveBeenCalledTimes(0);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
});
});
@@ -54,7 +54,7 @@ export class StorageBucket implements Storage {
}
clear(): void {
this.write({});
this.storage.removeItem(this.bucket);
}
getItem(key: string): string | null {