stomp.spec.coffee 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. Stomp = require('../../lib/stomp.js').Stomp
  2. StompServerMock = require('./server.mock.js').StompServerMock
  3. Stomp.WebSocketClass = StompServerMock
  4. describe "Stomp", ->
  5. it "lets you connect to a server with a websocket and get a callback", ->
  6. ws = new StompServerMock("ws://mocked/stomp/server")
  7. client = Stomp.over(ws)
  8. connected = false
  9. client.connect("guest", "guest", ->
  10. connected = true
  11. )
  12. waitsFor -> connected
  13. runs -> expect(client.connected).toBe(true)
  14. it "lets you connect to a server and get a callback", ->
  15. client = Stomp.client("ws://mocked/stomp/server")
  16. connected = false
  17. client.connect("guest", "guest", ->
  18. connected = true
  19. )
  20. waitsFor -> connected
  21. runs -> expect(client.connected).toBe(true)
  22. it "lets you subscribe to a destination", ->
  23. client = Stomp.client("ws://mocked/stomp/server")
  24. subscription = null
  25. client.connect("guest", "guest", ->
  26. subscription = client.subscribe("/queue/test")
  27. )
  28. waitsFor -> subscription
  29. runs -> expect(Object.keys(client.ws.subscriptions)).toContain(subscription.id)
  30. it "lets you publish a message to a destination", ->
  31. client = Stomp.client("ws://mocked/stomp/server")
  32. message = null
  33. client.connect("guest", "guest", ->
  34. message = "Hello world!"
  35. client.send("/queue/test", {}, message)
  36. )
  37. waitsFor -> message
  38. runs -> expect(client.ws.messages.pop().toString()).toContain(message)
  39. it "lets you unsubscribe from a destination", ->
  40. client = Stomp.client("ws://mocked/stomp/server")
  41. unsubscribed = false
  42. subscription = null
  43. client.connect("guest", "guest", ->
  44. subscription = client.subscribe("/queue/test")
  45. subscription.unsubscribe()
  46. unsubscribed = true
  47. )
  48. waitsFor -> unsubscribed
  49. runs -> expect(Object.keys(client.ws.subscriptions)).not.toContain(subscription.id)
  50. it "lets you receive messages only while subscribed", ->
  51. client = Stomp.client("ws://mocked/stomp/server")
  52. subscription = null
  53. messages = []
  54. client.connect("guest", "guest", ->
  55. subscription = client.subscribe("/queue/test", (msg) ->
  56. messages.push(msg)
  57. )
  58. )
  59. waitsFor -> subscription
  60. runs ->
  61. client.ws.test_send(subscription.id, Math.random())
  62. client.ws.test_send(subscription.id, Math.random())
  63. expect(messages.length).toEqual(2)
  64. subscription.unsubscribe()
  65. try
  66. client.ws.test_send(id, Math.random())
  67. catch err
  68. null
  69. expect(messages.length).toEqual(2)
  70. it "lets you send messages in a transaction", ->
  71. client = Stomp.client("ws://mocked/stomp/server")
  72. connected = false
  73. client.connect("guest", "guest", ->
  74. connected = true
  75. )
  76. waitsFor -> connected
  77. runs ->
  78. txid = "123"
  79. client.begin(txid)
  80. client.send("/queue/test", {transaction: txid}, "messages 1")
  81. client.send("/queue/test", {transaction: txid}, "messages 2")
  82. expect(client.ws.messages.length).toEqual(0)
  83. client.send("/queue/test", {transaction: txid}, "messages 3")
  84. client.commit(txid)
  85. expect(client.ws.messages.length).toEqual(3)
  86. it "lets you abort a transaction", ->
  87. client = Stomp.client("ws://mocked/stomp/server")
  88. connected = false
  89. client.connect("guest", "guest", ->
  90. connected = true
  91. )
  92. waitsFor -> connected
  93. runs ->
  94. txid = "123"
  95. client.begin(txid)
  96. client.send("/queue/test", {transaction: txid}, "messages 1")
  97. client.send("/queue/test", {transaction: txid}, "messages 2")
  98. expect(client.ws.messages.length).toEqual(0)
  99. client.send("/queue/test", {transaction: txid}, "messages 3")
  100. client.abort(txid)
  101. expect(client.ws.messages.length).toEqual(0)