punchblock 2.5.2 → 2.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.hound.yml +2 -0
- data/CHANGELOG.md +6 -0
- data/README.markdown +2 -1
- data/lib/punchblock/translator/asterisk/call.rb +3 -3
- data/lib/punchblock/translator/asterisk/component/mrcp_recog_prompt.rb +15 -9
- data/lib/punchblock/translator/asterisk/component/output.rb +8 -1
- data/lib/punchblock/translator/input_component.rb +2 -0
- data/lib/punchblock/version.rb +1 -1
- data/punchblock.gemspec +1 -1
- data/spec/punchblock/client/component_registry_spec.rb +3 -3
- data/spec/punchblock/client_spec.rb +22 -15
- data/spec/punchblock/command/accept_spec.rb +17 -7
- data/spec/punchblock/command/answer_spec.rb +19 -9
- data/spec/punchblock/command/dial_spec.rb +76 -27
- data/spec/punchblock/command/hangup_spec.rb +17 -7
- data/spec/punchblock/command/join_spec.rb +78 -24
- data/spec/punchblock/command/mute_spec.rb +3 -3
- data/spec/punchblock/command/redirect_spec.rb +33 -12
- data/spec/punchblock/command/reject_spec.rb +41 -14
- data/spec/punchblock/command/unjoin_spec.rb +29 -12
- data/spec/punchblock/command/unmute_spec.rb +3 -3
- data/spec/punchblock/command_node_spec.rb +43 -20
- data/spec/punchblock/component/asterisk/agi/command_spec.rb +52 -12
- data/spec/punchblock/component/asterisk/ami/action_spec.rb +69 -21
- data/spec/punchblock/component/component_node_spec.rb +12 -12
- data/spec/punchblock/component/input_spec.rb +304 -87
- data/spec/punchblock/component/output_spec.rb +434 -173
- data/spec/punchblock/component/prompt_spec.rb +63 -20
- data/spec/punchblock/component/receive_fax_spec.rb +43 -14
- data/spec/punchblock/component/record_spec.rb +215 -71
- data/spec/punchblock/component/send_fax_spec.rb +54 -15
- data/spec/punchblock/connection/asterisk_spec.rb +34 -24
- data/spec/punchblock/connection/freeswitch_spec.rb +9 -9
- data/spec/punchblock/connection/xmpp_spec.rb +92 -83
- data/spec/punchblock/event/answered_spec.rb +14 -4
- data/spec/punchblock/event/asterisk/ami/event_spec.rb +34 -12
- data/spec/punchblock/event/complete_spec.rb +36 -16
- data/spec/punchblock/event/dtmf_spec.rb +9 -3
- data/spec/punchblock/event/end_spec.rb +43 -10
- data/spec/punchblock/event/input_timers_started_spec.rb +1 -1
- data/spec/punchblock/event/joined_spec.rb +29 -7
- data/spec/punchblock/event/offer_spec.rb +41 -10
- data/spec/punchblock/event/ringing_spec.rb +14 -4
- data/spec/punchblock/event/started_speaking_spec.rb +9 -3
- data/spec/punchblock/event/stopped_speaking_spec.rb +9 -3
- data/spec/punchblock/event/unjoined_spec.rb +24 -6
- data/spec/punchblock/protocol_error_spec.rb +16 -13
- data/spec/punchblock/ref_spec.rb +90 -26
- data/spec/punchblock/translator/asterisk/call_spec.rb +176 -161
- data/spec/punchblock/translator/asterisk/component/asterisk/agi_command_spec.rb +18 -18
- data/spec/punchblock/translator/asterisk/component/asterisk/ami_action_spec.rb +9 -9
- data/spec/punchblock/translator/asterisk/component/composed_prompt_spec.rb +14 -14
- data/spec/punchblock/translator/asterisk/component/input_spec.rb +57 -36
- data/spec/punchblock/translator/asterisk/component/mrcp_native_prompt_spec.rb +50 -50
- data/spec/punchblock/translator/asterisk/component/mrcp_prompt_spec.rb +59 -48
- data/spec/punchblock/translator/asterisk/component/output_spec.rb +231 -221
- data/spec/punchblock/translator/asterisk/component/record_spec.rb +82 -82
- data/spec/punchblock/translator/asterisk/component/stop_by_redirect_spec.rb +10 -10
- data/spec/punchblock/translator/asterisk/component_spec.rb +4 -4
- data/spec/punchblock/translator/asterisk_spec.rb +89 -82
- data/spec/punchblock/translator/freeswitch/call_spec.rb +114 -99
- data/spec/punchblock/translator/freeswitch/component/flite_output_spec.rb +19 -19
- data/spec/punchblock/translator/freeswitch/component/input_spec.rb +24 -24
- data/spec/punchblock/translator/freeswitch/component/output_spec.rb +23 -23
- data/spec/punchblock/translator/freeswitch/component/record_spec.rb +78 -78
- data/spec/punchblock/translator/freeswitch/component/tts_output_spec.rb +19 -19
- data/spec/punchblock/translator/freeswitch/component_spec.rb +8 -8
- data/spec/punchblock/translator/freeswitch_spec.rb +66 -59
- data/spec/punchblock/uri_list_spec.rb +45 -10
- data/spec/punchblock_spec.rb +13 -13
- data/spec/spec_helper.rb +18 -11
- data/spec/support/mock_connection_with_event_handler.rb +1 -1
- metadata +5 -4
|
@@ -31,40 +31,40 @@ module Punchblock
|
|
|
31
31
|
before { original_command.request! }
|
|
32
32
|
|
|
33
33
|
it "returns an error if the call is not answered yet" do
|
|
34
|
-
mock_call.
|
|
34
|
+
expect(mock_call).to receive(:answered?).and_return(false)
|
|
35
35
|
subject.execute
|
|
36
36
|
error = ProtocolError.new.setup 'option error', 'Record cannot be used on a call that is not answered.'
|
|
37
|
-
original_command.response(0.1).
|
|
37
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
before { mock_call.
|
|
40
|
+
before { allow(mock_call).to receive(:answered?).and_return(true) }
|
|
41
41
|
|
|
42
42
|
it "sets command response to a reference to the component" do
|
|
43
|
-
ami_client.
|
|
43
|
+
expect(ami_client).to receive(:send_action)
|
|
44
44
|
subject.execute
|
|
45
|
-
original_command.response(0.1).
|
|
46
|
-
original_command.component_id.
|
|
45
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
46
|
+
expect(original_command.component_id).to eq(subject.id)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
it "starts a recording via AMI, using the component ID as the filename" do
|
|
50
50
|
filename = "#{Record::RECORDING_BASE_PATH}/#{subject.id}"
|
|
51
|
-
ami_client.
|
|
51
|
+
expect(ami_client).to receive(:send_action).once.with('Monitor', 'Channel' => channel, 'File' => filename, 'Format' => 'wav', 'Mix' => true)
|
|
52
52
|
subject.execute
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
it "sends a max duration complete event when the recording ends" do
|
|
56
56
|
full_filename = "file://#{Record::RECORDING_BASE_PATH}/#{subject.id}.wav"
|
|
57
|
-
ami_client.
|
|
57
|
+
expect(ami_client).to receive(:send_action)
|
|
58
58
|
subject.execute
|
|
59
59
|
monitor_stop_event = RubyAMI::Event.new 'MonitorStop', 'Channel' => channel
|
|
60
60
|
mock_call.process_ami_event monitor_stop_event
|
|
61
|
-
reason.
|
|
62
|
-
recording.uri.
|
|
63
|
-
original_command.
|
|
61
|
+
expect(reason).to be_a Punchblock::Component::Record::Complete::MaxDuration
|
|
62
|
+
expect(recording.uri).to eq(full_filename)
|
|
63
|
+
expect(original_command).to be_complete
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
it "can be called multiple times on the same call" do
|
|
67
|
-
ami_client.
|
|
67
|
+
expect(ami_client).to receive(:send_action).twice
|
|
68
68
|
subject.execute
|
|
69
69
|
|
|
70
70
|
monitor_stop_event = RubyAMI::Event.new 'MonitorStop', 'Channel' => channel
|
|
@@ -80,28 +80,28 @@ module Punchblock
|
|
|
80
80
|
context "set to nil" do
|
|
81
81
|
let(:command_options) { { :start_paused => nil } }
|
|
82
82
|
it "should execute normally" do
|
|
83
|
-
ami_client.
|
|
83
|
+
expect(ami_client).to receive(:send_action).once
|
|
84
84
|
subject.execute
|
|
85
|
-
original_command.response(0.1).
|
|
85
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
context "set to false" do
|
|
90
90
|
let(:command_options) { { :start_paused => false } }
|
|
91
91
|
it "should execute normally" do
|
|
92
|
-
ami_client.
|
|
92
|
+
expect(ami_client).to receive(:send_action).once
|
|
93
93
|
subject.execute
|
|
94
|
-
original_command.response(0.1).
|
|
94
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
context "set to true" do
|
|
99
99
|
let(:command_options) { { :start_paused => true } }
|
|
100
100
|
it "should return an error and not execute any actions" do
|
|
101
|
-
mock_call.
|
|
101
|
+
expect(mock_call).to receive(:execute_agi_command).never
|
|
102
102
|
subject.execute
|
|
103
103
|
error = ProtocolError.new.setup 'option error', 'A start-paused value of true is unsupported.'
|
|
104
|
-
original_command.response(0.1).
|
|
104
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -110,28 +110,28 @@ module Punchblock
|
|
|
110
110
|
context "set to nil" do
|
|
111
111
|
let(:command_options) { { :initial_timeout => nil } }
|
|
112
112
|
it "should execute normally" do
|
|
113
|
-
ami_client.
|
|
113
|
+
expect(ami_client).to receive(:send_action).once
|
|
114
114
|
subject.execute
|
|
115
|
-
original_command.response(0.1).
|
|
115
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
116
116
|
end
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
context "set to -1" do
|
|
120
120
|
let(:command_options) { { :initial_timeout => -1 } }
|
|
121
121
|
it "should execute normally" do
|
|
122
|
-
ami_client.
|
|
122
|
+
expect(ami_client).to receive(:send_action).once
|
|
123
123
|
subject.execute
|
|
124
|
-
original_command.response(0.1).
|
|
124
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
125
125
|
end
|
|
126
126
|
end
|
|
127
127
|
|
|
128
128
|
context "set to a positive number" do
|
|
129
129
|
let(:command_options) { { :initial_timeout => 10 } }
|
|
130
130
|
it "should return an error and not execute any actions" do
|
|
131
|
-
mock_call.
|
|
131
|
+
expect(mock_call).to receive(:execute_agi_command).never
|
|
132
132
|
subject.execute
|
|
133
133
|
error = ProtocolError.new.setup 'option error', 'An initial-timeout value is unsupported.'
|
|
134
|
-
original_command.response(0.1).
|
|
134
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
135
135
|
end
|
|
136
136
|
end
|
|
137
137
|
end
|
|
@@ -140,28 +140,28 @@ module Punchblock
|
|
|
140
140
|
context "set to nil" do
|
|
141
141
|
let(:command_options) { { :final_timeout => nil } }
|
|
142
142
|
it "should execute normally" do
|
|
143
|
-
ami_client.
|
|
143
|
+
expect(ami_client).to receive(:send_action).once
|
|
144
144
|
subject.execute
|
|
145
|
-
original_command.response(0.1).
|
|
145
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
146
146
|
end
|
|
147
147
|
end
|
|
148
148
|
|
|
149
149
|
context "set to -1" do
|
|
150
150
|
let(:command_options) { { :final_timeout => -1 } }
|
|
151
151
|
it "should execute normally" do
|
|
152
|
-
ami_client.
|
|
152
|
+
expect(ami_client).to receive(:send_action).once
|
|
153
153
|
subject.execute
|
|
154
|
-
original_command.response(0.1).
|
|
154
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
155
155
|
end
|
|
156
156
|
end
|
|
157
157
|
|
|
158
158
|
context "set to a positive number" do
|
|
159
159
|
let(:command_options) { { :final_timeout => 10 } }
|
|
160
160
|
it "should return an error and not execute any actions" do
|
|
161
|
-
mock_call.
|
|
161
|
+
expect(mock_call).to receive(:execute_agi_command).never
|
|
162
162
|
subject.execute
|
|
163
163
|
error = ProtocolError.new.setup 'option error', 'A final-timeout value is unsupported.'
|
|
164
|
-
original_command.response(0.1).
|
|
164
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
165
165
|
end
|
|
166
166
|
end
|
|
167
167
|
end
|
|
@@ -170,34 +170,34 @@ module Punchblock
|
|
|
170
170
|
context "set to nil" do
|
|
171
171
|
let(:command_options) { { :format => nil } }
|
|
172
172
|
it "should execute as 'wav'" do
|
|
173
|
-
ami_client.
|
|
173
|
+
expect(ami_client).to receive(:send_action).once.with('Monitor', hash_including('Format' => 'wav'))
|
|
174
174
|
subject.execute
|
|
175
|
-
original_command.response(0.1).
|
|
175
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
176
176
|
end
|
|
177
177
|
|
|
178
178
|
it "provides the correct filename in the recording" do
|
|
179
|
-
ami_client.
|
|
179
|
+
expect(ami_client).to receive(:send_action)
|
|
180
180
|
subject.execute
|
|
181
181
|
monitor_stop_event = RubyAMI::Event.new 'MonitorStop', 'Channel' => channel
|
|
182
182
|
mock_call.process_ami_event monitor_stop_event
|
|
183
|
-
recording.uri.
|
|
183
|
+
expect(recording.uri).to match(/.*\.wav$/)
|
|
184
184
|
end
|
|
185
185
|
end
|
|
186
186
|
|
|
187
187
|
context "set to 'mp3'" do
|
|
188
188
|
let(:command_options) { { :format => 'mp3' } }
|
|
189
189
|
it "should execute as 'mp3'" do
|
|
190
|
-
ami_client.
|
|
190
|
+
expect(ami_client).to receive(:send_action).once.with('Monitor', hash_including('Format' => 'mp3'))
|
|
191
191
|
subject.execute
|
|
192
|
-
original_command.response(0.1).
|
|
192
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
193
193
|
end
|
|
194
194
|
|
|
195
195
|
it "provides the correct filename in the recording" do
|
|
196
|
-
ami_client.
|
|
196
|
+
expect(ami_client).to receive(:send_action)
|
|
197
197
|
subject.execute
|
|
198
198
|
monitor_stop_event = RubyAMI::Event.new 'MonitorStop', 'Channel' => channel
|
|
199
199
|
mock_call.process_ami_event monitor_stop_event
|
|
200
|
-
recording.uri.
|
|
200
|
+
expect(recording.uri).to match(/.*\.mp3$/)
|
|
201
201
|
end
|
|
202
202
|
end
|
|
203
203
|
end
|
|
@@ -206,20 +206,20 @@ module Punchblock
|
|
|
206
206
|
context "set to nil" do
|
|
207
207
|
let(:command_options) { { :start_beep => nil } }
|
|
208
208
|
it "should execute normally" do
|
|
209
|
-
mock_call.
|
|
210
|
-
ami_client.
|
|
209
|
+
expect(mock_call).to receive(:execute_agi_command).never.with('STREAM FILE', 'beep', '""')
|
|
210
|
+
expect(ami_client).to receive(:send_action).once
|
|
211
211
|
subject.execute
|
|
212
|
-
original_command.response(0.1).
|
|
212
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
213
213
|
end
|
|
214
214
|
end
|
|
215
215
|
|
|
216
216
|
context "set to false" do
|
|
217
217
|
let(:command_options) { { :start_beep => false } }
|
|
218
218
|
it "should execute normally" do
|
|
219
|
-
mock_call.
|
|
220
|
-
ami_client.
|
|
219
|
+
expect(mock_call).to receive(:execute_agi_command).never.with('STREAM FILE', 'beep', '""')
|
|
220
|
+
expect(ami_client).to receive(:send_action).once
|
|
221
221
|
subject.execute
|
|
222
|
-
original_command.response(0.1).
|
|
222
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
|
|
@@ -227,30 +227,30 @@ module Punchblock
|
|
|
227
227
|
let(:command_options) { { :start_beep => true } }
|
|
228
228
|
|
|
229
229
|
it "should play a beep before recording" do
|
|
230
|
-
mock_call.
|
|
231
|
-
ami_client.
|
|
230
|
+
expect(mock_call).to receive(:execute_agi_command).once.with('STREAM FILE', 'beep', '""').ordered.and_return code: 200
|
|
231
|
+
expect(ami_client).to receive(:send_action).once.ordered
|
|
232
232
|
subject.execute
|
|
233
|
-
original_command.response(0.1).
|
|
233
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
234
234
|
end
|
|
235
235
|
|
|
236
236
|
context "when we get a RubyAMI Error" do
|
|
237
237
|
it "should send an error response" do
|
|
238
238
|
error = RubyAMI::Error.new.tap { |e| e.message = 'FooBar' }
|
|
239
|
-
mock_call.
|
|
240
|
-
ami_client.
|
|
239
|
+
expect(mock_call).to receive(:execute_agi_command).and_raise error
|
|
240
|
+
expect(ami_client).to receive(:send_action).never
|
|
241
241
|
subject.execute
|
|
242
242
|
error = ProtocolError.new.setup :platform_error, "Terminated due to AMI error 'FooBar'"
|
|
243
|
-
original_command.response(0.1).
|
|
243
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
244
244
|
end
|
|
245
245
|
end
|
|
246
246
|
|
|
247
247
|
context "when the channel is no longer available" do
|
|
248
248
|
it "should send an error complete event" do
|
|
249
|
-
mock_call.
|
|
250
|
-
ami_client.
|
|
249
|
+
expect(mock_call).to receive(:execute_agi_command).and_raise ChannelGoneError
|
|
250
|
+
expect(ami_client).to receive(:send_action).never
|
|
251
251
|
subject.execute
|
|
252
252
|
error = ProtocolError.new.setup(:item_not_found, "Could not find a call with ID #{mock_call.id}", mock_call.id)
|
|
253
|
-
original_command.response(0.1).
|
|
253
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
254
254
|
end
|
|
255
255
|
end
|
|
256
256
|
end
|
|
@@ -260,18 +260,18 @@ module Punchblock
|
|
|
260
260
|
context "set to nil" do
|
|
261
261
|
let(:command_options) { { :max_duration => nil } }
|
|
262
262
|
it "should execute normally" do
|
|
263
|
-
ami_client.
|
|
263
|
+
expect(ami_client).to receive(:send_action).once
|
|
264
264
|
subject.execute
|
|
265
|
-
original_command.response(0.1).
|
|
265
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
266
266
|
end
|
|
267
267
|
end
|
|
268
268
|
|
|
269
269
|
context "set to -1" do
|
|
270
270
|
let(:command_options) { { :max_duration => -1 } }
|
|
271
271
|
it "should execute normally" do
|
|
272
|
-
ami_client.
|
|
272
|
+
expect(ami_client).to receive(:send_action).once
|
|
273
273
|
subject.execute
|
|
274
|
-
original_command.response(0.1).
|
|
274
|
+
expect(original_command.response(0.1)).to be_a Ref
|
|
275
275
|
end
|
|
276
276
|
end
|
|
277
277
|
|
|
@@ -281,7 +281,7 @@ module Punchblock
|
|
|
281
281
|
it "should return an error and not execute any actions" do
|
|
282
282
|
subject.execute
|
|
283
283
|
error = ProtocolError.new.setup 'option error', 'A max-duration value that is negative (and not -1) is invalid.'
|
|
284
|
-
original_command.response(0.1).
|
|
284
|
+
expect(original_command.response(0.1)).to eq(error)
|
|
285
285
|
end
|
|
286
286
|
end
|
|
287
287
|
|
|
@@ -291,19 +291,19 @@ module Punchblock
|
|
|
291
291
|
let(:command_options) { { :max_duration => 1000 } }
|
|
292
292
|
|
|
293
293
|
it "executes a StopMonitor action" do
|
|
294
|
-
ami_client.
|
|
295
|
-
ami_client.
|
|
294
|
+
expect(ami_client).to receive :send_action
|
|
295
|
+
expect(ami_client).to receive(:send_action).once.with('StopMonitor', 'Channel' => channel)
|
|
296
296
|
subject.execute
|
|
297
297
|
sleep 1.2
|
|
298
298
|
end
|
|
299
299
|
|
|
300
300
|
it "should not kill the translator if the channel is down" do
|
|
301
|
-
ami_client.
|
|
301
|
+
expect(ami_client).to receive :send_action
|
|
302
302
|
error = RubyAMI::Error.new.tap { |e| e.message = 'No such channel' }
|
|
303
|
-
ami_client.
|
|
303
|
+
expect(ami_client).to receive(:send_action).once.with('StopMonitor', 'Channel' => channel).and_raise error
|
|
304
304
|
subject.execute
|
|
305
305
|
sleep 1.2
|
|
306
|
-
translator.
|
|
306
|
+
expect(translator).to be_alive
|
|
307
307
|
end
|
|
308
308
|
|
|
309
309
|
it "sends the correct complete event" do
|
|
@@ -314,9 +314,9 @@ module Punchblock
|
|
|
314
314
|
monitor_stop_event = RubyAMI::Event.new 'MonitorStop', 'Channel' => channel
|
|
315
315
|
mock_call.process_ami_event monitor_stop_event
|
|
316
316
|
|
|
317
|
-
reason.
|
|
318
|
-
recording.uri.
|
|
319
|
-
original_command.
|
|
317
|
+
expect(reason).to be_a Punchblock::Component::Record::Complete::MaxDuration
|
|
318
|
+
expect(recording.uri).to eq(full_filename)
|
|
319
|
+
expect(original_command).to be_complete
|
|
320
320
|
end
|
|
321
321
|
end
|
|
322
322
|
end
|
|
@@ -332,7 +332,7 @@ module Punchblock
|
|
|
332
332
|
before { command.request! }
|
|
333
333
|
it "returns a ProtocolError response" do
|
|
334
334
|
subject.execute_command command
|
|
335
|
-
command.response(0.1).
|
|
335
|
+
expect(command.response(0.1)).to be_a ProtocolError
|
|
336
336
|
end
|
|
337
337
|
end
|
|
338
338
|
|
|
@@ -340,8 +340,8 @@ module Punchblock
|
|
|
340
340
|
let(:command) { Punchblock::Component::Stop.new }
|
|
341
341
|
|
|
342
342
|
before do
|
|
343
|
-
ami_client.
|
|
344
|
-
mock_call.
|
|
343
|
+
expect(ami_client).to receive :send_action
|
|
344
|
+
expect(mock_call).to receive(:answered?).and_return(true)
|
|
345
345
|
command.request!
|
|
346
346
|
original_command.request!
|
|
347
347
|
subject.execute
|
|
@@ -353,26 +353,26 @@ module Punchblock
|
|
|
353
353
|
end
|
|
354
354
|
|
|
355
355
|
it "sets the command response to true" do
|
|
356
|
-
ami_client.
|
|
356
|
+
expect(ami_client).to receive :send_action
|
|
357
357
|
subject.execute_command command
|
|
358
358
|
send_stop_event
|
|
359
|
-
command.response(0.1).
|
|
359
|
+
expect(command.response(0.1)).to eq(true)
|
|
360
360
|
end
|
|
361
361
|
|
|
362
362
|
it "executes a StopMonitor action" do
|
|
363
|
-
ami_client.
|
|
363
|
+
expect(ami_client).to receive(:send_action).once.with('StopMonitor', 'Channel' => channel)
|
|
364
364
|
subject.execute_command command
|
|
365
365
|
end
|
|
366
366
|
|
|
367
367
|
it "sends the correct complete event" do
|
|
368
|
-
ami_client.
|
|
368
|
+
expect(ami_client).to receive(:send_action).and_return RubyAMI::Response.new
|
|
369
369
|
|
|
370
370
|
full_filename = "file://#{Record::RECORDING_BASE_PATH}/#{subject.id}.wav"
|
|
371
371
|
subject.execute_command command
|
|
372
372
|
send_stop_event
|
|
373
|
-
reason.
|
|
374
|
-
recording.uri.
|
|
375
|
-
original_command.
|
|
373
|
+
expect(reason).to be_a Punchblock::Event::Complete::Stop
|
|
374
|
+
expect(recording.uri).to eq(full_filename)
|
|
375
|
+
expect(original_command).to be_complete
|
|
376
376
|
end
|
|
377
377
|
end
|
|
378
378
|
|
|
@@ -386,13 +386,13 @@ module Punchblock
|
|
|
386
386
|
end
|
|
387
387
|
|
|
388
388
|
it "sets the command response to true" do
|
|
389
|
-
ami_client.
|
|
389
|
+
expect(ami_client).to receive(:send_action).and_return RubyAMI::Response.new
|
|
390
390
|
subject.execute_command command
|
|
391
|
-
command.response(0.1).
|
|
391
|
+
expect(command.response(0.1)).to eq(true)
|
|
392
392
|
end
|
|
393
393
|
|
|
394
394
|
it "pauses the recording via AMI" do
|
|
395
|
-
ami_client.
|
|
395
|
+
expect(ami_client).to receive(:send_action).once.with('PauseMonitor', 'Channel' => channel)
|
|
396
396
|
subject.execute_command command
|
|
397
397
|
end
|
|
398
398
|
end
|
|
@@ -407,13 +407,13 @@ module Punchblock
|
|
|
407
407
|
end
|
|
408
408
|
|
|
409
409
|
it "sets the command response to true" do
|
|
410
|
-
ami_client.
|
|
410
|
+
expect(ami_client).to receive(:send_action).and_return RubyAMI::Response.new
|
|
411
411
|
subject.execute_command command
|
|
412
|
-
command.response(0.1).
|
|
412
|
+
expect(command.response(0.1)).to eq(true)
|
|
413
413
|
end
|
|
414
414
|
|
|
415
415
|
it "resumes the recording via AMI" do
|
|
416
|
-
ami_client.
|
|
416
|
+
expect(ami_client).to receive(:send_action).once.with('ResumeMonitor', 'Channel' => channel)
|
|
417
417
|
subject.execute_command command
|
|
418
418
|
end
|
|
419
419
|
end
|
|
@@ -29,7 +29,7 @@ module Punchblock
|
|
|
29
29
|
before { command.request! }
|
|
30
30
|
it "returns a ProtocolError response" do
|
|
31
31
|
subject.execute_command command
|
|
32
|
-
command.response(0.1).
|
|
32
|
+
expect(command.response(0.1)).to be_a ProtocolError
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
@@ -41,22 +41,22 @@ module Punchblock
|
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
it "sets the command response to true" do
|
|
44
|
-
mock_call.
|
|
45
|
-
mock_call.
|
|
46
|
-
type.
|
|
47
|
-
guards.
|
|
48
|
-
guards[0].
|
|
49
|
-
guards[1].
|
|
50
|
-
|
|
44
|
+
expect(mock_call).to receive(:redirect_back)
|
|
45
|
+
expect(mock_call).to receive(:register_handler).with { |type, *guards|
|
|
46
|
+
expect(type).to eq(:ami)
|
|
47
|
+
expect(guards.size).to eq(2)
|
|
48
|
+
expect(guards[0]).to be_a Proc
|
|
49
|
+
expect(guards[1]).to eq({:name => 'AsyncAGI'})
|
|
50
|
+
}
|
|
51
51
|
|
|
52
52
|
subject.execute_command command
|
|
53
|
-
command.response(0.1).
|
|
53
|
+
expect(command.response(0.1)).to eq(true)
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
it "returns an error if the component is already complete" do
|
|
57
57
|
subject.set_complete
|
|
58
58
|
subject.execute_command command
|
|
59
|
-
command.response(0.1).
|
|
59
|
+
expect(command.response(0.1)).to be_a ProtocolError
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
end
|