UNPKG

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