1 | q = require 'q'
|
2 | Consumer = require '../lib/freddy/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 | beforeEach ->
|
34 | @queue = "consumer-test-queue.#{Math.random()*100}"
|
35 | @msg = test: 'data'
|
36 |
|
37 | afterEach (done) ->
|
38 | @connection.createChannel({
|
39 | setup: (amqpChannel) =>
|
40 | amqpChannel.deleteQueue(@queue)
|
41 | done()
|
42 | })
|
43 |
|
44 | it 'resolves when done', (done) ->
|
45 | @consumer.consume(@queue, (->)).then ->
|
46 | done()
|
47 |
|
48 | it 'receives the correct message', (done) ->
|
49 | @consumer.consume @queue, (message) =>
|
50 | message.should.eql(@msg)
|
51 | done()
|
52 | .done =>
|
53 | TestHelper.deliver(@connection, @queue, @topicName, @msg)
|
54 |
|
55 | context '#responderHandler', ->
|
56 | beforeEach (done) ->
|
57 | @receivedMessages = 0
|
58 | @consumer.consume @queue, =>
|
59 | @receivedMessages += 1
|
60 | .done (@responderHandler) =>
|
61 | done()
|
62 |
|
63 | it 'has the queue', ->
|
64 | @responderHandler.queue.should.eql(@queue)
|
65 |
|
66 | it 'can cancel consuming', (done) ->
|
67 | TestHelper.deliver(@connection, @queue, @topicName, @msg)
|
68 | q.delay(25)
|
69 | .then =>
|
70 | @responderHandler.cancel()
|
71 | .then =>
|
72 | TestHelper.deliver(@connection, @queue, @topicName, @msg)
|
73 | q.delay(25)
|
74 | .done =>
|
75 | @receivedMessages.should.eql(1)
|
76 | done()
|
77 |
|
78 | context '#tapInto', ->
|
79 | before ->
|
80 | @queue = "test.mix.best.#{Math.random()*100}"
|
81 | @msg = test: 'data'
|
82 |
|
83 | afterEach (done) ->
|
84 | @responderHandler.cancel().then =>
|
85 | done()
|
86 |
|
87 | it 'receives messages by * wildcard', (done) ->
|
88 | @consumer.tapInto 'test.*.best.#', (message) =>
|
89 | message.should.eql(@msg)
|
90 | done()
|
91 | .done (@responderHandler) =>
|
92 | TestHelper.deliver @connection, @queue, @topicName, @msg
|
93 |
|
94 | it 'receives messages by # wildcard', (done) ->
|
95 | @consumer.tapInto '#.best.#', (message) =>
|
96 | message.should.eql(@msg)
|
97 | done()
|
98 | .done (@responderHandler) =>
|
99 | TestHelper.deliver @connection, @queue, @topicName, @msg
|
100 |
|
101 | it 'has the destination', (done) ->
|
102 | @consumer.tapInto '#', (message, destination) =>
|
103 | destination.should.eql(@queue)
|
104 | done()
|
105 | .done (@responderHandler) =>
|
106 | return q(TestHelper.deliver @connection, @queue, @topicName, msg: 'yes')
|