Stomp = require('../../lib/stomp.js').Stomp StompServerMock = require('./server.mock.js').StompServerMock Stomp.WebSocketClass = StompServerMock describe "Stomp", -> it "lets you connect to a server with a websocket and get a callback", -> ws = new StompServerMock("ws://mocked/stomp/server") client = Stomp.over(ws) connected = false client.connect("guest", "guest", -> connected = true ) waitsFor -> connected runs -> expect(client.connected).toBe(true) it "lets you connect to a server and get a callback", -> client = Stomp.client("ws://mocked/stomp/server") connected = false client.connect("guest", "guest", -> connected = true ) waitsFor -> connected runs -> expect(client.connected).toBe(true) it "lets you subscribe to a destination", -> client = Stomp.client("ws://mocked/stomp/server") subscription = null client.connect("guest", "guest", -> subscription = client.subscribe("/queue/test") ) waitsFor -> subscription runs -> expect(Object.keys(client.ws.subscriptions)).toContain(subscription.id) it "lets you publish a message to a destination", -> client = Stomp.client("ws://mocked/stomp/server") message = null client.connect("guest", "guest", -> message = "Hello world!" client.send("/queue/test", {}, message) ) waitsFor -> message runs -> expect(client.ws.messages.pop().toString()).toContain(message) it "lets you unsubscribe from a destination", -> client = Stomp.client("ws://mocked/stomp/server") unsubscribed = false subscription = null client.connect("guest", "guest", -> subscription = client.subscribe("/queue/test") subscription.unsubscribe() unsubscribed = true ) waitsFor -> unsubscribed runs -> expect(Object.keys(client.ws.subscriptions)).not.toContain(subscription.id) it "lets you receive messages only while subscribed", -> client = Stomp.client("ws://mocked/stomp/server") subscription = null messages = [] client.connect("guest", "guest", -> subscription = client.subscribe("/queue/test", (msg) -> messages.push(msg) ) ) waitsFor -> subscription runs -> client.ws.test_send(subscription.id, Math.random()) client.ws.test_send(subscription.id, Math.random()) expect(messages.length).toEqual(2) subscription.unsubscribe() try client.ws.test_send(id, Math.random()) catch err null expect(messages.length).toEqual(2) it "lets you send messages in a transaction", -> client = Stomp.client("ws://mocked/stomp/server") connected = false client.connect("guest", "guest", -> connected = true ) waitsFor -> connected runs -> txid = "123" client.begin(txid) client.send("/queue/test", {transaction: txid}, "messages 1") client.send("/queue/test", {transaction: txid}, "messages 2") expect(client.ws.messages.length).toEqual(0) client.send("/queue/test", {transaction: txid}, "messages 3") client.commit(txid) expect(client.ws.messages.length).toEqual(3) it "lets you abort a transaction", -> client = Stomp.client("ws://mocked/stomp/server") connected = false client.connect("guest", "guest", -> connected = true ) waitsFor -> connected runs -> txid = "123" client.begin(txid) client.send("/queue/test", {transaction: txid}, "messages 1") client.send("/queue/test", {transaction: txid}, "messages 2") expect(client.ws.messages.length).toEqual(0) client.send("/queue/test", {transaction: txid}, "messages 3") client.abort(txid) expect(client.ws.messages.length).toEqual(0)