punchblock 1.6.1 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/CHANGELOG.md +8 -0
  2. data/Guardfile +1 -1
  3. data/Rakefile +1 -1
  4. data/lib/punchblock/client.rb +5 -8
  5. data/lib/punchblock/client/component_registry.rb +8 -1
  6. data/lib/punchblock/component/component_node.rb +1 -0
  7. data/lib/punchblock/component/output.rb +15 -1
  8. data/lib/punchblock/translator/asterisk.rb +1 -1
  9. data/lib/punchblock/translator/asterisk/call.rb +1 -1
  10. data/lib/punchblock/translator/asterisk/component/output.rb +5 -1
  11. data/lib/punchblock/translator/freeswitch.rb +7 -1
  12. data/lib/punchblock/translator/freeswitch/call.rb +10 -6
  13. data/lib/punchblock/translator/freeswitch/component.rb +1 -1
  14. data/lib/punchblock/version.rb +1 -1
  15. data/punchblock.gemspec +1 -2
  16. data/spec/punchblock/client/component_registry_spec.rb +7 -0
  17. data/spec/punchblock/client_spec.rb +14 -12
  18. data/spec/punchblock/command_node_spec.rb +2 -2
  19. data/spec/punchblock/component/component_node_spec.rb +10 -3
  20. data/spec/punchblock/component/input_spec.rb +1 -1
  21. data/spec/punchblock/component/output_spec.rb +32 -27
  22. data/spec/punchblock/component/record_spec.rb +5 -5
  23. data/spec/punchblock/connection/asterisk_spec.rb +7 -7
  24. data/spec/punchblock/connection/freeswitch_spec.rb +8 -8
  25. data/spec/punchblock/connection/xmpp_spec.rb +9 -9
  26. data/spec/punchblock/translator/asterisk/call_spec.rb +65 -65
  27. data/spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb +17 -20
  28. data/spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb +13 -16
  29. data/spec/punchblock/translator/asterisk/component/input_spec.rb +9 -12
  30. data/spec/punchblock/translator/asterisk/component/output_spec.rb +62 -29
  31. data/spec/punchblock/translator/asterisk/component/record_spec.rb +38 -42
  32. data/spec/punchblock/translator/asterisk/component/stop_by_redirect_spec.rb +2 -2
  33. data/spec/punchblock/translator/asterisk/component_spec.rb +5 -5
  34. data/spec/punchblock/translator/asterisk_spec.rb +55 -55
  35. data/spec/punchblock/translator/freeswitch/call_spec.rb +80 -54
  36. data/spec/punchblock/translator/freeswitch/component/flite_output_spec.rb +7 -10
  37. data/spec/punchblock/translator/freeswitch/component/input_spec.rb +8 -10
  38. data/spec/punchblock/translator/freeswitch/component/output_spec.rb +9 -12
  39. data/spec/punchblock/translator/freeswitch/component/record_spec.rb +31 -34
  40. data/spec/punchblock/translator/freeswitch/component/tts_output_spec.rb +7 -10
  41. data/spec/punchblock/translator/freeswitch/component_spec.rb +6 -6
  42. data/spec/punchblock/translator/freeswitch_spec.rb +27 -27
  43. data/spec/punchblock_spec.rb +5 -6
  44. data/spec/spec_helper.rb +2 -3
  45. data/spec/support/mock_connection_with_event_handler.rb +8 -19
  46. metadata +5 -21
@@ -7,11 +7,8 @@ module Punchblock
7
7
  class Asterisk
8
8
  module Component
9
9
  describe Record do
10
- let(:connection) do
11
- mock_connection_with_event_handler do |event|
12
- original_command.add_event event
13
- end
14
- end
10
+ include HasMockCallbackConnection
11
+
15
12
  let(:media_engine) { nil }
16
13
  let(:channel) { 'SIP/foo' }
17
14
  let(:translator) { Punchblock::Translator::Asterisk.new mock('AMI'), connection, media_engine }
@@ -34,16 +31,16 @@ module Punchblock
34
31
  before { original_command.request! }
35
32
 
36
33
  it "returns an error if the call is not answered yet" do
37
- mock_call.expects(:answered?).returns(false)
34
+ mock_call.should_receive(:answered?).and_return(false)
38
35
  subject.execute
39
36
  error = ProtocolError.new.setup 'option error', 'Record cannot be used on a call that is not answered.'
40
37
  original_command.response(0.1).should be == error
41
38
  end
42
39
 
43
- before { mock_call.stubs(:answered?).returns(true) }
40
+ before { mock_call.stub(:answered?).and_return(true) }
44
41
 
45
42
  it "sets command response to a reference to the component" do
