'use strict'; const tape = require( 'tape' ) const co = require( 'co' ) const IO = require( '../' ) const application = require( './helpers/utils' ).application const connection = require( './helpers/utils' ).connection tape( 'Listeners can be added during runtime to connected clients', t => { t.plan( 2 ) const io = new IO() const app = application( io ) const client = connection( app.server ) client.on( 'connect', () => { var called = false client.on( 'response', ctx => { called = true }) client.emit( 'request' ) // Wait for a response and see if called turns true setTimeout( () => { t.notOk( called, 'Called should remain false' ) io.on( 'request', ctx => { ctx.socket.emit( 'response' ) }) client.emit( 'request' ) setTimeout( () => { t.ok( called, 'IO should now respond to the event and called should be true' ) client.disconnect() }, 500 ) }, 500 ) }) }) tape( 'Middleware can be added during runtime to connected clients', t => { t.plan( 2 ) const io = new IO() const app = application( io ) const client = connection( app.server ) io.on( 'req1', ctx => { ctx.socket.emit( 'res1', ctx.foo ) }) io.on( 'req2', ctx => { ctx.socket.emit( 'res2', ctx.foo ) }) client.on( 'connect', () => { client.on( 'res1', data => { t.notOk( data, 'Middleware did not fire and attach additional prop' ) io.use( co.wrap( function *( ctx, next ) { ctx.foo = 'foo' })) client.emit( 'req2' ) }) client.on( 'res2', data => { t.ok( data, 'Middleware has fired and attached prop' ) client.disconnect() }) client.emit( 'req1' ) }) })