@store-sync/redux-middleware
Version:
Redux middleware that syncs state
71 lines • 2.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const redux_1 = require("redux");
const _1 = require("./");
describe('storeSync', () => {
const alwaysTheDiff = [1, 2, 3];
class TestTransport {
constructor() {
this.messages = [];
this.listeners = [];
this.send = jest.fn((msg) => {
this.messages.push(msg);
});
}
addMessageListener(listener) {
this.listeners.push(listener);
}
receiveChange(msg) {
this.listeners.forEach(listener => {
listener(msg);
});
}
}
class TestDiffer {
diff(a, b) {
return alwaysTheDiff;
}
apply(a, patch) {
return [...a, ...patch];
}
}
const transport = new TestTransport();
const differ = new TestDiffer();
const storeSync = _1.default({ transport, differ });
const theOneActionWeCareAbout = 'HELLO_WORLD';
const reducer = (state = [], action) => {
switch (action.type) {
case theOneActionWeCareAbout:
return [...state, action.payload];
}
return state;
};
it('sends diffs', () => {
const store = redux_1.createStore(reducer, [], redux_1.applyMiddleware(storeSync));
store.dispatch({
type: theOneActionWeCareAbout,
payload: 1,
});
expect(store.getState()).toStrictEqual([1]);
expect(transport.send).toHaveBeenCalledWith({
diff: alwaysTheDiff,
datetime: expect.any(Number),
});
});
it('applies diffs it receives', () => {
const mockReducer = jest.fn(reducer);
redux_1.createStore(mockReducer, [], redux_1.applyMiddleware(storeSync));
transport.receiveChange({
datetime: Date.now(),
diff: alwaysTheDiff,
});
expect(mockReducer).toHaveBeenLastCalledWith([], {
type: 'STORE_SYNC_UPDATE',
payload: alwaysTheDiff,
meta: {
datetime: expect.any(Number),
},
});
});
});
//# sourceMappingURL=index.test.js.map
;