overleaf/services/real-time/test/unit/coffee/DrainManagerTests.coffee
2016-10-24 16:36:09 +01:00

64 lines
1.9 KiB
CoffeeScript

should = require('chai').should()
sinon = require "sinon"
SandboxedModule = require('sandboxed-module')
path = require "path"
modulePath = path.join __dirname, "../../../app/js/DrainManager"
describe "DrainManager", ->
beforeEach ->
@DrainManager = SandboxedModule.require modulePath, requires:
"logger-sharelatex": @logger = log: sinon.stub()
@io =
sockets:
clients: sinon.stub()
describe "reconnectNClients", ->
beforeEach ->
@clients = []
for i in [0..9]
@clients[i] = {
id: i
emit: sinon.stub()
}
@io.sockets.clients.returns @clients
describe "after first pass", ->
beforeEach ->
@DrainManager.reconnectNClients(@io, 3)
it "should reconnect the first 3 clients", ->
for i in [0..2]
@clients[i].emit.calledWith("reconnectGracefully").should.equal true
it "should not reconnect any more clients", ->
for i in [3..9]
@clients[i].emit.calledWith("reconnectGracefully").should.equal false
describe "after second pass", ->
beforeEach ->
@DrainManager.reconnectNClients(@io, 3)
it "should reconnect the next 3 clients", ->
for i in [3..5]
@clients[i].emit.calledWith("reconnectGracefully").should.equal true
it "should not reconnect any more clients", ->
for i in [6..9]
@clients[i].emit.calledWith("reconnectGracefully").should.equal false
it "should not reconnect the first 3 clients again", ->
for i in [0..2]
@clients[i].emit.calledOnce.should.equal true
describe "after final pass", ->
beforeEach ->
@DrainManager.reconnectNClients(@io, 100)
it "should not reconnect the first 6 clients again", ->
for i in [0..5]
@clients[i].emit.calledOnce.should.equal true
it "should log out that it reached the end", ->
@logger.log
.calledWith("All clients have been told to reconnectGracefully")
.should.equal true