plugins/graphiql: more tests for StorageBucket and fix removeItem

This commit is contained in:
Patrik Oldsberg
2020-04-24 16:28:48 +02:00
parent c8ef790e1b
commit 3734aeab62
2 changed files with 53 additions and 2 deletions
@@ -28,6 +28,13 @@ describe('StorageBucket', () => {
}).toThrow('Direct property access is not allowed for StorageBuckets');
});
it('should not implement all methods', () => {
const bucket = StorageBucket.forLocalStorage('hello');
expect(() => bucket.length).toThrow('Method not implemented.');
expect(() => bucket.key()).toThrow('Method not implemented.');
});
describe('with mocked underlying storage', () => {
const mockStorage = {
getItem: jest.fn(),
@@ -88,5 +95,49 @@ describe('StorageBucket', () => {
expect(mockStorage.setItem).toHaveBeenCalledTimes(0);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
it('should remove an item', () => {
mockStorage.getItem.mockReturnValueOnce(
JSON.stringify({ x: 'X', y: 'Y' }),
);
bucket.removeItem('x');
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: 'Y' }),
);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
it('should not bother to write when deleting a missing key', () => {
mockStorage.getItem.mockReturnValueOnce(JSON.stringify({ y: 'Y' }));
bucket.removeItem('x');
expect(mockStorage.getItem).toHaveBeenCalledTimes(1);
expect(mockStorage.getItem).toHaveBeenLastCalledWith('my-bucket');
expect(mockStorage.setItem).toHaveBeenCalledTimes(0);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
it('should ignore bad data', () => {
mockStorage.getItem.mockReturnValue('derp');
expect(bucket.getItem('x')).toBe(null);
expect(mockStorage.getItem).toHaveBeenCalledTimes(1);
expect(mockStorage.getItem).toHaveBeenLastCalledWith('my-bucket');
expect(mockStorage.setItem).toHaveBeenCalledTimes(0);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
bucket.removeItem('x');
expect(mockStorage.getItem).toHaveBeenCalledTimes(2);
expect(mockStorage.getItem).toHaveBeenLastCalledWith('my-bucket');
expect(mockStorage.setItem).toHaveBeenCalledTimes(0);
expect(mockStorage.removeItem).toHaveBeenCalledTimes(0);
});
});
});
@@ -71,8 +71,8 @@ export class StorageBucket implements Storage {
return;
}
const deleted = delete data[key];
if (deleted) {
if (key in data) {
delete data[key];
this.write(data);
}
}