Files
buuh/tests/browser/basic.js
T

64 lines
1.6 KiB
JavaScript
Raw Normal View History

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')
const choo = require('../../')
2016-12-11 19:35:29 +01:00
const html = require('../../html')
2016-07-03 13:44:41 -07:00
test('state is immutable', function (t) {
t.plan(4)
2016-07-03 13:44:41 -07:00
const app = choo()
const state = {
foo: 'baz',
beep: 'boop'
}
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-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-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-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))
})