UNPKG

4.67 kBtext/coffeescriptView Raw
1Freddy = require '../lib/freddy'
2TestHelper = require './test_helper'
3q = require 'q'
4
5describe 'Freddy', ->
6 logger = TestHelper.logger('warn')
7 msg = {test: 'data'}
8
9 describe '.connect', ->
10 context 'with correct amqp url', ->
11 it 'can connect to amqp', (done) ->
12 Freddy.connect(TestHelper.amqpUrl, logger).done ->
13 done()
14 , =>
15 done Error("Connection should have succeeded, but failed")
16
17 context 'with incorrect amqp url', ->
18 it 'cannot connect', (done) ->
19 Freddy.connect('amqp://wrong:wrong@localhost:9000', logger).done ->
20 done(Error("Connection should have failed, but succeeded"))
21 , =>
22 done()
23
24 context 'when connected', ->
25 beforeEach (done) ->
26 @randomDest = TestHelper.uniqueId()
27 Freddy.connect(TestHelper.amqpUrl, logger).done (@freddy) =>
28 done()
29 , (err) ->
30 done(err)
31
32 afterEach (done) ->
33 @freddy.shutdown().done ->
34 done()
35
36 it 'can send and receive messages', (done) ->
37 @freddy.respondTo @randomDest, (receivedMsg, handler) ->
38 expect(receivedMsg).to.eql(msg)
39 done()
40 .done =>
41 @freddy.deliver @randomDest, msg
42
43 it 'can catch errors', (done) ->
44 myError = new Error('catch me')
45 Freddy.addErrorListener (err) ->
46 err.should.eql(myError)
47 done()
48
49 @freddy.respondTo @randomDest, (message, msgHandler) ->
50 throw myError
51 .done =>
52 @freddy.deliver @randomDest, {}
53
54 it 'can handle success messages', (done) ->
55 @freddy.respondTo @randomDest, (payload, handler) ->
56 handler.success(pay: 'load')
57 .done =>
58 @freddy.deliver @randomDest, msg, (response) ->
59 expect(response).to.eql(pay: 'load')
60 done()
61 , (error) ->
62 done(Error('should have got success response'))
63
64 it 'can handle error messages', (done) ->
65 @freddy.respondTo @randomDest, (payload, handler) ->
66 handler.error(error: 'not today')
67 .done =>
68 @freddy.deliver @randomDest, msg, (response) ->
69 done(Error('should have got a error response'))
70 , (error) ->
71 expect(error).to.eql(error: 'not today')
72 done()
73
74 it 'requires a error callback when success is specified', (done) ->
75 try
76 @freddy.deliver @randomDest, msg, (response) ->
77 done(Error('should not happen'))
78 catch e
79 expect(e.message).to.eql('error callback is required')
80 done()
81
82 describe 'when tapping', ->
83 it "doesn't consume message", (done) ->
84 tapPromise = q.defer()
85 respondPromise = q.defer()
86 @freddy.tapInto @randomDest, =>
87 tapPromise.resolve()
88 .then =>
89 @freddy.respondTo @randomDest, =>
90 respondPromise.resolve()
91 .done =>
92 q.all([tapPromise, respondPromise]).then ->
93 done()
94 @freddy.deliver @randomDest, msg
95
96 context 'with send-and-forget message', ->
97 it 'removes the message from the queue when timeout specified', (done) ->
98 @freddy.consumer.channel.assertQueue(@randomDest, autoDelete: true).then =>
99 @freddy.deliver @randomDest, msg, timeout: 0.01
100
101 setTimeout =>
102 @freddy.respondTo @randomDest, (payload, handler) ->
103 done(Error('message was still in the queue'))
104 .done =>
105 setTimeout (-> done()), 20
106 , 60
107
108 it 'keeps the message in the queue when timeout is not specified', (done) ->
109 @freddy.consumer.channel.assertQueue(@randomDest, autoDelete: true).then =>
110 @freddy.deliver @randomDest, msg
111
112 setTimeout =>
113 @freddy.respondTo @randomDest, (payload, handler) -> done()
114 , 60
115
116 context 'with request message', ->
117 it 'removes the message from the queue when timeout occurs', (done) ->
118 @freddy.consumer.channel.assertQueue(@randomDest, autoDelete: true).then =>
119 @freddy.deliver @randomDest, msg, timeout: 0.01, (->), (->)
120
121 setTimeout =>
122 @freddy.respondTo @randomDest, (payload, handler) ->
123 done(Error('message was still in the queue'))
124 .done =>
125 setTimeout (-> done()), 20
126 , 60
127
128 it 'keeps the message in the queue when deleteOnTimeout is disabled', (done) ->
129 @freddy.consumer.channel.assertQueue(@randomDest, autoDelete: true).then =>
130 @freddy.deliver @randomDest, msg, timeout: 0.01, deleteOnTimeout: false, (->), (->)
131
132 setTimeout =>
133 @freddy.respondTo @randomDest, (payload, handler) -> done()
134 , 60