mirror of
https://github.com/zoriya/v10.git
synced 2026-08-16 02:45:09 +00:00
feat(store): initial release (#279)
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
import { createSlice } from '../src/slice';
|
||||
|
||||
describe('slice', () => {
|
||||
describe('createSlice', () => {
|
||||
it('creates slice with all required properties', () => {
|
||||
interface Target {
|
||||
value: number;
|
||||
}
|
||||
|
||||
const slice = createSlice<Target>()({
|
||||
initialState: { count: 0 },
|
||||
getSnapshot: ({ target }) => ({ count: target.value }),
|
||||
subscribe: vi.fn(),
|
||||
request: {
|
||||
increment: (amount: number, { target }) => {
|
||||
target.value += amount;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(slice.id).toBeTypeOf('symbol');
|
||||
expect(slice.initialState).toEqual({ count: 0 });
|
||||
expect(slice.getSnapshot).toBeTypeOf('function');
|
||||
expect(slice.subscribe).toBeTypeOf('function');
|
||||
expect(slice.request.increment).toMatchObject({
|
||||
key: 'increment',
|
||||
guard: [],
|
||||
handler: expect.any(Function),
|
||||
});
|
||||
});
|
||||
|
||||
it('resolves shorthand handlers', () => {
|
||||
const slice = createSlice({
|
||||
initialState: {},
|
||||
getSnapshot: () => ({}),
|
||||
subscribe: () => {},
|
||||
request: {
|
||||
simple: () => 'result',
|
||||
},
|
||||
});
|
||||
|
||||
expect(slice.request.simple.key).toBe('simple');
|
||||
expect(slice.request.simple.guard).toEqual([]);
|
||||
expect(slice.request.simple.cancel).toBeUndefined();
|
||||
});
|
||||
|
||||
it('preserves full config options', () => {
|
||||
const guard = () => true;
|
||||
|
||||
const schedule = (flush: () => void) => {
|
||||
setTimeout(flush, 100);
|
||||
};
|
||||
|
||||
const slice = createSlice({
|
||||
initialState: {},
|
||||
getSnapshot: () => ({}),
|
||||
subscribe: () => {},
|
||||
request: {
|
||||
configured: {
|
||||
key: 'custom-key',
|
||||
guard: [guard],
|
||||
schedule,
|
||||
handler: () => {},
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
expect(slice.request.configured.key).toBe('custom-key');
|
||||
expect(slice.request.configured.guard).toEqual([guard]);
|
||||
expect(slice.request.configured.schedule).toBe(schedule);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user