46
- mock_call.expects(:send_ami_action!)
43
+ mock_call.should_receive(:send_ami_action!)
47
44
  subject.execute
48
45
  original_command.response(0.1).should be_a Ref
49
46
  original_command.component_id.should be == subject.id
@@ -51,13 +48,13 @@ module Punchblock
51
48
 
52
49
  it "starts a recording via AMI, using the component ID as the filename" do
53
50
  filename = "#{Record::RECORDING_BASE_PATH}/#{subject.id}"
54
- mock_call.expects(:send_ami_action!).once.with('Monitor', 'Channel' => channel, 'File' => filename, 'Format' => 'wav', 'Mix' => true)
51
+ mock_call.should_receive(:send_ami_action!).once.with('Monitor', 'Channel' => channel, 'File' => filename, 'Format' => 'wav', 'Mix' => true)
55
52
  subject.execute
56
53
  end
57
54
 
58
55
  it "sends a success complete event when the recording ends" do
59
56
  full_filename = "file://#{Record::RECORDING_BASE_PATH}/#{subject.id}.wav"
60
- mock_call.expects(:send_ami_action!)
57
+ mock_call.should_receive(:send_ami_action!)
61
58
  subject.execute
62
59
  monitor_stop_event = RubyAMI::Event.new('MonitorStop').tap do |e|
63
60
  e['Channel'] = channel
@@ -72,7 +69,7 @@ module Punchblock
72
69
  context "set to nil" do
73
70
  let(:command_options) { { :start_paused => nil } }
74
71
  it "should execute normally" do
75
- mock_call.expects(:send_ami_action!).once
72
+ mock_call.should_receive(:send_ami_action!).once
76
73
  subject.execute
77
74
  original_command.response(0.1).should be_a Ref
78
75
  end
@@ -81,7 +78,7 @@ module Punchblock
81
78
  context "set to false" do
82
79
  let(:command_options) { { :start_paused => false } }
83
80
  it "should execute normally" do
84
- mock_call.expects(:send_ami_action!).once
81
+ mock_call.should_receive(:send_ami_action!).once
85
82
  subject.execute
86
83
  original_command.response(0.1).should be_a Ref
87
84
  end
@@ -90,7 +87,7 @@ module Punchblock
90
87
  context "set to true" do
91
88
  let(:command_options) { { :start_paused => true } }
92
89
  it "should return an error and not execute any actions" do
93
- mock_call.expects(:send_agi_action!).never
90
+ mock_call.should_receive(:send_agi_action!).never
94
91
  subject.execute
95
92
  error = ProtocolError.new.setup 'option error', 'A start-paused value of true is unsupported.'
96
93
  original_command.response(0.1).should be == error
@@ -102,7 +99,7 @@ module Punchblock
102
99
  context "set to nil" do
103
100
  let(:command_options) { { :initial_timeout => nil } }
104
101
  it "should execute normally" do
105
- mock_call.expects(:send_ami_action!).once
102
+ mock_call.should_receive(:send_ami_action!).once
106
103
  subject.execute
107
104
  original_command.response(0.1).should be_a Ref
108
105
  end
@@ -111,7 +108,7 @@ module Punchblock
111
108
  context "set to -1" do
112
109
  let(:command_options) { { :initial_timeout => -1 } }
113
110
  it "should execute normally" do
114
- mock_call.expects(:send_ami_action!).once
111
+ mock_call.should_receive(:send_ami_action!).once
115
112
  subject.execute
116
113
  original_command.response(0.1).should be_a Ref
117
114
  end
@@ -120,7 +117,7 @@ module Punchblock
120
117
  context "set to a positive number" do
121
118
  let(:command_options) { { :initial_timeout => 10 } }
122
119
  it "should return an error and not execute any actions" do
123
- mock_call.expects(:send_agi_action!).never
120
+ mock_call.should_receive(:send_agi_action!).never
124
121
  subject.execute
125
122
  error = ProtocolError.new.setup 'option error', 'An initial-timeout value is unsupported.'
126
123
  original_command.response(0.1).should be == error
@@ -132,7 +129,7 @@ module Punchblock
132
129
  context "set to nil" do
133
130
  let(:command_options) { { :final_timeout => nil } }
134
131
  it "should execute normally" do
135
- mock_call.expects(:send_ami_action!).once
132
+ mock_call.should_receive(:send_ami_action!).once
136
133
  subject.execute
137
134
  original_command.response(0.1).should be_a Ref
138
135
  end
@@ -141,7 +138,7 @@ module Punchblock
141
138
  context "set to -1" do
142
139
  let(:command_options) { { :final_timeout => -1 } }
143
140
  it "should execute normally" do
