UNPKG

3.5 kBJavaScriptView Raw
1'use strict'
2/* eslint-env mocha */
3
4const Promise = require('bluebird')
5const _ = require('lodash')
6const { expect } = require('chai')
7const http = require('http')
8const socketIO = require('socket.io')
9
10const { cleanup, clientConnect, closeInstance, ChatService,
11 setCustomCleanup, startService } = require('./testutils')
12
13const { cleanupTimeout, port, user1, redisConnect } = require('./config')
14
15module.exports = function () {
16 let chatService, socket1, socket2, socket3
17
18 afterEach(function (cb) {
19 this.timeout(cleanupTimeout)
20 cleanup(chatService, [socket1, socket2, socket3], cb)
21 chatService = socket1 = socket2 = socket3 = null
22 })
23
24 it('should be able to spawn a server', function (done) {
25 chatService = startService()
26 socket1 = clientConnect(user1)
27 socket1.on('loginConfirmed', u => {
28 expect(u).equal(user1)
29 done()
30 })
31 })
32
33 it('should be able to spawn a server without options', function (done) {
34 let chatService = new ChatService()
35 chatService.on('ready', () => {
36 chatService.close().asCallback(done)
37 })
38 })
39
40 it('should be able to integrate with a http server', function (done) {
41 let app = http.createServer((req, res) => res.end())
42 let chatService1 = startService({ transportOptions: { http: app } })
43 app.listen(port)
44 setCustomCleanup(
45 cb => closeInstance(chatService1)
46 .finally(() =>
47 Promise.fromCallback(fn => app.close(fn)).catchReturn())
48 .asCallback(cb))
49 socket1 = clientConnect(user1)
50 socket1.on('loginConfirmed', u => {
51 expect(u).equal(user1)
52 done()
53 })
54 })
55
56 it('should be able to integrate with an io server', function (done) {
57 let io = socketIO(port)
58 let chatService1 = startService({ transportOptions: {io} })
59 setCustomCleanup(cb => closeInstance(chatService1)
60 .finally(() => io.close())
61 .asCallback(cb))
62 socket1 = clientConnect(user1)
63 socket1.on('loginConfirmed', u => {
64 expect(chatService1.transport.getServer()).equal(io)
65 expect(u).equal(user1)
66 done()
67 })
68 })
69
70 it('should be able to use a custom state constructor', function (done) {
71 this.timeout(5000)
72 let MemoryState = require('../src/MemoryState')
73 chatService = startService({ state: MemoryState })
74 socket1 = clientConnect(user1)
75 socket1.on('loginConfirmed', u => {
76 expect(u).equal(user1)
77 done()
78 })
79 })
80
81 it('should be able to use a custom transport constructor', function (done) {
82 this.timeout(5000)
83 let Transport = require('../src/SocketIOTransport')
84 chatService = startService({ transport: Transport })
85 socket1 = clientConnect(user1)
86 socket1.on('loginConfirmed', u => {
87 expect(u).equal(user1)
88 done()
89 })
90 })
91
92 it('should be able to use a custom adapter constructor', function (done) {
93 this.timeout(5000)
94 let Adapter = require('socket.io-redis')
95 chatService = startService(
96 { adapter: Adapter, adapterOptions: redisConnect })
97 socket1 = clientConnect(user1)
98 socket1.on('loginConfirmed', u => {
99 expect(u).equal(user1)
100 done()
101 })
102 })
103
104 it('should update an instance heartbeat', function (done) {
105 this.timeout(4000)
106 this.slow(2000)
107 chatService = startService({ heartbeatRate: 500 })
108 let start = _.now()
109 setTimeout(() => chatService.getInstanceHeartbeat(chatService.instanceUID)
110 .then(ts => {
111 expect(ts).within(start, start + 2000)
112 done()
113 }), 1000)
114 })
115}