adhearsion 2.3.0 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +1 -1
- data/README.markdown +2 -2
- data/adhearsion.gemspec +0 -1
- data/lib/adhearsion/punchblock_plugin/initializer.rb +1 -1
- data/lib/adhearsion/version.rb +1 -1
- data/spec/adhearsion/call_controller/dial_spec.rb +56 -57
- data/spec/adhearsion/call_controller/input_spec.rb +11 -16
- data/spec/adhearsion/call_controller/menu_dsl/menu_builder_spec.rb +6 -6
- data/spec/adhearsion/call_controller/menu_dsl/menu_spec.rb +10 -10
- data/spec/adhearsion/call_controller/output/async_player_spec.rb +3 -3
- data/spec/adhearsion/call_controller/output/player_spec.rb +1 -1
- data/spec/adhearsion/call_controller/output_spec.rb +2 -7
- data/spec/adhearsion/call_controller/record_spec.rb +11 -18
- data/spec/adhearsion/call_controller_spec.rb +35 -35
- data/spec/adhearsion/call_spec.rb +49 -35
- data/spec/adhearsion/calls_spec.rb +2 -2
- data/spec/adhearsion/console_spec.rb +22 -23
- data/spec/adhearsion/events_spec.rb +3 -3
- data/spec/adhearsion/initializer_spec.rb +33 -35
- data/spec/adhearsion/logging_spec.rb +3 -3
- data/spec/adhearsion/outbound_call_spec.rb +21 -19
- data/spec/adhearsion/plugin_spec.rb +9 -11
- data/spec/adhearsion/process_spec.rb +15 -14
- data/spec/adhearsion/punchblock_plugin/initializer_spec.rb +37 -42
- data/spec/adhearsion/punchblock_plugin_spec.rb +2 -2
- data/spec/adhearsion/router/evented_route_spec.rb +1 -1
- data/spec/adhearsion/router/openended_route_spec.rb +5 -5
- data/spec/adhearsion/router/route_spec.rb +9 -9
- data/spec/adhearsion/router/unaccepting_route_spec.rb +6 -6
- data/spec/adhearsion/router_spec.rb +8 -8
- data/spec/adhearsion/statistics_spec.rb +1 -1
- data/spec/adhearsion_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -2
- data/spec/support/call_controller_test_helpers.rb +11 -8
- data/spec/support/initializer_stubs.rb +1 -1
- data/spec/support/punchblock_mocks.rb +3 -2
- metadata +2 -16
@@ -9,7 +9,7 @@ module Adhearsion
|
|
9
9
|
describe AsyncPlayer do
|
10
10
|
include CallControllerTestHelpers
|
11
11
|
|
12
|
-
let(:controller) {
|
12
|
+
let(:controller) { new_controller }
|
13
13
|
|
14
14
|
subject { AsyncPlayer.new controller }
|
15
15
|
|
@@ -43,9 +43,9 @@ module Adhearsion
|
|
43
43
|
response = Punchblock::Event::Complete.new
|
44
44
|
response.reason = Punchblock::Event::Complete::Error.new
|
45
45
|
component = Punchblock::Component::Output.new(:ssml => content)
|
46
|
-
|
46
|
+
subject.stub :new_output => component
|
47
47
|
expect_message_waiting_for_response component
|
48
|
-
|
48
|
+
controller.logger.should_receive(:error).once
|
49
49
|
subject.output content
|
50
50
|
component.request!
|
51
51
|
component.execute!
|
@@ -692,12 +692,7 @@ module Adhearsion
|
|
692
692
|
}
|
693
693
|
|
694
694
|
def expect_component_complete_event
|
695
|
-
|
696
|
-
flexmock(complete_event).should_receive(:reason => flexmock(:utterance => 'dtmf-5'))
|
697
|
-
flexmock(Punchblock::Component::Input).new_instances do |input|
|
698
|
-
input.should_receive(:complete?).and_return(false)
|
699
|
-
input.should_receive(:complete_event).and_return(complete_event)
|
700
|
-
end
|
695
|
+
expect_input_component_complete_event 'dtmf-5'
|
701
696
|
end
|
702
697
|
|
703
698
|
#test does pass and method works, but not sure if the empty method is a good idea
|
@@ -717,7 +712,7 @@ module Adhearsion
|
|
717
712
|
end
|
718
713
|
|
719
714
|
expect_component_complete_event
|
720
|
-
|
715
|
+
Punchblock::Component::Output.any_instance.should_receive(:stop!)
|
721
716
|
expect_component_execution output_component
|
722
717
|
subject.stream_file(prompt, allowed_digits).should be == '5'
|
723
718
|
end
|
@@ -101,7 +101,7 @@ module Adhearsion
|
|
101
101
|
end
|
102
102
|
|
103
103
|
it "stops the recording" do
|
104
|
-
|
104
|
+
subject.record_component.should_receive(:stop!).once
|
105
105
|
subject.stopper_component.trigger_event_handler complete_event
|
106
106
|
end
|
107
107
|
end
|
@@ -110,7 +110,7 @@ module Adhearsion
|
|
110
110
|
it "stops the input component" do
|
111
111
|
controller.should_receive(:execute_component_and_await_completion).once.with(component)
|
112
112
|
controller.should_receive(:write_and_await_response).once.with(input_component)
|
113
|
-
|
113
|
+
subject.stopper_component.should_receive(:stop!).once
|
114
114
|
subject.run
|
115
115
|
end
|
116
116
|
end
|
@@ -139,8 +139,8 @@ module Adhearsion
|
|
139
139
|
let(:complete_event) { Punchblock::Event::Complete.new }
|
140
140
|
|
141
141
|
it "should execute those handlers when recording completes" do
|
142
|
-
foo =
|
143
|
-
foo.should_receive(:call).once.with Punchblock::Event::Complete
|
142
|
+
foo = mock 'foo'
|
143
|
+
foo.should_receive(:call).once.with kind_of(Punchblock::Event::Complete)
|
144
144
|
subject.handle_record_completion { |e| foo.call e }
|
145
145
|
subject.record_component.trigger_event_handler complete_event
|
146
146
|
end
|
@@ -164,7 +164,7 @@ module Adhearsion
|
|
164
164
|
describe "with :async => true and an :on_complete callback" do
|
165
165
|
before do
|
166
166
|
component
|
167
|
-
|
167
|
+
Punchblock::Component::Record.should_receive(:new).once.with(parsed_options).and_return component
|
168
168
|
expect_message_waiting_for_response component
|
169
169
|
@rec = Queue.new
|
170
170
|
subject.record(options.merge(async: true)) { |rec| @rec.push rec }
|
@@ -184,7 +184,7 @@ module Adhearsion
|
|
184
184
|
before do
|
185
185
|
TestException = Class.new StandardError
|
186
186
|
component
|
187
|
-
|
187
|
+
Punchblock::Component::Record.should_receive(:new).once.with({}).and_return component
|
188
188
|
end
|
189
189
|
|
190
190
|
it "should pass the exception to the events system" do
|
@@ -207,7 +207,7 @@ module Adhearsion
|
|
207
207
|
describe "with :async => false" do
|
208
208
|
before do
|
209
209
|
component
|
210
|
-
|
210
|
+
Punchblock::Component::Record.should_receive(:new).once.with(parsed_options).and_return component
|
211
211
|
expect_component_execution component
|
212
212
|
@rec = Queue.new
|
213
213
|
subject.record(options.merge(:async => false)) { |rec| @rec.push rec }
|
@@ -233,21 +233,14 @@ module Adhearsion
|
|
233
233
|
end
|
234
234
|
|
235
235
|
describe "with :interruptible => true" do
|
236
|
-
let(:input_component) { Punchblock::Component::Input.new }
|
237
236
|
it "stops the recording" do
|
238
|
-
flexmock(Punchblock::Event::Complete).new_instances.should_receive(:reason => flexmock(:name => :input))
|
239
|
-
|
240
237
|
def subject.write_and_await_response(input_component)
|
241
238
|
input_component.trigger_event_handler Punchblock::Event::Complete.new
|
242
239
|
end
|
243
240
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
input.should_receive(:complete?).and_return(true)
|
248
|
-
input.should_receive(:complete_event).and_return(complete_event)
|
249
|
-
end
|
250
|
-
flexmock(Punchblock::Component::Record).new_instances.should_receive(:stop!)
|
241
|
+
expect_input_component_complete_event 'dtmf-5'
|
242
|
+
|
243
|
+
Punchblock::Component::Record.any_instance.should_receive(:stop!)
|
251
244
|
subject.should_receive(:execute_component_and_await_completion).once.with(component)
|
252
245
|
subject.record(options.merge(:async => false, :interruptible => true)) { |rec| @rec.push rec }
|
253
246
|
end
|
@@ -257,7 +250,7 @@ module Adhearsion
|
|
257
250
|
describe "check for the return value" do
|
258
251
|
it "returns a Record component" do
|
259
252
|
component
|
260
|
-
|
253
|
+
Punchblock::Component::Record.should_receive(:new).once.with(parsed_options).and_return component
|
261
254
|
expect_component_execution component
|
262
255
|
subject.record(options.merge(:async => false)).should be == component
|
263
256
|
component.request!
|
@@ -30,18 +30,18 @@ module Adhearsion
|
|
30
30
|
|
31
31
|
describe "execution on a call" do
|
32
32
|
before do
|
33
|
-
|
34
|
-
|
33
|
+
subject.stub :execute_component_and_await_completion => nil
|
34
|
+
call.wrapped_object.stub :write_and_await_response => nil
|
35
35
|
end
|
36
36
|
|
37
37
|
it "catches Hangup exceptions and logs the hangup" do
|
38
|
-
subject.should_receive(:run).once.and_raise(Call::Hangup)
|
39
|
-
|
38
|
+
subject.should_receive(:run).once.ordered.and_raise(Call::Hangup)
|
39
|
+
subject.logger.should_receive(:info).once.with(/Call was hung up/).ordered
|
40
40
|
subject.execute!
|
41
41
|
end
|
42
42
|
|
43
43
|
it "catches standard errors, triggering an exception event" do
|
44
|
-
subject.should_receive(:run).once.and_raise(StandardError)
|
44
|
+
subject.should_receive(:run).once.ordered.and_raise(StandardError)
|
45
45
|
latch = CountDownLatch.new 1
|
46
46
|
ex = lo = nil
|
47
47
|
Events.exception do |e, l|
|
@@ -62,7 +62,7 @@ module Adhearsion
|
|
62
62
|
its(:block) { should be block }
|
63
63
|
|
64
64
|
it "should execute the block in the context of the controller" do
|
65
|
-
|
65
|
+
subject.stub :value => :bar
|
66
66
|
subject.should_receive(:foo).once.with(:bar)
|
67
67
|
subject.run
|
68
68
|
end
|
@@ -112,10 +112,10 @@ module Adhearsion
|
|
112
112
|
subject { InvokeController.new call }
|
113
113
|
|
114
114
|
before do
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
115
|
+
subject.stub :execute_component_and_await_completion => nil
|
116
|
+
call.wrapped_object.stub :write_and_await_response => nil
|
117
|
+
call.stub :register_controller => nil
|
118
|
+
Events.should_receive(:trigger).with(:exception, Exception).never
|
119
119
|
end
|
120
120
|
|
121
121
|
it "should invoke another controller before returning to the current controller" do
|
@@ -127,13 +127,13 @@ module Adhearsion
|
|
127
127
|
end
|
128
128
|
|
129
129
|
it "should return the outer controller's run method return value" do
|
130
|
-
|
130
|
+
SecondController.any_instance.should_receive(:run).once.and_return(:run_result)
|
131
131
|
subject.execute!
|
132
132
|
subject.metadata[:invoke_result].should be == :run_result
|
133
133
|
end
|
134
134
|
|
135
135
|
it "should invoke the new controller with metadata" do
|
136
|
-
|
136
|
+
SecondController.any_instance.should_receive(:md_check).once.with :foo => 'bar'
|
137
137
|
subject.execute!
|
138
138
|
end
|
139
139
|
|
@@ -171,11 +171,11 @@ module Adhearsion
|
|
171
171
|
subject { PassController.new call }
|
172
172
|
|
173
173
|
before do
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
174
|
+
call.wrapped_object.stub :write_and_await_response => nil
|
175
|
+
call.stub :register_controller => nil
|
176
|
+
subject.stub :execute_component_and_await_completion => nil
|
177
|
+
SecondController.any_instance.should_receive(:md_check).once.with :foo => 'bar'
|
178
|
+
Events.should_receive(:trigger).with(:exception, Exception).never
|
179
179
|
end
|
180
180
|
|
181
181
|
it "should cease execution of the current controller, and instruct the call to execute another" do
|
@@ -199,8 +199,8 @@ module Adhearsion
|
|
199
199
|
let(:message) { Punchblock::Command::Accept.new }
|
200
200
|
|
201
201
|
it "delegates to the call, blocking first until it is allowed to execute" do
|
202
|
-
|
203
|
-
|
202
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
203
|
+
subject.call.should_receive(:write_and_await_response).once.ordered.with(message)
|
204
204
|
subject.write_and_await_response message
|
205
205
|
end
|
206
206
|
end
|
@@ -211,8 +211,8 @@ module Adhearsion
|
|
211
211
|
:unmute].each do |method_name|
|
212
212
|
describe "##{method_name}" do
|
213
213
|
it "delegates to the call, blocking first until it is allowed to execute" do
|
214
|
-
|
215
|
-
|
214
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
215
|
+
subject.call.should_receive(method_name).once.ordered
|
216
216
|
subject.send method_name
|
217
217
|
end
|
218
218
|
end
|
@@ -220,16 +220,16 @@ module Adhearsion
|
|
220
220
|
|
221
221
|
describe "#hangup" do
|
222
222
|
it "delegates to the call, blocking first until it is allowed to execute" do
|
223
|
-
|
224
|
-
|
223
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
224
|
+
subject.call.should_receive(:hangup).once.ordered
|
225
225
|
lambda { subject.send :hangup }.should raise_error Call::Hangup
|
226
226
|
end
|
227
227
|
end
|
228
228
|
|
229
229
|
describe "#join" do
|
230
230
|
it "delegates to the call, blocking first until it is allowed to execute, and unblocking when an unjoined event is received" do
|
231
|
-
|
232
|
-
|
231
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
232
|
+
subject.call.should_receive(:join).once.with('call1', :foo => :bar).ordered.and_return Punchblock::Command::Join.new(:call_id => 'call1')
|
233
233
|
latch = CountDownLatch.new 1
|
234
234
|
Thread.new do
|
235
235
|
subject.join 'call1', :foo => :bar
|
@@ -244,8 +244,8 @@ module Adhearsion
|
|
244
244
|
|
245
245
|
context "with a mixer" do
|
246
246
|
it "delegates to the call, blocking first until it is allowed to execute, and unblocking when an unjoined event is received" do
|
247
|
-
|
248
|
-
|
247
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
248
|
+
subject.call.should_receive(:join).once.with({:mixer_name => 'foobar', :foo => :bar}, {}).ordered.and_return Punchblock::Command::Join.new(:mixer_name => 'foobar')
|
249
249
|
latch = CountDownLatch.new 1
|
250
250
|
Thread.new do
|
251
251
|
subject.join :mixer_name => 'foobar', :foo => :bar
|
@@ -261,8 +261,8 @@ module Adhearsion
|
|
261
261
|
|
262
262
|
context "with :async => true" do
|
263
263
|
it "delegates to the call, blocking first until it is allowed to execute, and unblocking when the joined event is received" do
|
264
|
-
|
265
|
-
|
264
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
265
|
+
subject.call.should_receive(:join).once.with('call1', :foo => :bar).ordered.and_return Punchblock::Command::Join.new(:call_id => 'call1')
|
266
266
|
latch = CountDownLatch.new 1
|
267
267
|
Thread.new do
|
268
268
|
subject.join 'call1', :foo => :bar, :async => true
|
@@ -275,8 +275,8 @@ module Adhearsion
|
|
275
275
|
|
276
276
|
context "with a mixer" do
|
277
277
|
it "delegates to the call, blocking first until it is allowed to execute, and unblocking when the joined event is received" do
|
278
|
-
|
279
|
-
|
278
|
+
subject.should_receive(:block_until_resumed).once.ordered
|
279
|
+
subject.call.should_receive(:join).once.with({:mixer_name => 'foobar', :foo => :bar}, {}).ordered.and_return Punchblock::Command::Join.new(:mixer_name => 'foobar')
|
280
280
|
latch = CountDownLatch.new 1
|
281
281
|
Thread.new do
|
282
282
|
subject.join :mixer_name => 'foobar', :foo => :bar, :async => true
|
@@ -414,8 +414,8 @@ describe ExampleCallController do
|
|
414
414
|
include CallControllerTestHelpers
|
415
415
|
|
416
416
|
before do
|
417
|
-
|
418
|
-
|
417
|
+
subject.stub :execute_component_and_await_completion => nil
|
418
|
+
call.wrapped_object.stub :write_and_await_response => nil
|
419
419
|
end
|
420
420
|
|
421
421
|
it "should execute the before_call callbacks before processing the call" do
|
@@ -432,8 +432,8 @@ describe ExampleCallController do
|
|
432
432
|
end
|
433
433
|
|
434
434
|
it "should capture errors in callbacks" do
|
435
|
-
subject.should_receive(:setup_models).and_raise StandardError
|
436
|
-
subject.should_receive(:clean_up_models).and_raise StandardError
|
435
|
+
subject.should_receive(:setup_models).twice.and_raise StandardError
|
436
|
+
subject.should_receive(:clean_up_models).twice.and_raise StandardError
|
437
437
|
latch = CountDownLatch.new 4
|
438
438
|
Adhearsion::Events.exception do |e, l|
|
439
439
|
e.should be_a StandardError
|
@@ -10,7 +10,7 @@ end
|
|
10
10
|
|
11
11
|
module Adhearsion
|
12
12
|
describe Call do
|
13
|
-
let(:mock_client) {
|
13
|
+
let(:mock_client) { mock('Client').as_null_object }
|
14
14
|
|
15
15
|
let(:call_id) { rand }
|
16
16
|
let(:headers) { nil }
|
@@ -26,7 +26,7 @@ module Adhearsion
|
|
26
26
|
subject { Adhearsion::Call.new offer }
|
27
27
|
|
28
28
|
before do
|
29
|
-
|
29
|
+
offer.stub(:client).and_return(mock_client)
|
30
30
|
end
|
31
31
|
|
32
32
|
after do
|
@@ -97,16 +97,16 @@ module Adhearsion
|
|
97
97
|
end
|
98
98
|
|
99
99
|
it 'allows the registration of event handlers which are called when messages are delivered' do
|
100
|
-
event =
|
100
|
+
event = mock 'Event'
|
101
101
|
event.should_receive(:foo?).and_return true
|
102
|
-
response =
|
102
|
+
response = mock 'Response'
|
103
103
|
response.should_receive(:call).once
|
104
104
|
subject.register_event_handler(:foo?) { response.call }
|
105
105
|
subject << event
|
106
106
|
end
|
107
107
|
|
108
108
|
describe "event handlers" do
|
109
|
-
let(:response) {
|
109
|
+
let(:response) { mock 'Response' }
|
110
110
|
|
111
111
|
describe "for joined events" do
|
112
112
|
context "joined to another call" do
|
@@ -178,7 +178,8 @@ module Adhearsion
|
|
178
178
|
|
179
179
|
it "should trigger any on_unjoined callbacks set for the matching call" do
|
180
180
|
response.should_receive(:call).once.with(event)
|
181
|
-
call =
|
181
|
+
call = Call.new
|
182
|
+
call.stub :id => 'foobar'
|
182
183
|
subject.on_unjoined(call) { |event| response.call event }
|
183
184
|
subject << event
|
184
185
|
end
|
@@ -227,7 +228,8 @@ module Adhearsion
|
|
227
228
|
|
228
229
|
it "should not trigger any on_unjoined callbacks set for the matching call" do
|
229
230
|
response.should_receive(:call).never
|
230
|
-
call =
|
231
|
+
call = Call.new
|
232
|
+
call.stub :id => 'foobar'
|
231
233
|
subject.on_unjoined(call) { |event| response.call event }
|
232
234
|
subject << event
|
233
235
|
end
|
@@ -271,7 +273,9 @@ module Adhearsion
|
|
271
273
|
|
272
274
|
context "peer registry" do
|
273
275
|
let(:other_call_id) { 'foobar' }
|
274
|
-
let(:other_call) {
|
276
|
+
let(:other_call) { Call.new }
|
277
|
+
|
278
|
+
before { other_call.stub :id => other_call_id }
|
275
279
|
|
276
280
|
let :joined_event do
|
277
281
|
Punchblock::Event::Joined.new :call_id => other_call_id
|
@@ -329,7 +333,7 @@ module Adhearsion
|
|
329
333
|
end
|
330
334
|
|
331
335
|
it "should instruct the command registry to terminate" do
|
332
|
-
|
336
|
+
subject.commands.should_receive(:terminate).once
|
333
337
|
subject << end_event
|
334
338
|
end
|
335
339
|
|
@@ -401,18 +405,17 @@ module Adhearsion
|
|
401
405
|
end
|
402
406
|
|
403
407
|
describe "#write_command" do
|
404
|
-
let(:mock_command) {
|
408
|
+
let(:mock_command) { mock('Command') }
|
405
409
|
|
406
410
|
it "should asynchronously write the command to the Punchblock connection" do
|
407
|
-
|
408
|
-
flexmock(subject.wrapped_object).should_receive(:client).once.and_return mock_client
|
411
|
+
subject.wrapped_object.should_receive(:client).once.and_return mock_client
|
409
412
|
mock_client.should_receive(:execute_command).once.with(mock_command, :call_id => subject.id, :async => true).and_return true
|
410
413
|
subject.write_command mock_command
|
411
414
|
end
|
412
415
|
|
413
416
|
describe "with a hungup call" do
|
414
417
|
before do
|
415
|
-
|
418
|
+
subject.wrapped_object.should_receive(:active?).and_return(false)
|
416
419
|
end
|
417
420
|
|
418
421
|
it "should raise a Hangup exception" do
|
@@ -434,12 +437,12 @@ module Adhearsion
|
|
434
437
|
let(:response) { :foo }
|
435
438
|
|
436
439
|
before do
|
437
|
-
|
440
|
+
message.should_receive(:execute!).and_return true
|
438
441
|
message.response = response
|
439
442
|
end
|
440
443
|
|
441
444
|
it "writes a command to the call" do
|
442
|
-
|
445
|
+
subject.wrapped_object.should_receive(:write_command).once.with(message)
|
443
446
|
subject.write_and_await_response message
|
444
447
|
end
|
445
448
|
|
@@ -471,7 +474,7 @@ module Adhearsion
|
|
471
474
|
let(:response) { new_exception.new }
|
472
475
|
|
473
476
|
it "raises the error" do
|
474
|
-
|
477
|
+
Events.should_receive(:trigger).never
|
475
478
|
lambda { subject.write_and_await_response message }.should raise_error new_exception
|
476
479
|
end
|
477
480
|
|
@@ -479,7 +482,7 @@ module Adhearsion
|
|
479
482
|
let(:response) { new_exception.new.setup :item_not_found }
|
480
483
|
|
481
484
|
it "should raise a Hangup exception" do
|
482
|
-
|
485
|
+
Events.should_receive(:trigger).never
|
483
486
|
lambda { subject.write_and_await_response message }.should raise_error Call::Hangup
|
484
487
|
end
|
485
488
|
end
|
@@ -499,10 +502,14 @@ module Adhearsion
|
|
499
502
|
end
|
500
503
|
|
501
504
|
describe "basic control commands" do
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
505
|
+
def expect_message_waiting_for_response(message = nil, fail = false, &block)
|
506
|
+
expectation = subject.wrapped_object.should_receive(:write_and_await_response, &block).once
|
507
|
+
expectation = expectation.with message if message
|
508
|
+
if fail
|
509
|
+
expectation.and_raise fail
|
510
|
+
else
|
511
|
+
expectation.and_return message
|
512
|
+
end
|
506
513
|
end
|
507
514
|
|
508
515
|
describe '#accept' do
|
@@ -564,7 +571,9 @@ module Adhearsion
|
|
564
571
|
|
565
572
|
describe "with no headers" do
|
566
573
|
it 'should send a Reject message' do
|
567
|
-
expect_message_waiting_for_response
|
574
|
+
expect_message_waiting_for_response do |c|
|
575
|
+
c.is_a?(Punchblock::Command::Reject) && c.headers_hash == {}
|
576
|
+
end
|
568
577
|
subject.reject
|
569
578
|
end
|
570
579
|
end
|
@@ -572,14 +581,16 @@ module Adhearsion
|
|
572
581
|
describe "with headers set" do
|
573
582
|
it 'should send a Hangup message with the correct headers' do
|
574
583
|
headers = {:foo => 'bar'}
|
575
|
-
expect_message_waiting_for_response
|
584
|
+
expect_message_waiting_for_response do |c|
|
585
|
+
c.is_a?(Punchblock::Command::Reject) && c.headers_hash == headers
|
586
|
+
end
|
576
587
|
subject.reject nil, headers
|
577
588
|
end
|
578
589
|
end
|
579
590
|
|
580
591
|
it "should immediately fire the :call_rejected event giving the call and the reason" do
|
581
|
-
expect_message_waiting_for_response Punchblock::Command::Reject
|
582
|
-
|
592
|
+
expect_message_waiting_for_response kind_of(Punchblock::Command::Reject)
|
593
|
+
Adhearsion::Events.should_receive(:trigger_immediately).once.with(:call_rejected, :call => subject, :reason => :decline)
|
583
594
|
subject.reject :decline
|
584
595
|
end
|
585
596
|
end
|
@@ -587,11 +598,11 @@ module Adhearsion
|
|
587
598
|
describe "#hangup" do
|
588
599
|
describe "if the call is not active" do
|
589
600
|
before do
|
590
|
-
|
601
|
+
subject.wrapped_object.should_receive(:active?).and_return false
|
591
602
|
end
|
592
603
|
|
593
604
|
it "should do nothing and return false" do
|
594
|
-
|
605
|
+
subject.should_receive(:write_and_await_response).never
|
595
606
|
subject.hangup.should be false
|
596
607
|
end
|
597
608
|
end
|
@@ -629,7 +640,9 @@ module Adhearsion
|
|
629
640
|
|
630
641
|
context "with a call" do
|
631
642
|
let(:call_id) { rand.to_s }
|
632
|
-
let(:target) {
|
643
|
+
let(:target) { described_class.new }
|
644
|
+
|
645
|
+
before { target.stub id: call_id }
|
633
646
|
|
634
647
|
it "should send a join command joining to the provided call ID" do
|
635
648
|
expect_join_with_options :call_id => call_id
|
@@ -714,7 +727,9 @@ module Adhearsion
|
|
714
727
|
|
715
728
|
context "with a call" do
|
716
729
|
let(:call_id) { rand.to_s }
|
717
|
-
let(:target) {
|
730
|
+
let(:target) { described_class.new }
|
731
|
+
|
732
|
+
before { target.stub id: call_id }
|
718
733
|
|
719
734
|
it "should send an unjoin command unjoining from the provided call ID" do
|
720
735
|
expect_unjoin_with_options :call_id => call_id
|
@@ -778,10 +793,10 @@ module Adhearsion
|
|
778
793
|
|
779
794
|
describe "#execute_controller" do
|
780
795
|
let(:latch) { CountDownLatch.new 1 }
|
781
|
-
let(:mock_controller) {
|
796
|
+
let(:mock_controller) { CallController.new(subject) }
|
782
797
|
|
783
798
|
before do
|
784
|
-
|
799
|
+
subject.wrapped_object.stub :write_and_await_response => true
|
785
800
|
end
|
786
801
|
|
787
802
|
it "should call #bg_exec on the controller instance" do
|
@@ -792,7 +807,7 @@ module Adhearsion
|
|
792
807
|
|
793
808
|
it "should use the passed block as a controller if none is specified" do
|
794
809
|
mock_controller.should_receive(:exec).once
|
795
|
-
|
810
|
+
CallController.should_receive(:new).once.and_return mock_controller
|
796
811
|
subject.execute_controller nil, lambda { |call| latch.countdown! } do
|
797
812
|
foo
|
798
813
|
end
|
@@ -816,7 +831,6 @@ module Adhearsion
|
|
816
831
|
end
|
817
832
|
|
818
833
|
it "should execute a callback after the controller executes" do
|
819
|
-
flexmock(CallController).should_receive(:exec)
|
820
834
|
foo = nil
|
821
835
|
subject.execute_controller mock_controller, lambda { |call| foo = call; latch.countdown! }
|
822
836
|
latch.wait(3).should be_true
|
@@ -832,8 +846,8 @@ module Adhearsion
|
|
832
846
|
end
|
833
847
|
|
834
848
|
context "with two controllers registered" do
|
835
|
-
let(:controller1) {
|
836
|
-
let(:controller2) {
|
849
|
+
let(:controller1) { mock 'CallController1' }
|
850
|
+
let(:controller2) { mock 'CallController2' }
|
837
851
|
|
838
852
|
before { subject.controllers << controller1 << controller2 }
|
839
853
|
|