144
- mock_call.expects(:send_ami_action!).once
141
+ mock_call.should_receive(:send_ami_action!).once
145
142
  subject.execute
146
143
  original_command.response(0.1).should be_a Ref
147
144
  end
@@ -150,7 +147,7 @@ module Punchblock
150
147
  context "set to a positive number" do
151
148
  let(:command_options) { { :final_timeout => 10 } }
152
149
  it "should return an error and not execute any actions" do
153
- mock_call.expects(:send_agi_action!).never
150
+ mock_call.should_receive(:send_agi_action!).never
154
151
  subject.execute
155
152
  error = ProtocolError.new.setup 'option error', 'A final-timeout value is unsupported.'
156
153
  original_command.response(0.1).should be == error
@@ -162,13 +159,13 @@ module Punchblock
162
159
  context "set to nil" do
163
160
  let(:command_options) { { :format => nil } }
164
161
  it "should execute as 'wav'" do
165
- mock_call.expects(:send_ami_action!).once.with('Monitor', has_entry('Format' => 'wav'))
162
+ mock_call.should_receive(:send_ami_action!).once.with('Monitor', hash_including('Format' => 'wav'))
166
163
  subject.execute
167
164
  original_command.response(0.1).should be_a Ref
168
165
  end
169
166
 
170
167
  it "provides the correct filename in the recording" do
171
- mock_call.expects(:send_ami_action!)
168
+ mock_call.should_receive(:send_ami_action!)
172
169
  subject.execute
173
170
  monitor_stop_event = RubyAMI::Event.new('MonitorStop').tap do |e|
174
171
  e['Channel'] = channel
@@ -181,13 +178,13 @@ module Punchblock
181
178
  context "set to 'mp3'" do
182
179
  let(:command_options) { { :format => 'mp3' } }
183
180
  it "should execute as 'mp3'" do
184
- mock_call.expects(:send_ami_action!).once.with('Monitor', has_entry('Format' => 'mp3'))
181
+ mock_call.should_receive(:send_ami_action!).once.with('Monitor', hash_including('Format' => 'mp3'))
185
182
  subject.execute
186
183
  original_command.response(0.1).should be_a Ref
187
184
  end
188
185
 
189
186
  it "provides the correct filename in the recording" do
190
- mock_call.expects(:send_ami_action!)
187
+ mock_call.should_receive(:send_ami_action!)
191
188
  subject.execute
192
189
  monitor_stop_event = RubyAMI::Event.new('MonitorStop').tap do |e|
193
190
  e['Channel'] = channel
@@ -202,8 +199,8 @@ module Punchblock
202
199
  context "set to nil" do
203
200
  let(:command_options) { { :start_beep => nil } }
204
201
  it "should execute normally" do
205
- mock_call.expects(:send_agi_action!).never.with('STREAM FILE', 'beep', '""')
206
- mock_call.expects(:send_ami_action!).once
202
+ mock_call.should_receive(:send_agi_action!).never.with('STREAM FILE', 'beep', '""')
203
+ mock_call.should_receive(:send_ami_action!).once
207
204
  subject.execute
208
205
  original_command.response(0.1).should be_a Ref
209
206
  end
@@ -212,8 +209,8 @@ module Punchblock
212
209
  context "set to false" do
213
210
  let(:command_options) { { :start_beep => false } }
214
211
  it "should execute normally" do
215
- mock_call.expects(:send_agi_action!).never.with('STREAM FILE', 'beep', '""')
216
- mock_call.expects(:send_ami_action!).once
212
+ mock_call.should_receive(:send_agi_action!).never.with('STREAM FILE', 'beep', '""')
213
+ mock_call.should_receive(:send_ami_action!).once
217
214
  subject.execute
218
215
  original_command.response(0.1).should be_a Ref
219
216
  end
@@ -223,10 +220,9 @@ module Punchblock
223
220
  let(:command_options) { { :start_beep => true } }
224
221
 
225
222
  it "should play a beep before recording" do
226
- execute_seq = sequence 'beep then record'
227
- subject.wrapped_object.expects(:wait).once
228
- mock_call.expects(:send_agi_action!).once.with('STREAM FILE', 'beep', '""').in_sequence(execute_seq)
229
- mock_call.expects(:send_ami_action!).once.in_sequence(execute_seq)
223
+ subject.wrapped_object.should_receive(:wait).once
224
+ mock_call.should_receive(:send_agi_action!).once.with('STREAM FILE', 'beep', '""').ordered
225
+ mock_call.should_receive(:send_ami_action!).once.ordered
230
226
  subject.execute
231
227
  original_command.response(0.1).should be_a Ref
