62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
import Updux, { createAction, withPayload } from './index.js';
|
|
import u from '@yanick/updeep-remeda';
|
|
|
|
export const expectType = <T>(value: T) => value;
|
|
|
|
test('initialState state', () => {
|
|
const initialState = {
|
|
next_id: 1,
|
|
todos: [],
|
|
};
|
|
const dux = new Updux({
|
|
initialState,
|
|
});
|
|
|
|
expectType<{
|
|
next_id: number;
|
|
todos: unknown[];
|
|
}>(dux.initialState);
|
|
|
|
expect(dux.initialState).toEqual(initialState);
|
|
|
|
const store = dux.createStore();
|
|
|
|
expect(store.getState()).toEqual(initialState);
|
|
});
|
|
|
|
test('actions', () => {
|
|
const addTodo = createAction('addTodo', withPayload<string>());
|
|
const todoDone = createAction('todoDone');
|
|
|
|
const todosDux = new Updux({
|
|
actions: {
|
|
addTodo,
|
|
todoDone,
|
|
},
|
|
});
|
|
|
|
expect(todosDux.actions.addTodo('write tutorial')).toEqual({
|
|
type: 'addTodo',
|
|
payload: 'write tutorial',
|
|
});
|
|
});
|
|
|
|
test('mutation', () => {
|
|
const addTodo = createAction('addTodo', withPayload<string>());
|
|
|
|
type Todo = {
|
|
description: string;
|
|
id: number;
|
|
done: boolean;
|
|
};
|
|
|
|
const dux = new Updux({
|
|
initialState: { nextId: 0, todos: [] as Todo[] },
|
|
});
|
|
|
|
dux.addMutation(addTodo, (description) => (state) => {
|
|
state.todos.unshift({ description, id: state.nextId, done: false });
|
|
state.nextId++;
|
|
});
|
|
});
|