34 lines
1.3 KiB
JavaScript
34 lines
1.3 KiB
JavaScript
|
import { test, expect } from 'vitest';
|
||
|
/// --8<-- [start:sel1]
|
||
|
import Updux from 'updux';
|
||
|
const dux = new Updux({
|
||
|
initialState: [],
|
||
|
selectors: {
|
||
|
getDone: (state) => state.filter(({ done }) => done),
|
||
|
getById: (state) => (id) => state.find((todo) => todo.id === id),
|
||
|
},
|
||
|
});
|
||
|
const state = [
|
||
|
{ id: 1, done: true },
|
||
|
{ id: 2, done: false },
|
||
|
];
|
||
|
dux.selectors.getDone(state); // = [ { id: 1, done: true } ]
|
||
|
dux.selectors.getById(state)(2); // = { id: 2, done: false }
|
||
|
const store = dux.createStore({ preloadedState: state });
|
||
|
store.selectors.getDone(state); // = [ { id: 1, done: true } ]
|
||
|
store.selectors.getById(state)(2); // = { id: 2, done: false }
|
||
|
store.getState.getDone(); // = [ { id: 1, done: true } ]
|
||
|
store.getState.getById(2); // = { id: 2, done: false }
|
||
|
/// --8<-- [end:sel1]
|
||
|
test('selectors', () => {
|
||
|
expect(dux.selectors.getDone(state)).toMatchObject([{ id: 1, done: true }]);
|
||
|
expect(dux.selectors.getById(state)(2)).toMatchObject({ id: 2 });
|
||
|
expect(store.selectors.getDone(state)).toMatchObject([
|
||
|
{ id: 1, done: true },
|
||
|
]);
|
||
|
expect(store.selectors.getById(state)(2)).toMatchObject({ id: 2 });
|
||
|
expect(store.getState()).toMatchObject([{ id: 1 }, { id: 2 }]);
|
||
|
expect(store.getState.getDone()).toMatchObject([{ id: 1, done: true }]);
|
||
|
expect(store.getState.getById(2)).toMatchObject({ id: 2 });
|
||
|
});
|