plugins/graphiql: add tests for StorageBucket + minor fix
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user