232
228
  end
@@ -235,7 +231,7 @@ module Punchblock
235
231
  def mock_call.send_agi_action!(*args)
236
232
  yield
237
233
  end
238
- mock_call.expects(:send_ami_action!).once
234
+ mock_call.should_receive(:send_ami_action!).once
239
235
  subject.execute
240
236
  original_command.response(0.1).should be_a Ref
241
237
  end
@@ -246,7 +242,7 @@ module Punchblock
246
242
  context "set to nil" do
247
243
  let(:command_options) { { :max_duration => nil } }
248
244
  it "should execute normally" do
249
- mock_call.expects(:send_ami_action!).once
245
+ mock_call.should_receive(:send_ami_action!).once
250
246
  subject.execute
251
247
  original_command.response(0.1).should be_a Ref
252
248
  end
@@ -255,7 +251,7 @@ module Punchblock
255
251
  context "set to -1" do
256
252
  let(:command_options) { { :max_duration => -1 } }
257
253
  it "should execute normally" do
258
- mock_call.expects(:send_ami_action!).once
254
+ mock_call.should_receive(:send_ami_action!).once
259
255
  subject.execute
260
256
  original_command.response(0.1).should be_a Ref
261
257
  end
@@ -277,8 +273,8 @@ module Punchblock
277
273
  let(:command_options) { { :max_duration => 1000 } }
278
274
 
279
275
  it "executes a StopMonitor action" do
280
- mock_call.expects :send_ami_action!
281
- mock_call.expects(:send_ami_action!).once.with('StopMonitor', 'Channel' => channel)
276
+ mock_call.should_receive :send_ami_action!
277
+ mock_call.should_receive(:send_ami_action!).once.with('StopMonitor', 'Channel' => channel)
282
278
  subject.execute
283
279
  sleep 1.2
284
280
  end
@@ -322,8 +318,8 @@ module Punchblock
322
318
  let(:command) { Punchblock::Component::Stop.new }
323
319
 
324
320
  before do
325
- mock_call.expects :send_ami_action!
326
- mock_call.expects(:answered?).returns(true)
321
+ mock_call.should_receive :send_ami_action!
322
+ mock_call.should_receive(:answered?).and_return(true)
327
323
  command.request!
328
324
  original_command.request!
329
325
  subject.execute
@@ -337,14 +333,14 @@ module Punchblock
337
333
  end
338
334
 
339
335
  it "sets the command response to true" do
340
- mock_call.expects :send_ami_action!
336
+ mock_call.should_receive :send_ami_action!
341
337
  subject.execute_command command
342
338
  send_stop_event
343
339
  command.response(0.1).should be == true
344
340
  end
345
341
 
346
342
  it "executes a StopMonitor action" do
347
- mock_call.expects(:send_ami_action!).once.with('StopMonitor', 'Channel' => channel)
343
+ mock_call.should_receive(:send_ami_action!).once.with('StopMonitor', 'Channel' => channel)
348
344
  subject.execute_command command
349
345
  end
350
346
 
@@ -386,7 +382,7 @@ module Punchblock
386
382
  end
387
383
 
388
384
  it "pauses the recording via AMI" do
389
- mock_call.expects(:send_ami_action!).once.with('PauseMonitor', 'Channel' => channel)
385
+ mock_call.should_receive(:send_ami_action!).once.with('PauseMonitor', 'Channel' => channel)
390
386
  subject.execute_command command
391
387
  end
392
388
  end
@@ -409,7 +405,7 @@ module Punchblock
409
405
  end
410
406
 
411
407
  it "resumes the recording via AMI" do
412
- mock_call.expects(:send_ami_action!).once.with('ResumeMonitor', 'Channel' => channel)
408
+ mock_call.should_receive(:send_ami_action!).once.with('ResumeMonitor', 'Channel' => channel)
413
409
  subject.execute_command command
414
410
  end
415
411
  end
@@ -37,8 +37,8 @@ module Punchblock
37
37
  end
38
38
 
39
39
  it "sets the command response to true" do
40
- mock_call.expects(:redirect_back!)
41
- mock_call.expects(:register_handler).with do |type, *guards|
40
+ mock_call.should_receive(:redirect_back!)
41
+ mock_call.should_receive(:register_handler).with do |type, *guards|
42
42
  type.should be == :ami
43
43
  guards.should have(2).guards
44
44
  guards[0].should be_a Proc
@@ -35,7 +35,7 @@ module Punchblock
35
35
  end
36
36
 
37
37
  it "should send the event to the connection" do
38
- connection.expects(:handle_event).once.with expected_event
38
+ connection.should_receive(:handle_event).once.with expected_event
39
39
  subject.send_event event
