@emartech/faye-redis-sharded
Version:
Redis backend engine for Faye with support for sharding
122 lines (106 loc) • 4.05 kB
JavaScript
JS.ENV.Server.DisconnectSpec = JS.Test.describe("Server disconnect", function() { with(this) {
before(function() { with(this) {
this.engine = {}
stub(Faye.Engine, "get").returns(engine)
this.server = new Faye.Server()
}})
describe("#disconnect", function() { with(this) {
before(function() { with(this) {
this.clientId = "fakeclientid"
this.message = {channel: "/meta/disconnect",
clientId: "fakeclientid"}
}})
describe("with valid parameters", function() { with(this) {
before(function() { with(this) {
expect(engine, "clientExists").given(clientId).yielding([true])
}})
it("destroys the client", function() { with(this) {
expect(engine, "destroyClient").given(clientId)
server.disconnect(message, false, function() {})
}})
it("returns a successful response", function() { with(this) {
stub(engine, "destroyClient")
server.disconnect(message, false, function(response) {
assertEqual({
channel: "/meta/disconnect",
successful: true,
clientId: clientId
}, response)
})
}})
describe("with a message id", function() { with(this) {
before(function() { this.message.id = "foo" })
it("returns the same id", function() { with(this) {
stub(engine, "destroyClient")
server.disconnect(message, false, function(response) {
assertEqual({
channel: "/meta/disconnect",
successful: true,
clientId: clientId,
id: "foo"
}, response)
})
}})
}})
}})
describe("with an unknown client", function() { with(this) {
before(function() { with(this) {
expect(engine, "clientExists").given(clientId).yielding([false])
}})
it("does not destroy the client", function() { with(this) {
expect(engine, "destroyClient").exactly(0)
server.disconnect(message, false, function() {})
}})
it("returns an unsuccessful response", function() { with(this) {
stub(engine, "destroyClient")
server.disconnect(message, false, function(response) {
assertEqual({
channel: "/meta/disconnect",
successful: false,
error: "401:fakeclientid:Unknown client"
}, response)
})
}})
}})
describe("missing clientId", function() { with(this) {
before(function() { with(this) {
delete message.clientId
expect(engine, "clientExists").given(undefined).yielding([false])
}})
it("does not destroy the client", function() { with(this) {
expect(engine, "destroyClient").exactly(0)
server.disconnect(message, false, function() {})
}})
it("returns an unsuccessful response", function() { with(this) {
stub(engine, "destroyClient")
server.disconnect(message, false, function(response) {
assertEqual({
channel: "/meta/disconnect",
successful: false,
error: "402:clientId:Missing required parameter"
}, response)
})
}})
}})
describe("with an error", function() { with(this) {
before(function() { with(this) {
message.error = "invalid"
expect(engine, "clientExists").given(clientId).yielding([true])
}})
it("does not destroy the client", function() { with(this) {
expect(engine, "destroyClient").exactly(0)
server.disconnect(message, false, function() {})
}})
it("returns an unsuccessful response", function() { with(this) {
stub(engine, "destroyClient")
server.disconnect(message, false, function(response) {
assertEqual({
channel: "/meta/disconnect",
successful: false,
error: "invalid"
}, response)
})
}})
}})
}})
}})