adhearsion-asterisk 1.3.1 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/CHANGELOG.md +3 -0
- data/adhearsion-asterisk.gemspec +5 -8
- data/lib/adhearsion/asterisk/call_controller_methods.rb +13 -0
- data/lib/adhearsion/asterisk/version.rb +1 -1
- data/spec/adhearsion/asterisk/call_controller_methods_spec.rb +117 -73
- data/spec/adhearsion/asterisk/config_generators/agents_spec.rb +2 -2
- data/spec/adhearsion/asterisk/config_generators/queues_spec.rb +15 -15
- data/spec/adhearsion/asterisk/config_manager_spec.rb +1 -1
- data/spec/adhearsion/asterisk/plugin_spec.rb +1 -1
- data/spec/adhearsion/asterisk/queue_proxy/agent_proxy_spec.rb +20 -20
- data/spec/adhearsion/asterisk/queue_proxy/queue_agents_list_proxy_spec.rb +35 -35
- data/spec/adhearsion/asterisk/queue_proxy_spec.rb +41 -41
- data/spec/spec_helper.rb +0 -2
- metadata +37 -115
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a687c0732e8408239c867b8480924c6206084bf4
|
4
|
+
data.tar.gz: 3baa0d3876880a58b2ad5376af3d2614cb47a418
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d8dff1e952c3ae79c2c71713b98b4bf9cebfad82a5e917cf5d0491983051157b8e8ac96b7acbcda8a73030a322fbfe401cce664b13773c68846dfb4a17ba9c8f
|
7
|
+
data.tar.gz: fba213383d1700cdd1915a44d3c6649ef6f441b35e48087924d224da7a3c446aa4367200ae644c3a98c64bccda5a767cd6a756b22d1b0826b682f2b8638c8302
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
data/adhearsion-asterisk.gemspec
CHANGED
@@ -19,19 +19,16 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_runtime_dependency %q<adhearsion>, ["~> 2.0"]
|
22
|
-
s.add_runtime_dependency %q<activesupport>, ["
|
22
|
+
s.add_runtime_dependency %q<activesupport>, ["~> 3.0"]
|
23
23
|
s.add_runtime_dependency %q<jruby-openssl> if RUBY_PLATFORM == 'java'
|
24
24
|
|
25
|
-
s.add_development_dependency %q<bundler>, ["
|
26
|
-
s.add_development_dependency %q<rspec>, ["
|
27
|
-
s.add_development_dependency %q<ci_reporter>, ["
|
25
|
+
s.add_development_dependency %q<bundler>, ["~> 1.0"]
|
26
|
+
s.add_development_dependency %q<rspec>, ["~> 2.5"]
|
27
|
+
s.add_development_dependency %q<ci_reporter>, ["~> 1.6"]
|
28
28
|
s.add_development_dependency %q<simplecov>, [">= 0"]
|
29
29
|
s.add_development_dependency %q<simplecov-rcov>, [">= 0"]
|
30
|
-
s.add_development_dependency %q<yard>, ["
|
30
|
+
s.add_development_dependency %q<yard>, ["~> 0.6"]
|
31
31
|
s.add_development_dependency %q<rake>, [">= 0"]
|
32
|
-
s.add_development_dependency %q<mocha>, [">= 0"]
|
33
|
-
s.add_development_dependency %q<bones>
|
34
32
|
s.add_development_dependency %q<guard-rspec>
|
35
33
|
s.add_development_dependency %q<ruby_gntp>
|
36
|
-
s.add_development_dependency %q<thor>, ["~> 0.14.0"]
|
37
34
|
end
|
@@ -412,6 +412,19 @@ module Adhearsion
|
|
412
412
|
GenerateSilenceProxy.proxy_for(self, &block) if block_given?
|
413
413
|
end
|
414
414
|
|
415
|
+
#
|
416
|
+
# Go to a specified context, extension and priority
|
417
|
+
# This requires us to relinquish control of the call.
|
418
|
+
# Execution will continue until the user hangs up, but the channel will be no longer available
|
419
|
+
#
|
420
|
+
def goto(context, extension = :nothing, priority = :nothing)
|
421
|
+
call[:ahn_prevent_hangup] = true
|
422
|
+
args = ['Goto', context, extension, priority].reject { |v| v == :nothing }
|
423
|
+
execute *args
|
424
|
+
set_variable 'PUNCHBLOCK_END_ON_ASYNCAGI_BREAK', 'true'
|
425
|
+
agi "ASYNCAGI BREAK"
|
426
|
+
end
|
427
|
+
|
415
428
|
class GenerateSilenceProxy
|
416
429
|
def self.proxy_for(target, &block)
|
417
430
|
proxy = new(target)
|
@@ -4,7 +4,9 @@ module Adhearsion::Asterisk
|
|
4
4
|
describe CallControllerMethods do
|
5
5
|
describe "mixed in to a CallController" do
|
6
6
|
|
7
|
-
|
7
|
+
let(:call) { mock('Call') }
|
8
|
+
|
9
|
+
subject { Adhearsion::CallController.new call }
|
8
10
|
|
9
11
|
before { Adhearsion::CallController.mixin CallControllerMethods }
|
10
12
|
|
@@ -19,10 +21,10 @@ module Adhearsion::Asterisk
|
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
22
|
-
before { Punchblock::Component::Asterisk::AGI::Command.any_instance.
|
24
|
+
before { Punchblock::Component::Asterisk::AGI::Command.any_instance.stub :complete_event => complete_event }
|
23
25
|
|
24
26
|
it 'should execute an AGI command with the specified name and parameters and return the response code, response and data' do
|
25
|
-
subject.
|
27
|
+
subject.should_receive(:execute_component_and_await_completion).once.with expected_agi_command
|
26
28
|
values = subject.agi 'Dial', '4044754842', 15
|
27
29
|
values.should == [200, 1, 'foobar']
|
28
30
|
end
|
@@ -35,7 +37,7 @@ module Adhearsion::Asterisk
|
|
35
37
|
end
|
36
38
|
|
37
39
|
it 'should raise Adhearsion::Call::Hangup' do
|
38
|
-
subject.
|
40
|
+
subject.should_receive(:execute_component_and_await_completion).once.with expected_agi_command
|
39
41
|
lambda { subject.agi 'Dial', '4044754842', 15 }.should raise_error(Adhearsion::Call::Hangup)
|
40
42
|
end
|
41
43
|
end
|
@@ -43,21 +45,21 @@ module Adhearsion::Asterisk
|
|
43
45
|
|
44
46
|
describe '#execute' do
|
45
47
|
it 'calls #agi and prefixes the command with EXEC' do
|
46
|
-
subject.
|
48
|
+
subject.should_receive(:agi).once.with 'EXEC Dial', '4044754842,15'
|
47
49
|
subject.execute 'Dial', '4044754842', 15
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
53
|
describe '#verbose' do
|
52
54
|
it 'executes the VERBOSE AGI command' do
|
53
|
-
subject.
|
55
|
+
subject.should_receive(:agi).once.with 'VERBOSE', 'Foo Bar!', 15
|
54
56
|
subject.verbose 'Foo Bar!', 15
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
60
|
describe '#enable_feature' do
|
59
61
|
it 'it should fetch the variable for DYNAMIC_FEATURES at first' do
|
60
|
-
subject.
|
62
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES").and_throw(:got_variable)
|
61
63
|
expect {
|
62
64
|
subject.enable_feature :foobar
|
63
65
|
}.to throw_symbol :got_variable
|
@@ -73,13 +75,13 @@ module Adhearsion::Asterisk
|
|
73
75
|
|
74
76
|
# I had to do this ugly hack because of a bug in Flexmock which prevented me from mocking out Hash#[] :(
|
75
77
|
# FIXME: mock Hash
|
76
|
-
# ...DYNAMIC_FEATURE_EXTENSIONS.
|
78
|
+
# ...DYNAMIC_FEATURE_EXTENSIONS.should_receive(feature_name => assertion)
|
77
79
|
|
78
80
|
old_hash_feature_extension = Adhearsion::Asterisk::CallControllerMethods::DYNAMIC_FEATURE_EXTENSIONS[feature_name]
|
79
81
|
begin
|
80
82
|
Adhearsion::Asterisk::CallControllerMethods::DYNAMIC_FEATURE_EXTENSIONS[feature_name] = assertion
|
81
83
|
|
82
|
-
subject.
|
84
|
+
subject.should_receive(:enable_feature).once.with(feature_name, :this_is_the_right_arg).and_throw :inside_assertion!
|
83
85
|
expect { subject.enable_feature(feature_name, :this_is_the_right_arg)}.to throw_symbol :inside_assertion!
|
84
86
|
ensure
|
85
87
|
Adhearsion::Asterisk::CallControllerMethods::DYNAMIC_FEATURE_EXTENSIONS[feature_name] = old_hash_feature_extension
|
@@ -87,13 +89,13 @@ module Adhearsion::Asterisk
|
|
87
89
|
end
|
88
90
|
|
89
91
|
it 'should separate enabled features with a "#"' do
|
90
|
-
subject.
|
91
|
-
subject.
|
92
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES").and_return("one")
|
93
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES" => 'one#bar')
|
92
94
|
subject.enable_feature "bar"
|
93
95
|
end
|
94
96
|
|
95
97
|
it 'should not add duplicate enabled dynamic features' do
|
96
|
-
subject.
|
98
|
+
subject.should_receive(:variable).once.and_return('eins#zwei')
|
97
99
|
subject.enable_feature "eins"
|
98
100
|
end
|
99
101
|
|
@@ -104,63 +106,63 @@ module Adhearsion::Asterisk
|
|
104
106
|
end
|
105
107
|
|
106
108
|
it 'enabling :attended_transfer should actually enable the atxfer feature' do
|
107
|
-
subject.
|
108
|
-
subject.
|
109
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES").and_return ''
|
110
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES" => 'atxfer')
|
109
111
|
subject.enable_feature :attended_transfer
|
110
112
|
end
|
111
113
|
|
112
114
|
it 'the :context optional option when enabling :attended_transfer should set the TRANSFER_CONTEXT variable to the String supplied as a Hash value' do
|
113
115
|
context_name = "direct_dial"
|
114
|
-
subject.
|
115
|
-
subject.
|
116
|
-
subject.
|
116
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES").and_return ''
|
117
|
+
subject.should_receive(:variable).once.with("DYNAMIC_FEATURES" => 'atxfer')
|
118
|
+
subject.should_receive(:variable).once.with("TRANSFER_CONTEXT" => context_name)
|
117
119
|
subject.enable_feature :attended_transfer, :context => context_name
|
118
120
|
end
|
119
121
|
|
120
122
|
it 'enabling :attended_transfer should not add a duplicate if atxfer has been enabled, but it should still set the TRANSFER_CONTEXT variable' do
|
121
123
|
context_name = 'blah'
|
122
|
-
subject.
|
123
|
-
subject.
|
124
|
+
subject.should_receive(:variable).once.with('DYNAMIC_FEATURES').and_return 'atxfer'
|
125
|
+
subject.should_receive(:variable).once.with('TRANSFER_CONTEXT' => context_name)
|
124
126
|
subject.enable_feature :attended_transfer, :context => context_name
|
125
127
|
end
|
126
128
|
end
|
127
129
|
|
128
130
|
describe '#disable_feature' do
|
129
131
|
it "should properly remove the feature from the DYNAMIC_FEATURES variable" do
|
130
|
-
subject.
|
131
|
-
subject.
|
132
|
+
subject.should_receive(:variable).once.with('DYNAMIC_FEATURES').and_return 'foobar#qaz'
|
133
|
+
subject.should_receive(:variable).once.with('DYNAMIC_FEATURES' => 'qaz')
|
132
134
|
subject.disable_feature "foobar"
|
133
135
|
end
|
134
136
|
|
135
137
|
it "should not re-set the variable if the feature wasn't enabled in the first place" do
|
136
|
-
subject.
|
137
|
-
subject.
|
138
|
+
subject.should_receive(:variable).once.with('DYNAMIC_FEATURES').and_return 'atxfer'
|
139
|
+
subject.should_receive(:variable).never
|
138
140
|
subject.disable_feature "jay"
|
139
141
|
end
|
140
142
|
end
|
141
143
|
|
142
144
|
describe "#variable" do
|
143
145
|
it "should call set_variable when Hash argument given" do
|
144
|
-
subject.
|
146
|
+
subject.should_receive(:set_variable).once.with :ohai, "ur_home_erly"
|
145
147
|
subject.variable :ohai => 'ur_home_erly'
|
146
148
|
end
|
147
149
|
|
148
150
|
it "should call set_variable for every Hash-key given" do
|
149
151
|
many_args = { :a => :b, :c => :d, :e => :f, :g => :h}
|
150
|
-
subject.
|
152
|
+
subject.should_receive(:set_variable).exactly(many_args.size).times
|
151
153
|
subject.variable many_args
|
152
154
|
end
|
153
155
|
|
154
156
|
it "should call get_variable for every String given" do
|
155
157
|
variables = ["foo", "bar", :qaz, :qwerty, :baz]
|
156
158
|
variables.each do |var|
|
157
|
-
subject.
|
159
|
+
subject.should_receive(:get_variable).once.with(var).and_return("X")
|
158
160
|
end
|
159
161
|
subject.variable(*variables).should == ["X"] * variables.size
|
160
162
|
end
|
161
163
|
|
162
164
|
it "should NOT return an Array when just one arg is given" do
|
163
|
-
subject.
|
165
|
+
subject.should_receive(:get_variable).once.and_return "lol"
|
164
166
|
subject.variable(:foo).should_not be_a Array
|
165
167
|
end
|
166
168
|
|
@@ -173,21 +175,21 @@ module Adhearsion::Asterisk
|
|
173
175
|
|
174
176
|
describe "#set_variable" do
|
175
177
|
it "uses SET VARIABLE" do
|
176
|
-
subject.
|
178
|
+
subject.should_receive(:agi).once.with 'SET VARIABLE', 'foo', 'i can " has ruby?'
|
177
179
|
subject.set_variable 'foo', 'i can " has ruby?'
|
178
180
|
end
|
179
181
|
end
|
180
182
|
|
181
183
|
describe '#get_variable' do
|
182
184
|
it 'uses GET VARIABLE and extracts the value from the data' do
|
183
|
-
subject.
|
185
|
+
subject.should_receive(:agi).once.with('GET VARIABLE', 'foo').and_return [200, 1, 'bar']
|
184
186
|
subject.get_variable('foo').should == 'bar'
|
185
187
|
end
|
186
188
|
end
|
187
189
|
|
188
190
|
describe "#sip_add_header" do
|
189
191
|
it "executes SIPAddHeader" do
|
190
|
-
subject.
|
192
|
+
subject.should_receive(:execute).once.with 'SIPAddHeader', 'x-ahn-header: rubyrox'
|
191
193
|
subject.sip_add_header "x-ahn-header", "rubyrox"
|
192
194
|
end
|
193
195
|
end
|
@@ -195,7 +197,7 @@ module Adhearsion::Asterisk
|
|
195
197
|
describe "#sip_get_header" do
|
196
198
|
it "uses #get_variable to get the header value" do
|
197
199
|
value = 'jason-was-here'
|
198
|
-
subject.
|
200
|
+
subject.should_receive(:get_variable).once.with('SIP_HEADER(x-ahn-header)').and_return value
|
199
201
|
subject.sip_get_header("x-ahn-header").should == value
|
200
202
|
end
|
201
203
|
end
|
@@ -203,25 +205,25 @@ module Adhearsion::Asterisk
|
|
203
205
|
describe '#join' do
|
204
206
|
it "should pass the 'd' flag when no options are given" do
|
205
207
|
conference_id = "123"
|
206
|
-
subject.
|
208
|
+
subject.should_receive(:execute).once.with("MeetMe", conference_id, "d", nil)
|
207
209
|
subject.meetme conference_id
|
208
210
|
end
|
209
211
|
|
210
212
|
it "should pass through any given flags with 'd' appended to it if necessary" do
|
211
213
|
conference_id, flags = "1000", "zomgs"
|
212
|
-
subject.
|
214
|
+
subject.should_receive(:execute).once.with("MeetMe", conference_id, flags + "d", nil)
|
213
215
|
subject.meetme conference_id, :options => flags
|
214
216
|
end
|
215
217
|
|
216
218
|
it "should NOT pass the 'd' flag when requiring static conferences" do
|
217
219
|
conference_id, options = "1000", {:use_static_conf => true}
|
218
|
-
subject.
|
220
|
+
subject.should_receive(:execute).once.with("MeetMe", conference_id, "", nil)
|
219
221
|
subject.meetme conference_id, options
|
220
222
|
end
|
221
223
|
|
222
224
|
it "should raise an ArgumentError when the pin is not numerical" do
|
223
225
|
lambda {
|
224
|
-
subject.
|
226
|
+
subject.should_receive(:execute).never
|
225
227
|
subject.meetme 3333, :pin => "letters are bad, mkay?!1"
|
226
228
|
}.should raise_error ArgumentError
|
227
229
|
end
|
@@ -229,7 +231,7 @@ module Adhearsion::Asterisk
|
|
229
231
|
it "should strip out illegal characters from a conference name" do
|
230
232
|
bizarre_conference_name = "a- bc!d&&e--`"
|
231
233
|
normal_conference_name = "abcde"
|
232
|
-
subject.
|
234
|
+
subject.should_receive(:execute).twice.with("MeetMe", normal_conference_name, "d", nil)
|
233
235
|
|
234
236
|
subject.meetme bizarre_conference_name
|
235
237
|
subject.meetme normal_conference_name
|
@@ -237,7 +239,7 @@ module Adhearsion::Asterisk
|
|
237
239
|
|
238
240
|
it "should allow textual conference names" do
|
239
241
|
lambda {
|
240
|
-
subject.
|
242
|
+
subject.should_receive(:execute).once
|
241
243
|
subject.meetme "david bowie's pants"
|
242
244
|
}.should_not raise_error
|
243
245
|
end
|
@@ -245,28 +247,28 @@ module Adhearsion::Asterisk
|
|
245
247
|
|
246
248
|
describe '#voicemail' do
|
247
249
|
it 'should not send the context name when none is given' do
|
248
|
-
subject.
|
250
|
+
subject.should_receive(:execute).once.with('voicemail', 123, '').and_throw :sent_voicemail!
|
249
251
|
lambda { subject.voicemail 123 }.should throw_symbol(:sent_voicemail!)
|
250
252
|
end
|
251
253
|
|
252
254
|
it 'should send the context name when one is given' do
|
253
255
|
mailbox_number, context_name = 333, 'doesntmatter'
|
254
|
-
subject.
|
256
|
+
subject.should_receive(:execute).once.with('voicemail', "#{mailbox_number}@#{context_name}", '').and_throw :sent_voicemail!
|
255
257
|
lambda { subject.voicemail(context_name => mailbox_number) }.should throw_symbol(:sent_voicemail!)
|
256
258
|
end
|
257
259
|
|
258
260
|
it 'should pass in the s option if :skip => true' do
|
259
261
|
mailbox_number = '012'
|
260
|
-
subject.
|
262
|
+
subject.should_receive(:execute).once.with('voicemail', mailbox_number, 's').and_throw :sent_voicemail!
|
261
263
|
lambda { subject.voicemail(mailbox_number, :skip => true) }.should throw_symbol(:sent_voicemail!)
|
262
264
|
end
|
263
265
|
|
264
266
|
it 'should combine mailbox numbers with the context name given when both are given' do
|
265
|
-
subject.
|
267
|
+
subject.should_receive(:variable).with("VMSTATUS").and_return 'SUCCESS'
|
266
268
|
context = "lolcats"
|
267
269
|
mailboxes = [1,2,3,4,5]
|
268
270
|
mailboxes_with_context = mailboxes.map { |mailbox| [mailbox, context].join '@' }
|
269
|
-
subject.
|
271
|
+
subject.should_receive(:execute).once.with('voicemail', mailboxes_with_context.join('&'), '')
|
270
272
|
subject.voicemail context => mailboxes
|
271
273
|
end
|
272
274
|
|
@@ -296,13 +298,13 @@ module Adhearsion::Asterisk
|
|
296
298
|
|
297
299
|
it 'should pass in the u option if :greeting => :unavailable' do
|
298
300
|
mailbox_number = '776'
|
299
|
-
subject.
|
301
|
+
subject.should_receive(:execute).once.with('voicemail', mailbox_number, 'u').and_throw :sent_voicemail!
|
300
302
|
lambda { subject.voicemail(mailbox_number, :greeting => :unavailable) }.should throw_symbol(:sent_voicemail!)
|
301
303
|
end
|
302
304
|
|
303
305
|
it 'should pass in both the skip and greeting options if both are supplied' do
|
304
306
|
mailbox_number = '4'
|
305
|
-
subject.
|
307
|
+
subject.should_receive(:execute).once.with('voicemail', mailbox_number, 'u').and_throw :sent_voicemail!
|
306
308
|
lambda { subject.voicemail(mailbox_number, :greeting => :unavailable) }.should throw_symbol(:sent_voicemail!)
|
307
309
|
end
|
308
310
|
|
@@ -318,25 +320,25 @@ module Adhearsion::Asterisk
|
|
318
320
|
|
319
321
|
it 'should pass in the b option if :gretting => :busy' do
|
320
322
|
mailbox_number = '1'
|
321
|
-
subject.
|
323
|
+
subject.should_receive(:execute).once.with('voicemail', mailbox_number, 'b').and_throw :sent_voicemail!
|
322
324
|
lambda { subject.voicemail(mailbox_number, :greeting => :busy) }.should throw_symbol(:sent_voicemail!)
|
323
325
|
end
|
324
326
|
|
325
327
|
it 'should return true if VMSTATUS == "SUCCESS"' do
|
326
|
-
subject.
|
327
|
-
subject.
|
328
|
+
subject.should_receive(:execute).once
|
329
|
+
subject.should_receive(:variable).once.with('VMSTATUS').and_return "SUCCESS"
|
328
330
|
subject.voicemail(3).should be true
|
329
331
|
end
|
330
332
|
|
331
333
|
it 'should return false if VMSTATUS == "USEREXIT"' do
|
332
|
-
subject.
|
333
|
-
subject.
|
334
|
+
subject.should_receive(:execute).once
|
335
|
+
subject.should_receive(:variable).once.with('VMSTATUS').and_return "USEREXIT"
|
334
336
|
subject.voicemail(2).should be false
|
335
337
|
end
|
336
338
|
|
337
339
|
it 'should return nil if VMSTATUS == "FAILED"' do
|
338
|
-
subject.
|
339
|
-
subject.
|
340
|
+
subject.should_receive(:execute).once
|
341
|
+
subject.should_receive(:variable).once.with('VMSTATUS').and_return "FAILED"
|
340
342
|
subject.voicemail(2).should be nil
|
341
343
|
end
|
342
344
|
end
|
@@ -345,48 +347,48 @@ module Adhearsion::Asterisk
|
|
345
347
|
it "the :folder Hash key argument should wrap the value in a()" do
|
346
348
|
folder = "foobar"
|
347
349
|
mailbox = 81
|
348
|
-
subject.
|
350
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "#{mailbox}","a(#{folder})")
|
349
351
|
subject.voicemail_main :mailbox => mailbox, :folder => folder
|
350
352
|
end
|
351
353
|
|
352
354
|
it ':authenticate should pass in the "s" option if given false' do
|
353
355
|
mailbox = 333
|
354
|
-
subject.
|
356
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "#{mailbox}","s")
|
355
357
|
subject.voicemail_main :mailbox => mailbox, :authenticate => false
|
356
358
|
end
|
357
359
|
|
358
360
|
it ':authenticate should pass in the s option if given false' do
|
359
361
|
mailbox = 55
|
360
|
-
subject.
|
362
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "#{mailbox}")
|
361
363
|
subject.voicemail_main :mailbox => mailbox, :authenticate => true
|
362
364
|
end
|
363
365
|
|
364
366
|
it 'should not pass any flags only a mailbox is given' do
|
365
367
|
mailbox = "1"
|
366
|
-
subject.
|
368
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "#{mailbox}")
|
367
369
|
subject.voicemail_main :mailbox => mailbox
|
368
370
|
end
|
369
371
|
|
370
372
|
it 'when given no mailbox or context an empty string should be passed to execute as the first argument' do
|
371
|
-
subject.
|
373
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "", "s")
|
372
374
|
subject.voicemail_main :authenticate => false
|
373
375
|
end
|
374
376
|
|
375
377
|
it 'should properly concatenate the options when given multiple ones' do
|
376
378
|
folder = "ohai"
|
377
379
|
mailbox = 9999
|
378
|
-
subject.
|
380
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "#{mailbox}", "sa(#{folder})")
|
379
381
|
subject.voicemail_main :mailbox => mailbox, :authenticate => false, :folder => folder
|
380
382
|
end
|
381
383
|
|
382
384
|
it 'should not require any arguments' do
|
383
|
-
subject.
|
385
|
+
subject.should_receive(:execute).once.with("VoiceMailMain")
|
384
386
|
subject.voicemail_main
|
385
387
|
end
|
386
388
|
|
387
389
|
it 'should pass in the "@context_name" part in if a :context is given and no mailbox is given' do
|
388
390
|
context_name = "icanhascheezburger"
|
389
|
-
subject.
|
391
|
+
subject.should_receive(:execute).once.with("VoiceMailMain", "@#{context_name}")
|
390
392
|
subject.voicemail_main :context => context_name
|
391
393
|
end
|
392
394
|
|
@@ -425,17 +427,17 @@ module Adhearsion::Asterisk
|
|
425
427
|
let(:time_format) { 'IMp' }
|
426
428
|
|
427
429
|
it "if a Date object is passed in, SayUnixTime is sent with the argument and format" do
|
428
|
-
subject.
|
430
|
+
subject.should_receive(:execute).once.with("SayUnixTime", date.to_time.to_i, "", date_format)
|
429
431
|
subject.play_time(date, :format => date_format)
|
430
432
|
end
|
431
433
|
|
432
434
|
it "if a Time object is passed in, SayUnixTime is sent with the argument and format" do
|
433
|
-
subject.
|
435
|
+
subject.should_receive(:execute).once.with("SayUnixTime", time.to_i, "", time_format)
|
434
436
|
subject.play_time(time, :format => time_format)
|
435
437
|
end
|
436
438
|
|
437
439
|
it "if a Time object is passed in alone, SayUnixTime is sent with the argument and the default format" do
|
438
|
-
subject.
|
440
|
+
subject.should_receive(:execute).once.with("SayUnixTime", time.to_i, "", "")
|
439
441
|
subject.play_time(time)
|
440
442
|
end
|
441
443
|
|
@@ -444,7 +446,7 @@ module Adhearsion::Asterisk
|
|
444
446
|
describe "#play_numeric" do
|
445
447
|
let(:numeric) { 20 }
|
446
448
|
it "should send the correct command SayNumber playing a numeric argument" do
|
447
|
-
subject.
|
449
|
+
subject.should_receive(:execute).once.with("SayNumber", numeric)
|
448
450
|
subject.play_numeric(numeric)
|
449
451
|
end
|
450
452
|
end
|
@@ -452,7 +454,7 @@ module Adhearsion::Asterisk
|
|
452
454
|
describe "#play_digits" do
|
453
455
|
let(:numeric) { 20 }
|
454
456
|
it "should send the correct command SayDigits playing a numeric argument" do
|
455
|
-
subject.
|
457
|
+
subject.should_receive(:execute).once.with("SayDigits", numeric)
|
456
458
|
subject.play_digits(numeric)
|
457
459
|
end
|
458
460
|
end
|
@@ -460,7 +462,7 @@ module Adhearsion::Asterisk
|
|
460
462
|
describe "#play_tones" do
|
461
463
|
context "should send the correct command Playtones playing tones" do
|
462
464
|
before do
|
463
|
-
subject.
|
465
|
+
subject.should_receive(:execute).once.with("Playtones", "!950/330,!1400/330,!1800/330,0")
|
464
466
|
end
|
465
467
|
|
466
468
|
it "given as a string" do
|
@@ -472,7 +474,7 @@ module Adhearsion::Asterisk
|
|
472
474
|
end
|
473
475
|
|
474
476
|
it "and sleep for the duration when instructed" do
|
475
|
-
subject.
|
477
|
+
subject.should_receive(:sleep).once.with(0.99)
|
476
478
|
subject.play_tones("!950/330,!1400/330,!1800/330,0", true)
|
477
479
|
end
|
478
480
|
end
|
@@ -481,15 +483,15 @@ module Adhearsion::Asterisk
|
|
481
483
|
describe "#play_soundfile" do
|
482
484
|
let(:audiofile) { "tt-monkeys" }
|
483
485
|
it "should send the correct command Playback playing an audio file" do
|
484
|
-
subject.
|
485
|
-
# subject.
|
486
|
-
subject.
|
486
|
+
subject.should_receive(:execute).once.with("Playback", audiofile)
|
487
|
+
# subject.should_receive(:execute).once.with("Playback", audiofile).and_return([200, 1, nil])
|
488
|
+
subject.should_receive(:get_variable).once.with("PLAYBACKSTATUS").and_return(PLAYBACK_SUCCESS)
|
487
489
|
subject.play_soundfile(audiofile)
|
488
490
|
end
|
489
491
|
|
490
492
|
it "should return false if playback fails" do
|
491
|
-
subject.
|
492
|
-
subject.
|
493
|
+
subject.should_receive(:execute).once.with("Playback", audiofile)
|
494
|
+
subject.should_receive(:get_variable).once.with("PLAYBACKSTATUS").and_return('FAILED')
|
493
495
|
subject.play_soundfile(audiofile).should == false
|
494
496
|
end
|
495
497
|
end
|
@@ -498,7 +500,7 @@ module Adhearsion::Asterisk
|
|
498
500
|
context 'executes Playtones with 0 as an argument if it' do
|
499
501
|
before do
|
500
502
|
command = Punchblock::Component::Asterisk::AGI::Command.new :name => "EXEC Playtones", :params => ["0"]
|
501
|
-
@expect_command = subject.
|
503
|
+
@expect_command = subject.should_receive(:execute_component_and_await_completion).with(command)
|
502
504
|
end
|
503
505
|
|
504
506
|
it 'is not given a block' do
|
@@ -507,7 +509,7 @@ module Adhearsion::Asterisk
|
|
507
509
|
end
|
508
510
|
|
509
511
|
it 'is given a block, which it then yields' do
|
510
|
-
@expect_command.
|
512
|
+
@expect_command.exactly(3).times
|
511
513
|
expect { |b| subject.generate_silence { b.to_proc.call; run; run } }.to yield_with_no_args
|
512
514
|
end
|
513
515
|
|
@@ -542,6 +544,48 @@ module Adhearsion::Asterisk
|
|
542
544
|
end
|
543
545
|
end
|
544
546
|
end
|
547
|
+
|
548
|
+
describe "#goto" do
|
549
|
+
let(:context) { "foo" }
|
550
|
+
let(:extension) { "s" }
|
551
|
+
let(:priority) { 1 }
|
552
|
+
|
553
|
+
it "sets the call to not hangup after execution" do
|
554
|
+
call.should_receive(:[]=).with(:ahn_prevent_hangup, true)
|
555
|
+
subject.should_receive(:execute).with('Goto', context, extension, priority)
|
556
|
+
subject.should_receive(:set_variable).with('PUNCHBLOCK_END_ON_ASYNCAGI_BREAK', 'true').once
|
557
|
+
subject.should_receive(:agi).with("ASYNCAGI BREAK").at_most :once
|
558
|
+
subject.goto(context, extension, priority)
|
559
|
+
end
|
560
|
+
|
561
|
+
it "releases control of the call using ASYNCAGI BREAK" do
|
562
|
+
call.should_receive(:[]=).with(:ahn_prevent_hangup, true).at_most :once
|
563
|
+
subject.should_receive(:execute).with('Goto', context, extension, priority).at_most :once
|
564
|
+
subject.should_receive(:set_variable).with('PUNCHBLOCK_END_ON_ASYNCAGI_BREAK', 'true').once
|
565
|
+
subject.should_receive(:agi).with("ASYNCAGI BREAK").once
|
566
|
+
subject.goto(context, extension, priority)
|
567
|
+
end
|
568
|
+
|
569
|
+
context "number of arguments" do
|
570
|
+
before :each do
|
571
|
+
call.should_receive(:[]=).with(:ahn_prevent_hangup, true).at_most :once
|
572
|
+
subject.should_receive(:set_variable).with('PUNCHBLOCK_END_ON_ASYNCAGI_BREAK', 'true').once
|
573
|
+
subject.should_receive(:agi).with("ASYNCAGI BREAK").at_most :once
|
574
|
+
end
|
575
|
+
it "executes Goto with 3 arguments when passed all 3" do
|
576
|
+
subject.should_receive(:execute).with('Goto', context, extension, priority)
|
577
|
+
subject.goto(context, extension, priority)
|
578
|
+
end
|
579
|
+
it "executes Goto with 2 arguments when passed 2" do
|
580
|
+
subject.should_receive(:execute).with('Goto', context, extension)
|
581
|
+
subject.goto(context, extension)
|
582
|
+
end
|
583
|
+
it "executes Goto with 1 arguments when passed 1" do
|
584
|
+
subject.should_receive(:execute).with('Goto', context)
|
585
|
+
subject.goto(context)
|
586
|
+
end
|
587
|
+
end
|
588
|
+
end
|
545
589
|
end
|
546
590
|
end#main describe
|
547
591
|
end
|