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 |
|
47 | before ->
|
48 | @destination = 'ack-test'
|
49 | @subject = (callback) =>
|
50 | @request.deliverWithAckAndOptions @destination, @message, @options, callback
|
51 |
|
52 | it 'returns error if message was neither acked nor nacked', (done) ->
|
53 | @options = timeout: 0.01
|
54 | callback = (error) =>
|
55 | error.should.eql("Timeout waiting for response")
|
56 | done()
|
57 | @subject(callback)
|
58 |
|
59 | context 'when message was acked', ->
|
60 | beforeEach (done) ->
|
61 | @request.respondTo @destination, (message, msgHandler) ->
|
62 | msgHandler.ack()
|
63 | .done -> done()
|
64 |
|
65 | it 'responds with null', (done) ->
|
66 | callback = (error) ->
|
67 | error.should.be.nil
|
68 | done()
|
69 | @subject(callback)
|
70 |
|
71 | context 'when message was nacked', ->
|
72 | before -> @error = 'no bueno'
|
73 |
|
74 | beforeEach (done) ->
|
75 | @request.respondTo @destination, (message, msgHandler) =>
|
76 | msgHandler.nack(@error)
|
77 | .done -> done()
|
78 |
|
79 | it 'responds with error', (done) ->
|
80 | callback = (error) =>
|
81 | error.should.eql(@error)
|
82 | done()
|
83 | @subject(callback)
|
84 |
|
85 | context '#deliverWithResponseAndOptions', ->
|
86 | beforeEach ->
|
87 | @destination = 'response-test'
|
88 | @subject = (callback) =>
|
89 | @request.deliverWithResponseAndOptions @destination, @message, @options, callback
|
90 |
|
91 | context 'when message was acked', ->
|
92 | before -> @message = test: 'data'
|
93 | beforeEach (done) ->
|
94 | @request.respondTo @destination, (message, msgHandler) =>
|
95 | msgHandler.ack(@message)
|
96 | .done -> done()
|
97 |
|
98 | it 'returns response', (done) ->
|
99 | callback = (message) =>
|
100 | message.should.eql(@message)
|
101 | done()
|
102 | @subject(callback)
|
103 |
|
104 | context 'when message was nacked', ->
|
105 | before -> @error = test: 'data'
|
106 | beforeEach (done) ->
|
107 | @request.respondTo @destination, (message, msgHandler) =>
|
108 | msgHandler.nack(@error)
|
109 | .done -> done()
|
110 |
|
111 | it 'returns error', (done) ->
|
112 | callback = (message) =>
|
113 | message.error.should.eql(@error)
|
114 | done()
|
115 | @subject(callback)
|