40
40
  end
41
41
 
@@ -43,7 +43,7 @@ module Punchblock
43
43
  before { subject.internal = true }
44
44
 
45
45
  it "should add the event to the command" do
46
- command.expects(:add_event).once.with expected_event
46
+ command.should_receive(:add_event).once.with expected_event
47
47
  subject.send_event event
48
48
  end
49
49
  end
@@ -60,12 +60,12 @@ module Punchblock
60
60
  end
61
61
 
62
62
  it "should send a complete event with the specified reason" do
63
- subject.wrapped_object.expects(:send_event).once.with expected_event
63
+ subject.wrapped_object.should_receive(:send_event).once.with expected_event
64
64
  subject.send_complete_event reason
65
65
  end
66
66
 
67
67
  it "should cause the actor to be shut down" do
68
- subject.wrapped_object.stubs(:send_event).returns true
68
+ subject.wrapped_object.stub(:send_event).and_return true
69
69
  subject.send_complete_event reason
70
70
  sleep 0.2
71
71
  subject.should_not be_alive
@@ -74,7 +74,7 @@ module Punchblock
74
74
 
75
75
  describe "#call_ended" do
76
76
  it "should send a complete event with the call hangup reason" do
77
- subject.wrapped_object.expects(:send_complete_event).once.with Punchblock::Event::Complete::Hangup.new
77
+ subject.wrapped_object.should_receive(:send_complete_event).once.with Punchblock::Event::Complete::Hangup.new
78
78
  subject.call_ended
79
79
  end
80
80
  end
@@ -32,7 +32,7 @@ module Punchblock
32
32
  describe '#shutdown' do
33
33
  it "instructs all calls to shutdown" do
34
34
  call = Asterisk::Call.new 'foo', subject
35
- call.expects(:shutdown!).once
35
+ call.should_receive(:shutdown!).once
36
36
  subject.register_call call
37
37
  subject.shutdown
38
38
  end
@@ -50,7 +50,7 @@ module Punchblock
50
50
  let(:call_id) { 'abc123' }
51
51
 
52
52
  it 'executes the call command' do
53
- subject.wrapped_object.expects(:execute_call_command).with do |c|
53
+ subject.wrapped_object.should_receive(:execute_call_command).with do |c|
54
54
  c.should be command
55
55
  c.target_call_id.should be == call_id
56
56
  end
@@ -63,7 +63,7 @@ module Punchblock
63
63
  let(:component_id) { '123abc' }
64
64
 
65
65
  it 'executes the component command' do
66
- subject.wrapped_object.expects(:execute_component_command).with do |c|
66
+ subject.wrapped_object.should_receive(:execute_component_command).with do |c|
67
67
  c.should be command
68
68
  c.component_id.should be == component_id
69
69
  end
@@ -75,7 +75,7 @@ module Punchblock
75
75
  let(:command) { Command::Dial.new }
76
76
 
77
77
  it 'executes the command directly' do
78
- subject.wrapped_object.expects(:execute_global_command).with command
78
+ subject.wrapped_object.should_receive(:execute_global_command).with command
79
79
  subject.execute_command command
80
80
  end
81
81
  end
@@ -87,7 +87,7 @@ module Punchblock
87
87
  let(:call) { Translator::Asterisk::Call.new channel, subject }
88
88
 
89
89
  before do
90
- call.stubs(:id).returns call_id
90
+ call.stub(:id).and_return call_id
91
91
  subject.register_call call
92
92
  end
93
93
 
@@ -106,7 +106,7 @@ module Punchblock
106
106
  let(:call) { Translator::Asterisk::Call.new channel, subject }
107
107
 
108
108
  before do
109
- call.stubs(:id).returns call_id
109
+ call.stub(:id).and_return call_id
110
110
  subject.register_call call
111
111
  end
112
112
 
@@ -142,12 +142,12 @@ module Punchblock
142
142
 
143
143
  before do
144
144
  command.request!
145
- call.stubs(:id).returns call_id
145
+ call.stub(:id).and_return call_id
146
146
  subject.register_call call
147
147
  end
148
148
 
149
149
  it 'sends the command to the call for execution' do
150
- call.expects(:execute_command!).once.with command
150
+ call.should_receive(:execute_command!).once.with command
151
151
  subject.execute_call_command command
152
152
  end
153
153
  end
@@ -166,7 +166,7 @@ module Punchblock
166
166
 
167
167
  before do
168
168
  subject.execute_command dial_command
169
- ami_client.stub_everything
169
+ ami_client.as_null_object
170
170
  end
171
171
 
172
172
  it 'sends an error in response to the command' do
