state-synchronizers
Version:
Deterministically update state based on other state
62 lines (61 loc) • 2.92 kB
JavaScript
;
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);
});
});
});