UNPKG

state-synchronizers

Version:

Deterministically update state based on other state

62 lines (61 loc) 2.92 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; exports.__esModule = true; var create_state_synchronizer_1 = require("./create-state-synchronizer"); describe('createStateSynchronizer', function () { it('should return a function', function () { expect.hasAssertions(); var result = create_state_synchronizer_1.createStateSynchronizer(jest.fn(), ['a', 'b']); expect(result).toBeInstanceOf(Function); }); describe('returned state synchronizer', function () { var initialState = { name: 'John', age: 10, legalAge: false }; var updateLegalAge = jest.fn(function (state) { return (__assign(__assign({}, state), { legalAge: state.age >= 21 })); }); beforeEach(function () { jest.clearAllMocks(); }); it('should run the updater when a dependency changed', function () { expect.hasAssertions(); var legalAgeSynchronizer = create_state_synchronizer_1.createStateSynchronizer(updateLegalAge, [ 'age', ]); var newState = __assign(__assign({}, initialState), { age: 11 }); var result = legalAgeSynchronizer(newState, initialState); expect(updateLegalAge).toHaveBeenCalledTimes(1); expect(updateLegalAge).toHaveBeenCalledWith(newState); expect(result).toStrictEqual(updateLegalAge.mock.results[0].value); }); it('should not run the updater when no dependencies changed', function () { expect.hasAssertions(); var legalAgeSynchronizer = create_state_synchronizer_1.createStateSynchronizer(updateLegalAge, [ 'age', ]); var newState = __assign(__assign({}, initialState), { name: 'Ann' }); var result = legalAgeSynchronizer(newState, initialState); expect(updateLegalAge).not.toHaveBeenCalled(); expect(result).toStrictEqual(newState); }); it('should not call the updater when the dependencies array is empty', function () { expect.hasAssertions(); var legalAgeSynchronizer = create_state_synchronizer_1.createStateSynchronizer(updateLegalAge, []); var newState = { name: 'Ann', age: 50, legalAge: true }; var result = legalAgeSynchronizer(newState, initialState); expect(updateLegalAge).not.toHaveBeenCalled(); expect(result).toStrictEqual(newState); }); }); });