ra-data-local-storage
Version:
Local storage data provider for react-admin
96 lines (84 loc) • 3.13 kB
text/typescript
import expect from 'expect';
import localStorageDataProvider from './index';
describe('ra-data-local-storage', () => {
beforeEach(() => {
localStorage.clear();
});
it('creates missing resource collections safely', async () => {
const dataProvider = localStorageDataProvider({
localStorageKey: 'ra-data-local-storage-test',
localStorageUpdateDelay: 0,
});
const response = await dataProvider.create('posts', {
data: { title: 'Hello world' },
} as any);
await new Promise(resolve => setTimeout(resolve, 0));
expect(response.data.title).toEqual('Hello world');
expect(
JSON.parse(
localStorage.getItem('ra-data-local-storage-test') || '{}'
)
).toMatchObject({
posts: [expect.objectContaining({ title: 'Hello world' })],
});
});
it.each(['__proto__', 'constructor', 'prototype'])(
'rejects unsafe resource key %s in update',
unsafeKey => {
const dataProvider = localStorageDataProvider();
expect(() =>
dataProvider.update(unsafeKey, {
id: 1,
data: { title: 'bad' },
previousData: { id: 1 },
} as any)
).toThrow(`Invalid resource key: ${unsafeKey}`);
}
);
it.each(['__proto__', 'constructor', 'prototype'])(
'rejects unsafe resource key %s in updateMany',
unsafeKey => {
const dataProvider = localStorageDataProvider();
expect(() =>
dataProvider.updateMany(unsafeKey, {
ids: [1],
data: { title: 'bad' },
} as any)
).toThrow(`Invalid resource key: ${unsafeKey}`);
}
);
it.each(['__proto__', 'constructor', 'prototype'])(
'rejects unsafe resource key %s in create',
unsafeKey => {
const dataProvider = localStorageDataProvider();
expect(() =>
dataProvider.create(unsafeKey, {
data: { title: 'bad' },
} as any)
).toThrow(`Invalid resource key: ${unsafeKey}`);
}
);
it.each(['__proto__', 'constructor', 'prototype'])(
'rejects unsafe resource key %s in delete',
unsafeKey => {
const dataProvider = localStorageDataProvider();
expect(() =>
dataProvider.delete(unsafeKey, {
id: 1,
previousData: { id: 1 },
} as any)
).toThrow(`Invalid resource key: ${unsafeKey}`);
}
);
it.each(['__proto__', 'constructor', 'prototype'])(
'rejects unsafe resource key %s in deleteMany',
unsafeKey => {
const dataProvider = localStorageDataProvider();
expect(() =>
dataProvider.deleteMany(unsafeKey, {
ids: [1],
} as any)
).toThrow(`Invalid resource key: ${unsafeKey}`);
}
);
});