205 lines
3.6 KiB
JavaScript
205 lines
3.6 KiB
JavaScript
"use strict";
|
|
|
|
var _ = _interopRequireDefault(require("."));
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
test('actions from mutations', () => {
|
|
const {
|
|
actions: {
|
|
foo,
|
|
bar
|
|
}
|
|
} = (0, _.default)({
|
|
mutations: {
|
|
foo: () => x => x
|
|
}
|
|
});
|
|
expect(foo()).toEqual({
|
|
type: 'foo'
|
|
});
|
|
expect(foo(true)).toEqual({
|
|
type: 'foo',
|
|
payload: true
|
|
});
|
|
expect(foo({
|
|
bar: 2
|
|
}, {
|
|
timestamp: 613
|
|
})).toEqual({
|
|
type: 'foo',
|
|
payload: {
|
|
bar: 2
|
|
},
|
|
meta: {
|
|
timestamp: 613
|
|
}
|
|
});
|
|
});
|
|
test('reducer', () => {
|
|
const {
|
|
actions,
|
|
reducer
|
|
} = (0, _.default)({
|
|
initial: {
|
|
counter: 1
|
|
},
|
|
mutations: {
|
|
inc: () => ({
|
|
counter
|
|
}) => ({
|
|
counter: counter + 1
|
|
})
|
|
}
|
|
});
|
|
let state = reducer(null, {});
|
|
expect(state).toEqual({
|
|
counter: 1
|
|
});
|
|
state = reducer(state, actions.inc());
|
|
expect(state).toEqual({
|
|
counter: 2
|
|
});
|
|
});
|
|
test('sub reducers', () => {
|
|
const foo = (0, _.default)({
|
|
initial: 1,
|
|
mutations: {
|
|
doFoo: () => x => x + 1,
|
|
doAll: () => x => x + 10
|
|
}
|
|
});
|
|
const bar = (0, _.default)({
|
|
initial: 'a',
|
|
mutations: {
|
|
doBar: () => x => x + 'a',
|
|
doAll: () => x => x + 'b'
|
|
}
|
|
});
|
|
const {
|
|
initial,
|
|
actions,
|
|
reducer
|
|
} = (0, _.default)({
|
|
subduxes: {
|
|
foo,
|
|
bar
|
|
}
|
|
});
|
|
expect(initial).toEqual({
|
|
foo: 1,
|
|
bar: 'a'
|
|
});
|
|
expect(Object.keys(actions)).toHaveLength(3);
|
|
let state = reducer(null, {});
|
|
expect(state).toEqual({
|
|
foo: 1,
|
|
bar: 'a'
|
|
});
|
|
state = reducer(state, actions.doFoo());
|
|
expect(state).toEqual({
|
|
foo: 2,
|
|
bar: 'a'
|
|
});
|
|
state = reducer(state, actions.doBar());
|
|
expect(state).toEqual({
|
|
foo: 2,
|
|
bar: 'aa'
|
|
});
|
|
state = reducer(state, actions.doAll());
|
|
expect(state).toEqual({
|
|
foo: 12,
|
|
bar: 'aab'
|
|
});
|
|
});
|
|
test('precedence between root and sub-reducers', () => {
|
|
const {
|
|
initial,
|
|
reducer,
|
|
actions
|
|
} = (0, _.default)({
|
|
initial: {
|
|
foo: {
|
|
bar: 4
|
|
}
|
|
},
|
|
mutations: {
|
|
inc: () => state => {
|
|
return { ...state,
|
|
surprise: state.foo.bar
|
|
};
|
|
}
|
|
},
|
|
subduxes: {
|
|
foo: (0, _.default)({
|
|
initial: {
|
|
bar: 2,
|
|
quux: 3
|
|
},
|
|
mutations: {
|
|
inc: () => state => ({ ...state,
|
|
bar: state.bar + 1
|
|
})
|
|
}
|
|
})
|
|
}
|
|
});
|
|
expect(initial).toEqual({
|
|
foo: {
|
|
bar: 4,
|
|
quux: 3
|
|
}
|
|
});
|
|
expect(reducer(null, actions.inc())).toEqual({
|
|
foo: {
|
|
bar: 5,
|
|
quux: 3
|
|
},
|
|
surprise: 5
|
|
});
|
|
});
|
|
|
|
function timeout(ms) {
|
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
}
|
|
|
|
test('middleware', async () => {
|
|
const {
|
|
middleware,
|
|
createStore
|
|
} = (0, _.default)({
|
|
initial: "",
|
|
mutations: {
|
|
inc: addition => state => state + addition,
|
|
doEeet: () => state => {
|
|
return state + 'Z';
|
|
}
|
|
},
|
|
effects: {
|
|
doEeet: api => next => async action => {
|
|
api.dispatch.inc('a');
|
|
next(action);
|
|
await timeout(1000);
|
|
api.dispatch.inc('c');
|
|
}
|
|
},
|
|
subduxes: {
|
|
foo: (0, _.default)({
|
|
effects: {
|
|
doEeet: api => next => action => {
|
|
api.dispatch({
|
|
type: 'inc',
|
|
payload: 'b'
|
|
});
|
|
next(action);
|
|
}
|
|
}
|
|
})
|
|
}
|
|
});
|
|
const store = createStore();
|
|
store.dispatch.doEeet();
|
|
expect(store.getState()).toEqual('abZ');
|
|
await timeout(1000);
|
|
expect(store.getState()).toEqual('abZc');
|
|
}); |