UNPKG

teth

Version:

Functional, reactive, pattern matching based, centralized state tree, open source JS library.

67 lines (63 loc) 2.34 kB
/* Copyright 2017 Ronny Reichmann */ /* global test expect */ const { context, define } = require('./T') const cestre = require('./cestre') const pipe = require('./pipe') function createTestState () { return {bicycles: {muscle: [13, 21, 35], electric: [39, 43, 97]}} } test('cestre change main state', done => { const ctx = context() const state = cestre.init(createTestState()) // main state ctx.define('add: one, to: bicycles.muscle', state.mutate('bicycles.muscle'), (msg, muscle) => [ muscle.concat([73]) ]) define(cestre.didChangePattern, state('bicycles.muscle'), (msg, muscle) => { expect(muscle).toEqual([ 13, 21, 35, 73 ]) done() }) ctx.send('add: one, to: bicycles.muscle') .catch(e => { expect(e).toBe(null) done() }) }) test('cestre pass through discrete state', done => { const ctx = context() const state = cestre.init('b-state', createTestState()) const withBothSubStates = state('bicycles.muscle', 'bicycles.electric') ctx.define('start: processing', withBothSubStates, (msg, muscle, electric) => pipe.all([ ctx.send({ process: 'muscle bikes', muscle }), ctx.send({ process: 'electric bikes', electric }) ])) ctx.define('process: muscle bikes', ({ muscle }) => muscle.concat([777])) ctx.define('process: electric bikes', ({ electric }) => electric.concat([333])) ctx.send('start: processing') .then(([muscle, electric]) => ({muscle, electric})) .then(result => { expect(result).toEqual({ muscle: [ 13, 21, 35, 777 ], electric: [ 39, 43, 97, 333 ] }) done() }) }) test('cestre pass through sync discrete state', () => { const ctx = context() const state = cestre.init('c-state', createTestState()) const withBothSubStates = state('bicycles.muscle', 'bicycles.electric') ctx.define('start: processing', withBothSubStates, (msg, muscle, electric) => [ ctx.send.sync({ process: 'muscle bikes', muscle }), ctx.send.sync({ process: 'electric bikes', electric }) ]) ctx.define('process: muscle bikes', ({ muscle }) => muscle.concat([777])) ctx.define('process: electric bikes', ({ electric }) => electric.concat([333])) const result = ctx.send.sync('start: processing') expect(result).toEqual([ [ 13, 21, 35, 777 ], [ 39, 43, 97, 333 ] ]) })