const tape = require('tape') const choo = require('../../') const view = require('../../html') tape('should render on the server', function (t) { t.test('should render a static response', function (t) { t.plan(1) const app = choo() app.router((route) => [ route('/', () => view`

Hello Tokyo!

`) ]) const html = app.toString('/') const expected = '

Hello Tokyo!

' t.equal(html, expected, 'strings are equal') }) t.test('should accept a state object', function (t) { t.plan(1) const app = choo() app.router((route) => [ route('/', function (state, prev, send) { return view`

meow meow ${state.message}

` }) ]) const html = app.toString('/', { message: 'nyan!' }) const expected = '

meow meow nyan!

' t.equal(html, expected, 'strings are equal') }) t.test('should extend flat existing models', function (t) { t.plan(1) const app = choo() app.model({ state: { bin: 'baz', beep: 'boop' } }) app.router((route) => [ route('/', function (state, prev, send) { return view`

${state.foo} ${state.bin} ${state.beep}

` }) ]) const state = { foo: 'bar!', beep: 'beep' } const html = app.toString('/', state) const expected = '

bar! baz beep

' t.equal(html, expected, 'strings are equal') }) t.test('should extend namespaced existing models', function (t) { t.plan(1) const app = choo() app.model({ namespace: 'hello', state: { bin: 'baz', beep: 'boop' } }) app.router((route) => [ route('/', function (state, prev, send) { return view`

${state.hello.foo} ${state.hello.bin} ${state.hello.beep}

` }) ]) const state = { hello: { foo: 'bar!', beep: 'beep' } } const html = app.toString('/', state) const expected = '

bar! baz beep

' t.equal(html, expected, 'strings are equal') }) t.test('should throw if called without route', function (t) { t.plan(1) const app = choo() app.router((route) => [ route('/', function (state, prev, send) { send('hey!') }) ]) t.throws(app.toString.bind(null), /route must be a string/) }) t.test('should throw if calling send()', function (t) { t.plan(1) const app = choo() app.router((route) => [ route('/', function (state, prev, send) { send('hey!') }) ]) const msg = /send\(\) cannot be called/ t.throws(app.toString.bind(null, '/', { message: 'nyan!' }), msg) }) })