2016-07-04 09:09:43 -07:00
|
|
|
const append = require('append-child')
|
2016-12-11 19:35:29 +01:00
|
|
|
const test = require('tape')
|
|
|
|
|
|
2016-06-29 08:06:04 -07:00
|
|
|
const choo = require('../../')
|
2016-12-11 19:35:29 +01:00
|
|
|
const html = require('../../html')
|
2016-06-29 08:06:04 -07:00
|
|
|
|
2016-07-03 13:44:41 -07:00
|
|
|
test('state is immutable', function (t) {
|
|
|
|
|
t.plan(4)
|
2016-06-29 08:06:04 -07:00
|
|
|
|
2016-07-03 13:44:41 -07:00
|
|
|
const app = choo()
|
|
|
|
|
const state = {
|
|
|
|
|
foo: 'baz',
|
|
|
|
|
beep: 'boop'
|
|
|
|
|
}
|
2016-06-29 08:06:04 -07:00
|
|
|
|
2016-07-03 13:44:41 -07:00
|
|
|
app.model({
|
|
|
|
|
state: state,
|
|
|
|
|
namespace: 'test',
|
|
|
|
|
reducers: {
|
2016-12-11 19:35:29 +01:00
|
|
|
'no-reducer-mutate': (state, data) => {
|
2016-07-03 13:44:41 -07:00
|
|
|
return {}
|
2016-06-29 08:06:04 -07:00
|
|
|
},
|
2016-12-11 19:35:29 +01:00
|
|
|
'mutate-on-return': (state, data) => {
|
2016-08-27 15:24:28 -06:00
|
|
|
delete data.type
|
|
|
|
|
return data
|
2016-06-29 08:06:04 -07:00
|
|
|
}
|
2016-07-03 13:44:41 -07:00
|
|
|
},
|
|
|
|
|
effects: {
|
2016-12-11 19:35:29 +01:00
|
|
|
'triggers-reducers': (state, data, send, done) => {
|
2016-07-03 13:44:41 -07:00
|
|
|
send('test:mutate-on-return', {beep: 'barp'}, done)
|
|
|
|
|
}
|
|
|
|
|
}
|
2016-06-29 08:06:04 -07:00
|
|
|
})
|
2016-07-03 13:44:41 -07:00
|
|
|
|
|
|
|
|
let loop = -1
|
|
|
|
|
|
|
|
|
|
const asserts = [
|
|
|
|
|
(state) => t.deepEqual(state, {foo: 'baz', beep: 'boop'}, 'intial state'),
|
|
|
|
|
(state) => t.deepEqual(state, {foo: 'baz', beep: 'boop'}, 'no change in state'),
|
|
|
|
|
(state) => t.deepEqual(state, {foo: 'oof', beep: 'boop'}, 'change in state from reducer'),
|
|
|
|
|
(state) => t.deepEqual(state, {foo: 'oof', beep: 'barp'}, 'change in state from effect')
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
const triggers = [
|
|
|
|
|
(send) => send('test:no-reducer-mutate'),
|
|
|
|
|
(send) => send('test:mutate-on-return', {foo: 'oof'}),
|
|
|
|
|
(send) => send('test:triggers-reducers')
|
|
|
|
|
]
|
|
|
|
|
|
2016-12-11 19:35:29 +01:00
|
|
|
app.router([
|
|
|
|
|
['/', function (state, prev, send) {
|
2016-07-03 13:44:41 -07:00
|
|
|
++loop
|
|
|
|
|
asserts[loop] && asserts[loop](state.test)
|
|
|
|
|
setTimeout(() => triggers[loop] && triggers[loop](send), 5)
|
2016-12-11 19:35:29 +01:00
|
|
|
return html`
|
|
|
|
|
<div><span class="test">${state.foo}:${state.beep}</span></div>
|
|
|
|
|
`
|
|
|
|
|
}]
|
2016-07-03 13:44:41 -07:00
|
|
|
])
|
|
|
|
|
|
|
|
|
|
const tree = app.start()
|
2016-07-04 09:09:43 -07:00
|
|
|
t.on('end', append(tree))
|
2016-06-29 08:06:04 -07:00
|
|
|
})
|