1 | q = require 'q'
|
2 | Consumer = require '../lib/nodelib/consumer'
|
3 | TestHelper = (require './test_helper')
|
4 |
|
5 | describe 'Consumer', ->
|
6 |
|
7 | before ->
|
8 | @topicName = 'consumer-test-topic'
|
9 |
|
10 | beforeEach (done) ->
|
11 | TestHelper.connect().done (@connection) =>
|
12 | @consumer = new Consumer(connection, TestHelper.logger('warn'))
|
13 | done()
|
14 |
|
15 | after (done) ->
|
16 | TestHelper.deleteExchange(@connection, @topicName)
|
17 | .then =>
|
18 | @connection.close()
|
19 | .done ->
|
20 | done()
|
21 |
|
22 | context '#prepare', ->
|
23 | it 'resolves when done', (done) ->
|
24 | @consumer.prepare(@topicName).then ->
|
25 | done()
|
26 |
|
27 | context 'when prepared', ->
|
28 | beforeEach (done) ->
|
29 | @consumer.prepare(@topicName).then ->
|
30 | done()
|
31 |
|
32 | context '#consume', ->
|
33 | before ->
|
34 | @queue = "consumer-test-queue.#{Math.random()*100}"
|
35 | @msg = test: 'data'
|
36 |
|
37 | afterEach (done) ->
|
38 | @connection.createChannel().then (channel) =>
|
39 | channel.deleteQueue(@queue)
|
40 | done()
|
41 |
|
42 | it 'resolves when done', (done) ->
|
43 | @consumer.consume(@queue, (->)).then ->
|
44 | done()
|
45 |
|
46 | it 'receives the correct message', (done) ->
|
47 | @consumer.consume @queue, (message) =>
|
48 | message.should.eql(@msg)
|
49 | done()
|
50 | .done =>
|
51 | TestHelper.deliver(@connection, @queue, @topicName, @msg)
|
52 |
|
53 | context '#responderHandler', ->
|
54 | beforeEach (done) ->
|
55 | @receivedMessages = 0
|
56 | @consumer.consume @queue, =>
|
57 | @receivedMessages += 1
|
58 | .done (@responderHandler) =>
|
59 | done()
|
60 |
|
61 | it 'has the queue', ->
|
62 | @responderHandler.queue.should.eql(@queue)
|
63 |
|
64 | it 'can cancel consuming', (done) ->
|
65 | TestHelper.deliver(@connection, @queue, @topicName, @msg)
|
66 | q.delay(5)
|
67 | .then =>
|
68 | @responderHandler.cancel()
|
69 | .then =>
|
70 | TestHelper.deliver(@connection, @queue, @topicName, @msg)
|
71 | q.delay(5)
|
72 | .done =>
|
73 | @receivedMessages.should.eql(1)
|
74 | done()
|
75 |
|
76 | context '#tapInto', ->
|
77 | before -> @queue = "test.mix.best.#{Math.random()*100}"
|
78 |
|
79 | afterEach (done) ->
|
80 | @responderHandler.cancel().then =>
|
81 | done()
|
82 |
|
83 | it 'receives messages by * wildcard', (done) ->
|
84 | @consumer.tapInto 'test.*.best.#', (message) =>
|
85 | message.should.eql(@msg)
|
86 | done()
|
87 | .done (@responderHandler) =>
|
88 | TestHelper.deliver @connection, @queue, @topicName, @msg
|
89 |
|
90 | it 'receives messages by # wildcard', (done) ->
|
91 | @consumer.tapInto '#.best.#', (message) =>
|
92 | message.should.eql(@msg)
|
93 | done()
|
94 | .done (@responderHandler) =>
|
95 | TestHelper.deliver @connection, @queue, @topicName, @msg
|
96 |
|
97 | it 'has the destination', (done) ->
|
98 | @consumer.tapInto '#', (message, destination) =>
|
99 | destination.should.eql(@queue)
|
100 | done()
|
101 | .done (@responderHandler) =>
|
102 | return q(TestHelper.deliver @connection, @queue, @topicName, msg: 'yes') |
\ | No newline at end of file |