@@ -176,7 +176,7 @@ module Punchblock
176
176
  raise 'Woops, I died'
177
177
  end
178
178
 
179
- connection.expects(:handle_event).once.with end_error_event
179
+ connection.should_receive(:handle_event).once.with end_error_event
180
180
 
181
181
  lambda { call.oops }.should raise_error(/Woops, I died/)
182
182
  sleep 0.1
@@ -202,7 +202,7 @@ module Punchblock
202
202
  let(:call_id) { call.id }
203
203
 
204
204
  before do
205
- connection.expects(:handle_event).at_least(1)
205
+ connection.stub :handle_event
206
206
  subject.handle_ami_event ami_event
207
207
  call_id
208
208
  end
@@ -212,7 +212,7 @@ module Punchblock
212
212
  raise 'Woops, I died'
213
213
  end
214
214
 
215
- connection.expects(:handle_event).once.with end_error_event
215
+ connection.should_receive(:handle_event).once.with end_error_event
216
216
 
217
217
  lambda { call.oops }.should raise_error(/Woops, I died/)
218
218
  sleep 0.1
@@ -250,7 +250,7 @@ module Punchblock
250
250
  end
251
251
 
252
252
  it 'sends the command to the component for execution' do
253
- component.expects(:execute_command!).once.with command
253
+ component.should_receive(:execute_command!).once.with command
254
254
  subject.execute_component_command command
255
255
  end
256
256
  end
@@ -271,7 +271,7 @@ module Punchblock
271
271
 
272
272
  before do
273
273
  command.request!
274
- ami_client.stub_everything
274
+ ami_client.as_null_object
275
275
  end
276
276
 
277
277
  it 'should be able to look up the call by channel ID' do
@@ -281,9 +281,9 @@ module Punchblock
281
281
  end
282
282
 
283
283
  it 'should instruct the call to send a dial' do
284
- mock_call = stub_everything 'Asterisk::Call'
285
- Asterisk::Call.expects(:new_link).once.returns mock_call
286
- mock_call.expects(:dial!).once.with command
284
+ mock_call = stub('Asterisk::Call').as_null_object
285
+ Asterisk::Call.should_receive(:new_link).once.and_return mock_call
286
+ mock_call.should_receive(:dial!).once.with command
287
287
  subject.execute_global_command command
288
288
  end
289
289
  end
@@ -293,17 +293,17 @@ module Punchblock
293
293
  Component::Asterisk::AMI::Action.new :name => 'Status', :params => { :channel => 'foo' }
294
294
  end
295
295
 
296
- let(:mock_action) { stub_everything 'Asterisk::Component::Asterisk::AMIAction' }
296
+ let(:mock_action) { stub('Asterisk::Component::Asterisk::AMIAction').as_null_object }
297
297
 
298
298
  it 'should create a component actor and execute it asynchronously' do
299
- Asterisk::Component::Asterisk::AMIAction.expects(:new).once.with(command, subject).returns mock_action
300
- mock_action.expects(:execute!).once
299
+ Asterisk::Component::Asterisk::AMIAction.should_receive(:new).once.with(command, subject).and_return mock_action
300
+ mock_action.should_receive(:execute!).once
301
301
  subject.execute_global_command command
302
302
  end
303
303
 
304
304
  it 'registers the component' do
305
- Asterisk::Component::Asterisk::AMIAction.expects(:new).once.with(command, subject).returns mock_action
306
- subject.wrapped_object.expects(:register_component).with mock_action
305
+ Asterisk::Component::Asterisk::AMIAction.should_receive(:new).once.with(command, subject).and_return mock_action
306
+ subject.wrapped_object.should_receive(:register_component).with mock_action
307
307
  subject.execute_global_command command
308
308
  end
309
309
  end
@@ -323,7 +323,7 @@ module Punchblock
323
323
  describe '#handle_pb_event' do
324
324
  it 'should forward the event to the connection' do
325
325
  event = mock 'Punchblock::Event'
326
- subject.connection.expects(:handle_event).once.with event
326
+ subject.connection.should_receive(:handle_event).once.with event
327
327
  subject.handle_pb_event event
328
328
  end
329
329
  end
@@ -347,13 +347,13 @@ module Punchblock
347
347
  end
348
348
 
349
349
  it 'should create a Punchblock AMI event object and pass it to the connection' do
350
- subject.connection.expects(:handle_event).once.with expected_pb_event
350
+ subject.connection.should_receive(:handle_event).once.with expected_pb_event
351
351
  subject.handle_ami_event ami_event
352
352
  end
353
353
 
354
354
  context 'with something that is not a RubyAMI::Event' do
355
355
  it 'does not send anything to the connection' do
