UNPKG

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