1 | Request = require '../lib/nodelib/request'
|
2 | Consumer = require '../lib/nodelib/consumer'
|
3 | Producer = require '../lib/nodelib/producer'
|
4 | TestHelper = (require './test_helper')
|
5 |
|
6 | describe 'Request', ->
|
7 |
|
8 | before ->
|
9 | @topicName = 'test-topic'
|
10 |
|
11 | beforeEach ->
|
12 | @options = {}
|
13 | @message = 'test'
|
14 |
|
15 | beforeEach (done) ->
|
16 | TestHelper.connect().done (@connection) =>
|
17 | @producer = new Producer connection, TestHelper.logger('warn')
|
18 | @consumer = new Consumer connection, TestHelper.logger('warn')
|
19 | @producer.prepare(@topicName)
|
20 | .then =>
|
21 | @consumer.prepare(@topicName)
|
22 | .done =>
|
23 | @request = new Request connection, TestHelper.logger('warn')
|
24 | done()
|
25 |
|
26 | afterEach (done) ->
|
27 | TestHelper.deleteExchange(@connection, @topicName)
|
28 | .then =>
|
29 | @connection.close()
|
30 | .done ->
|
31 | done()
|
32 |
|
33 | context '#prepare', ->
|
34 | it 'resolves after done', (done) ->
|
35 | @request.prepare(@consumer, @producer).done ->
|
36 | done()
|
37 | , =>
|
38 | done Error("Prepare should have succeeded but failed")
|
39 |
|
40 | context 'when prepared', ->
|
41 | beforeEach (done) ->
|
42 | @request.prepare(@consumer, @producer).done ->
|
43 | done()
|
44 |
|
45 | context '#deliverWithAckAndOptions', ->
|
46 | before ->
|
47 | @destination = 'ack-test'
|
48 | @subject = =>
|
49 | @request.deliverWithAckAndOptions @destination, @message, @options, @callback
|
50 |
|
51 | it 'returns error if message was neither acked nor nacked', (done) ->
|
52 | @options = timeout: 0.01
|
53 | @callback = (error) =>
|
54 | error.should.eql("Timeout waiting for response")
|
55 | done()
|
56 | @subject()
|
57 |
|
58 | context 'when message was acked', ->
|
59 | beforeEach (done) ->
|
60 | @request.respondTo @destination, (message, msgHandler) ->
|
61 | msgHandler.ack()
|
62 | .done -> done()
|
63 |
|
64 | it 'responds with null', (done) ->
|
65 | @callback = (error) ->
|
66 | error.should.be.nil
|
67 | done()
|
68 | @subject()
|
69 |
|
70 | context 'when message was nacked', ->
|
71 | before -> @error = 'no bueno'
|
72 |
|
73 | beforeEach (done) ->
|
74 | @request.respondTo @destination, (message, msgHandler) =>
|
75 | msgHandler.nack(@error)
|
76 | .done -> done()
|
77 |
|
78 | it 'responds with error', (done) ->
|
79 | @callback = (error) =>
|
80 | error.should.eql(@error)
|
81 | done()
|
82 | @subject()
|
83 |
|
84 | context '#deliverWithResponseAndOptions', ->
|
85 | beforeEach ->
|
86 | @destination = 'response-test'
|
87 | @subject = =>
|
88 | @request.deliverWithResponseAndOptions @destination, @message, @options, @callback
|
89 |
|
90 | context 'when message was acked', ->
|
91 | before -> @message = test: 'data'
|
92 | beforeEach (done) ->
|
93 | @request.respondTo @destination, (message, msgHandler) =>
|
94 | msgHandler.ack(@message)
|
95 | .done -> done()
|
96 |
|
97 | it 'returns response', (done) ->
|
98 | @callback = (message) =>
|
99 | message.should.eql(@message)
|
100 | done()
|
101 | @subject()
|
102 |
|
103 | context 'when message was nacked', ->
|
104 | before -> @error = test: 'data'
|
105 | beforeEach (done) ->
|
106 | @request.respondTo @destination, (message, msgHandler) =>
|
107 | msgHandler.nack(@error)
|
108 | .done -> done()
|
109 |
|
110 | it 'returns error', (done) ->
|
111 | @callback = (message) =>
|
112 | message.error.should.eql(@error)
|
113 | done()
|
114 | @subject()
|