356
- subject.connection.expects(:handle_event).never
356
+ subject.connection.should_receive(:handle_event).never
357
357
  subject.handle_ami_event :foo
358
358
  end
359
359
  end
@@ -363,15 +363,15 @@ module Punchblock
363
363
 
364
364
  context 'once' do
365
365
  it 'does not send anything to the connection' do
366
- subject.connection.expects(:handle_event).never
366
+ subject.connection.should_receive(:handle_event).never
367
367
  subject.handle_ami_event ami_event
368
368
  end
369
369
  end
370
370
 
371
371
  context 'twice' do
372
372
  it 'sends a connected event to the event handler' do
373
- subject.connection.expects(:handle_event).once.with Connection::Connected.new
374
- subject.wrapped_object.expects(:run_at_fully_booted).once
373
+ subject.connection.should_receive(:handle_event).once.with Connection::Connected.new
374
+ subject.wrapped_object.should_receive(:run_at_fully_booted).once
375
375
  subject.handle_ami_event ami_event
376
376
  subject.handle_ami_event ami_event
377
377
  end
@@ -387,7 +387,7 @@ module Punchblock
387
387
  end
388
388
  end
389
389
 
390
- before { subject.wrapped_object.stubs :handle_pb_event }
390
+ before { subject.wrapped_object.stub :handle_pb_event }
391
391
 
392
392
  it 'should be able to look up the call by channel ID' do
393
393
  subject.handle_ami_event ami_event
@@ -419,10 +419,10 @@ module Punchblock
419
419
  end
420
420
 
421
421
  it 'should instruct the call to send an offer' do
422
- mock_call = stub_everything 'Asterisk::Call'
423
- Asterisk::Call.expects(:new).once.returns mock_call
424
- subject.wrapped_object.expects(:link)
425
- mock_call.expects(:send_offer!).once
422
+ mock_call = stub('Asterisk::Call').as_null_object
423
+ Asterisk::Call.should_receive(:new).once.and_return mock_call
424
+ subject.wrapped_object.should_receive(:link)
425
+ mock_call.should_receive(:send_offer!).once
426
426
  subject.handle_ami_event ami_event
427
427
  end
428
428
 
@@ -434,7 +434,7 @@ module Punchblock
434
434
  end
435
435
 
436
436
  it "should not create a new call" do
437
- Asterisk::Call.expects(:new).never
437
+ Asterisk::Call.should_receive(:new).never
438
438
  subject.handle_ami_event ami_event
439
439
  end
440
440
  end
@@ -449,7 +449,7 @@ module Punchblock
449
449
  end
450
450
 
451
451
  it "should not create a new call" do
452
- Asterisk::Call.expects(:new).never
452
+ Asterisk::Call.should_receive(:new).never
453
453
  subject.handle_ami_event ami_event
454
454
  end
455
455
 
@@ -469,7 +469,7 @@ module Punchblock
469
469
  end
470
470
 
471
471
  it "should not create a new call" do
472
- Asterisk::Call.expects(:new).never
472
+ Asterisk::Call.should_receive(:new).never
473
473
  subject.handle_ami_event ami_event
474
474
  end
475
475
 
@@ -492,8 +492,8 @@ module Punchblock
492
492
  end
493
493
 
494
494
  before do
495
- ami_client.stub_everything
496
- subject.wrapped_object.stubs :handle_pb_event
495
+ ami_client.as_null_object
496
+ subject.wrapped_object.stub :handle_pb_event
497
497
  end
498
498
 
499
499
  context "matching a call that was created by a Dial command" do
@@ -554,7 +554,7 @@ module Punchblock
554
554
  end
555
555
 
556
556
  it 'sends the AMI event to the call and to the connection as a PB event' do
557
- call.expects(:process_ami_event!).once.with ami_event
557
+ call.should_receive(:process_ami_event!).once.with ami_event
558
558
  subject.handle_ami_event ami_event
559
559
  end
560
560
 
@@ -576,8 +576,8 @@ module Punchblock
576
576
  before { subject.register_call call2 }
577
577
 
578
578
  it 'should send the event to both calls and to the connection once as a PB event' do
579
- call.expects(:process_ami_event!).once.with ami_event
580
- call2.expects(:process_ami_event!).once.with ami_event
579
+ call.should_receive(:process_ami_event!).once.with ami_event
580
+ call2.should_receive(:process_ami_event!).once.with ami_event
581
581
  subject.handle_ami_event ami_event
582
582
  end
583
583
  end
@@ -612,12 +612,12 @@ module Punchblock
612
612
  end
613
613
 
614
614
  it 'sends the AMI event to the call and to the connection as a PB event if it is an allowed event' do
615
- call.expects(:process_ami_event!).once.with ami_event
615
+ call.should_receive(:process_ami_event!).once.with ami_event
616
616
  subject.handle_ami_event ami_event
617
617
  end
618
618
 
619
619
  it 'does not send the AMI event to a bridged channel if it is not allowed' do
620
- call.expects(:process_ami_event!).never.with ami_event2
620
+ call.should_receive(:process_ami_event!).never.with ami_event2
621
621
  subject.handle_ami_event ami_event2
622
622
  end
623
623
 
@@ -626,7 +626,7 @@ module Punchblock
626
626
 
627
627
  describe '#send_ami_action' do
628
628
  it 'should send the action to the AMI client' do
629
- ami_client.expects(:send_action).once.with 'foo', :foo => :bar
629
+ ami_client.should_receive(:send_action).once.with 'foo', :foo => :bar
630
630
  subject.send_ami_action 'foo', :foo => :bar
631
631
  end
632
632
  end
@@ -641,31 +641,31 @@ module Punchblock
641
641
  end
642
642
 
643
643
  it 'should send the redirect extension Command to the AMI client' do
644
- ami_client.expects(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
645
- ami_client.expects(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}")
644
+ ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
645
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}")
646
646
  subject.run_at_fully_booted
647
647
  end
648
648
 
649
649
  it 'should check the context for existence and do nothing if it is there' do
650
- ami_client.expects(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
651
- ami_client.expects(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").yields(passed_show)
650
+ ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
651
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_yield(passed_show)
652
652
  subject.run_at_fully_booted
653
653
  end
654
654
 
655
655
  it 'should check the context for existence and log an error if it is not there' do
656
- ami_client.expects(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
657
- ami_client.expects(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").yields(failed_show)
658
- Punchblock.logger.expects(:error).once.with("Punchblock failed to add the #{Asterisk::REDIRECT_EXTENSION} extension to the #{Asterisk::REDIRECT_CONTEXT} context. Please add a [#{Asterisk::REDIRECT_CONTEXT}] entry to your dialplan.")
656
+ ami_client.should_receive(:send_action).once.with 'Command', 'Command' => "dialplan add extension #{Asterisk::REDIRECT_EXTENSION},#{Asterisk::REDIRECT_PRIORITY},AGI,agi:async into #{Asterisk::REDIRECT_CONTEXT}"
657
+ ami_client.should_receive(:send_action).once.with('Command', 'Command' => "dialplan show #{Asterisk::REDIRECT_CONTEXT}").and_yield(failed_show)
658
+ Punchblock.logger.should_receive(:error).once.with("Punchblock failed to add the #{Asterisk::REDIRECT_EXTENSION} extension to the #{Asterisk::REDIRECT_CONTEXT} context. Please add a [#{Asterisk::REDIRECT_CONTEXT}] entry to your dialplan.")
659
659
  subject.run_at_fully_booted
660
660
  end
661
661
  end
662
-
662
+
663
663
  describe '#check_recording_directory' do
664
664
  let(:broken_path) { "/this/is/not/a/valid/path" }
665
665
  before do
666
666
  @new_constant = broken_path
667
- @old_constant = Punchblock::Translator::Asterisk::Component::Record::RECORDING_BASE_PATH
668
- Punchblock::Translator::Asterisk::Component::Record.__send__(:remove_const,'RECORDING_BASE_PATH')
667
+ @old_constant = Punchblock::Translator::Asterisk::Component::Record::RECORDING_BASE_PATH
668
+ Punchblock::Translator::Asterisk::Component::Record.__send__(:remove_const,'RECORDING_BASE_PATH')
669
669
  Punchblock::Translator::Asterisk::Component::Record.const_set('RECORDING_BASE_PATH', @new_constant)
670
670
  end
671
671
  after do
@@ -673,7 +673,7 @@ module Punchblock
673
673
  Punchblock::Translator::Asterisk::Component::Record.const_set('RECORDING_BASE_PATH', @old_constant)
674
674
  end
675
675
  it 'logs a warning if the recording directory does not exist' do
676
- Punchblock.logger.expects(:warning).once.with("Recordings directory #{broken_path} does not exist. Recording might not work. This warning can be ignored if Adhearsion is running on a separate machine than Asterisk. See http://adhearsion.com/docs/call-controllers#recording")
676
+ Punchblock.logger.should_receive(:warning).once.with("Recordings directory #{broken_path} does not exist. Recording might not work. This warning can be ignored if Adhearsion is running on a separate machine than Asterisk. See http://adhearsion.com/docs/call-controllers#recording")
677
677
  subject.check_recording_directory
678
678
  end
679
679
  end