rspec-rayo 0.2.0 → 0.3.0
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.
- data/CHANGELOG.md +8 -0
- data/Gemfile +1 -1
- data/Guardfile +5 -0
- data/README.md +1 -5
- data/lib/rspec-rayo.rb +33 -4
- data/lib/rspec-rayo/{rayo/call.rb → call.rb} +29 -29
- data/lib/rspec-rayo/driver.rb +82 -0
- data/lib/rspec-rayo/{rayo/matchers.rb → matchers.rb} +3 -8
- data/lib/rspec-rayo/{rayo/matchers → matchers}/call_control.rb +0 -0
- data/lib/rspec-rayo/{rayo/matchers → matchers}/dtmf.rb +0 -0
- data/lib/rspec-rayo/{rayo/matchers → matchers}/input.rb +0 -0
- data/lib/rspec-rayo/{rayo/matchers → matchers}/join.rb +8 -8
- data/lib/rspec-rayo/{rayo/matchers → matchers}/output.rb +0 -0
- data/lib/rspec-rayo/{rayo/matchers → matchers}/recording.rb +0 -0
- data/lib/rspec-rayo/version.rb +1 -1
- data/rspec-rayo.gemspec +6 -6
- data/spec/rspec-rayo/rayo/matchers/join_spec.rb +6 -6
- data/spec/spec_helper.rb +0 -1
- metadata +43 -55
- data/lib/rspec-rayo/rayo/driver.rb +0 -113
- data/lib/rspec-rayo/rayo/matchers/ask.rb +0 -60
- data/lib/rspec-rayo/rayo/matchers/conference.rb +0 -73
- data/lib/rspec-rayo/rayo/matchers/say.rb +0 -15
- data/lib/rspec-rayo/rayo/matchers/transfer.rb +0 -31
- data/lib/rspec-rayo/tropo1/driver.rb +0 -51
- data/spec/rspec-rayo/rayo/matchers/ask_spec.rb +0 -43
- data/spec/rspec-rayo/rayo/matchers/conference_spec.rb +0 -54
- data/spec/rspec-rayo/rayo/matchers/say_spec.rb +0 -23
- data/spec/rspec-rayo/rayo/matchers/transfer_spec.rb +0 -23
data/CHANGELOG.md
ADDED
data/Gemfile
CHANGED
data/Guardfile
ADDED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
rspec-rayo
|
2
2
|
============
|
3
3
|
|
4
|
-
This library extends the Rspec testing library for Rayo specific expectations. The library also provides
|
4
|
+
This library extends the Rspec testing library for Rayo specific expectations. The library also provides a Rayo driver using Punchblock.
|
5
5
|
|
6
6
|
Howto Install
|
7
7
|
-------------
|
@@ -11,15 +11,11 @@ Howto Install
|
|
11
11
|
Example Driver Setup
|
12
12
|
--------------------
|
13
13
|
|
14
|
-
ap "Starting RayoDriver to manage events over XMPP."
|
15
14
|
@rayo = RSpecRayo::RayoDriver.new :username => @config['rayo_server']['jid'],
|
16
15
|
:password => @config['rayo_server']['password'],
|
17
16
|
:wire_logger => Logger.new(@config['rayo_server']['wire_log']),
|
18
17
|
:transport_logger => Logger.new(@config['rayo_server']['transport_log'])
|
19
18
|
|
20
|
-
ap "Starting Tropo1Driver to host scripts via DRb and launch calls via HTTP."
|
21
|
-
@tropo1 = RSpecRayo::Tropo1Driver.new(@config['tropo1']['druby_uri'])
|
22
|
-
|
23
19
|
Custom Matchers
|
24
20
|
---------------
|
25
21
|
|
data/lib/rspec-rayo.rb
CHANGED
@@ -1,7 +1,36 @@
|
|
1
1
|
%w{
|
2
|
-
|
2
|
+
punchblock
|
3
3
|
|
4
|
-
rspec-rayo/
|
5
|
-
rspec-rayo/
|
6
|
-
rspec-rayo/
|
4
|
+
rspec-rayo/version
|
5
|
+
rspec-rayo/driver
|
6
|
+
rspec-rayo/call
|
7
|
+
rspec-rayo/matchers
|
7
8
|
}.each { |lib| require lib }
|
9
|
+
|
10
|
+
module Punchblock
|
11
|
+
class CommandNode
|
12
|
+
def await_completion(timeout = 60)
|
13
|
+
tap do |c|
|
14
|
+
c.response timeout
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module Component
|
20
|
+
class ComponentNode
|
21
|
+
attr_accessor :event_queue
|
22
|
+
|
23
|
+
def initialize(*args)
|
24
|
+
super
|
25
|
+
@event_queue = Queue.new
|
26
|
+
register_event_handler do |event|
|
27
|
+
@event_queue << event
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def next_event(timeout = nil)
|
32
|
+
Timeout::timeout(timeout || $config['rayo_queue']['connection_timeout']) { event_queue.pop }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -6,13 +6,14 @@ module RSpecRayo
|
|
6
6
|
attr_reader :queue
|
7
7
|
|
8
8
|
def initialize(options)
|
9
|
-
@
|
10
|
-
self.call_event = options[:call_event] if options[:call_event]
|
9
|
+
@offer_event = FutureResource.new
|
11
10
|
@ring_event = FutureResource.new
|
11
|
+
@queue = Queue.new
|
12
|
+
|
12
13
|
@client = options[:client]
|
13
|
-
@queue = options[:queue]
|
14
14
|
@read_timeout = options[:read_timeout] || 5
|
15
15
|
@write_timeout = options[:write_timeout] || 5
|
16
|
+
|
16
17
|
@status = :offered
|
17
18
|
end
|
18
19
|
|
@@ -26,14 +27,6 @@ module RSpecRayo
|
|
26
27
|
write Punchblock::Command::Answer.new
|
27
28
|
end
|
28
29
|
|
29
|
-
def ask(options = {})
|
30
|
-
write Punchblock::Component::Tropo::Ask.new(options)
|
31
|
-
end
|
32
|
-
|
33
|
-
def conference(options = {})
|
34
|
-
write Punchblock::Component::Tropo::Conference.new(options)
|
35
|
-
end
|
36
|
-
|
37
30
|
def dial(options = {})
|
38
31
|
write Punchblock::Command::Dial.new(options)
|
39
32
|
end
|
@@ -54,14 +47,6 @@ module RSpecRayo
|
|
54
47
|
end
|
55
48
|
end
|
56
49
|
|
57
|
-
def say(options = {})
|
58
|
-
write Punchblock::Component::Tropo::Say.new(options)
|
59
|
-
end
|
60
|
-
|
61
|
-
def transfer(options = {})
|
62
|
-
write Punchblock::Component::Tropo::Transfer.new(options)
|
63
|
-
end
|
64
|
-
|
65
50
|
def record(options = {})
|
66
51
|
write Punchblock::Component::Record.new(options)
|
67
52
|
end
|
@@ -106,30 +91,45 @@ module RSpecRayo
|
|
106
91
|
Timeout::timeout(timeout || @read_timeout) { @queue.pop }
|
107
92
|
end
|
108
93
|
|
109
|
-
def
|
110
|
-
@
|
94
|
+
def offer_event
|
95
|
+
@offer_event.resource @read_timeout
|
111
96
|
end
|
112
97
|
|
113
|
-
def
|
114
|
-
|
115
|
-
@
|
116
|
-
@
|
98
|
+
def offer_event=(other)
|
99
|
+
pb_logger.debug "Setting offer_event to #{other.inspect}"
|
100
|
+
@offer_event.resource = other
|
101
|
+
@offer_id = other.call_id
|
117
102
|
end
|
118
103
|
|
119
|
-
def ring_event
|
120
|
-
@ring_event.resource
|
104
|
+
def ring_event(timeout = @read_timeout)
|
105
|
+
@ring_event.resource timeout
|
121
106
|
end
|
122
107
|
|
123
108
|
def ring_event=(other)
|
124
|
-
|
109
|
+
pb_logger.debug "Setting ring_event to #{other.inspect}"
|
125
110
|
@ring_event.resource = other
|
126
111
|
end
|
127
112
|
|
113
|
+
def <<(event)
|
114
|
+
pb_logger.debug "Processing event #{event.inspect}"
|
115
|
+
case event
|
116
|
+
when Punchblock::Event::Offer
|
117
|
+
pb_logger.debug "Received an offer event"
|
118
|
+
self.offer_event = event
|
119
|
+
when Punchblock::Event::Ringing
|
120
|
+
pb_logger.debug "Received a ringing event"
|
121
|
+
self.ring_event = event
|
122
|
+
when Punchblock::Event::End
|
123
|
+
pb_logger.debug "Received an end event"
|
124
|
+
@status = :finished
|
125
|
+
end
|
126
|
+
@queue << event if event
|
127
|
+
end
|
128
|
+
|
128
129
|
private
|
129
130
|
|
130
131
|
def write(msg)
|
131
132
|
response = @client.execute_command msg, :call_id => @call_id, :async => false
|
132
|
-
raise response if response.is_a?(Exception)
|
133
133
|
msg if response
|
134
134
|
end
|
135
135
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'countdownlatch'
|
2
|
+
|
3
|
+
module RSpecRayo
|
4
|
+
class RayoDriver
|
5
|
+
attr_reader :call_queue, :calls
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
@calls = {}
|
9
|
+
@call_queue = Queue.new
|
10
|
+
@queue_timeout = options.delete(:queue_timeout) || 5
|
11
|
+
@write_timeout = options.delete(:write_timeout) || 5
|
12
|
+
@threads = []
|
13
|
+
@connection_latch = CountDownLatch.new 1
|
14
|
+
|
15
|
+
initialize_punchblock options
|
16
|
+
end
|
17
|
+
|
18
|
+
def wait_for_connection(timeout = nil)
|
19
|
+
@connection_latch.wait timeout
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_call
|
23
|
+
Timeout::timeout(@queue_timeout) { @call_queue.pop }
|
24
|
+
end
|
25
|
+
|
26
|
+
def cleanup_calls
|
27
|
+
@calls.each_pair do |call_id, call|
|
28
|
+
call.hangup unless call.status == :finished
|
29
|
+
end
|
30
|
+
@calls = {}
|
31
|
+
end
|
32
|
+
|
33
|
+
def dial(options)
|
34
|
+
new_call.tap do |call|
|
35
|
+
dial = call.dial options
|
36
|
+
call.call_id = dial.call_id
|
37
|
+
@calls[call.call_id] = call
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def new_call
|
44
|
+
Call.new :client => @pb_client,
|
45
|
+
:read_timeout => @queue_timeout,
|
46
|
+
:write_timeout => @write_timeout
|
47
|
+
end
|
48
|
+
|
49
|
+
def initialize_punchblock(options)
|
50
|
+
logger = Logger.new 'punchblock.log'
|
51
|
+
|
52
|
+
def logger.trace(*args)
|
53
|
+
debug *args
|
54
|
+
end
|
55
|
+
|
56
|
+
Punchblock.logger = logger
|
57
|
+
|
58
|
+
connection = Punchblock::Connection::XMPP.new options
|
59
|
+
|
60
|
+
@pb_client = Punchblock::Client.new :connection => connection,
|
61
|
+
:write_timeout => options[:write_timeout]
|
62
|
+
|
63
|
+
@pb_client.register_event_handler do |event|
|
64
|
+
if event.is_a?(Punchblock::Connection::Connected)
|
65
|
+
logger.info "Connected!"
|
66
|
+
@connection_latch.countdown!
|
67
|
+
throw :pass
|
68
|
+
end
|
69
|
+
|
70
|
+
if call = @calls[event.call_id]
|
71
|
+
@calls[event.call_id] << event
|
72
|
+
else
|
73
|
+
call = new_call
|
74
|
+
@calls[event.call_id] = call
|
75
|
+
@call_queue.push call
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
Thread.new { @pb_client.run }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -12,20 +12,17 @@ def match_type(object, type)
|
|
12
12
|
end
|
13
13
|
|
14
14
|
%w{
|
15
|
-
ask
|
16
15
|
call_control
|
17
|
-
conference
|
18
16
|
dtmf
|
19
17
|
input
|
20
18
|
join
|
21
19
|
output
|
22
20
|
recording
|
23
|
-
|
24
|
-
transfer
|
25
|
-
}.each { |matcher| require "rspec-rayo/rayo/matchers/#{matcher}" }
|
21
|
+
}.each { |matcher| require "rspec-rayo/matchers/#{matcher}" }
|
26
22
|
|
27
23
|
RSpec::Matchers.define :have_executed_correctly do
|
28
24
|
match_for_should do |command|
|
25
|
+
command.await_completion
|
29
26
|
match_type command, Punchblock::CommandNode do
|
30
27
|
unless command.executing?
|
31
28
|
@error = "expected status to be #{:executing.inspect}, got #{command.state_name}"
|
@@ -45,9 +42,7 @@ end
|
|
45
42
|
|
46
43
|
RSpec::Matchers.define :have_dialed_correctly do
|
47
44
|
match_for_should do |call|
|
48
|
-
match_type call, RSpecRayo::Call
|
49
|
-
call.ring_event.should be_a_valid_ringing_event
|
50
|
-
end
|
45
|
+
match_type call, RSpecRayo::Call
|
51
46
|
end
|
52
47
|
|
53
48
|
failure_message_for_should do |actual|
|
File without changes
|
File without changes
|
File without changes
|
@@ -3,14 +3,14 @@ RSpec::Matchers.define :be_a_valid_joined_event do
|
|
3
3
|
@other_call_id = other_call_id
|
4
4
|
end
|
5
5
|
|
6
|
-
chain :
|
7
|
-
@
|
6
|
+
chain :with_mixer_name do |mixer_name|
|
7
|
+
@mixer_name = mixer_name
|
8
8
|
end
|
9
9
|
|
10
10
|
match_for_should do |event|
|
11
11
|
match_type event, Punchblock::Event::Joined do
|
12
12
|
@error = "The other call ID was not correct. Expected '#{@other_call_id}', got '#{event.other_call_id}'" if @other_call_id && event.other_call_id != @other_call_id
|
13
|
-
@error = "The mixer ID was not correct. Expected '#{@
|
13
|
+
@error = "The mixer ID was not correct. Expected '#{@mixer_name}', got '#{event.mixer_name}'" if @mixer_name && event.mixer_name != @mixer_name
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -21,7 +21,7 @@ RSpec::Matchers.define :be_a_valid_joined_event do
|
|
21
21
|
description do
|
22
22
|
"be a valid joined event".tap do |d|
|
23
23
|
d << " with other call ID '#{@other_call_id}'" if @other_call_id
|
24
|
-
d << " with mixer ID '#{@
|
24
|
+
d << " with mixer ID '#{@mixer_name}'" if @mixer_name
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -31,14 +31,14 @@ RSpec::Matchers.define :be_a_valid_unjoined_event do
|
|
31
31
|
@other_call_id = other_call_id
|
32
32
|
end
|
33
33
|
|
34
|
-
chain :
|
35
|
-
@
|
34
|
+
chain :with_mixer_name do |mixer_name|
|
35
|
+
@mixer_name = mixer_name
|
36
36
|
end
|
37
37
|
|
38
38
|
match_for_should do |event|
|
39
39
|
match_type event, Punchblock::Event::Unjoined do
|
40
40
|
@error = "The other call ID was not correct. Expected '#{@other_call_id}', got '#{event.other_call_id}'" if @other_call_id && event.other_call_id != @other_call_id
|
41
|
-
@error = "The mixer ID was not correct. Expected '#{@
|
41
|
+
@error = "The mixer ID was not correct. Expected '#{@mixer_name}', got '#{event.mixer_name}'" if @mixer_name && event.mixer_name != @mixer_name
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
@@ -49,7 +49,7 @@ RSpec::Matchers.define :be_a_valid_unjoined_event do
|
|
49
49
|
description do
|
50
50
|
"be a valid unjoined event".tap do |d|
|
51
51
|
d << " with other call ID '#{@other_call_id}'" if @other_call_id
|
52
|
-
d << " with mixer ID '#{@
|
52
|
+
d << " with mixer ID '#{@mixer_name}'" if @mixer_name
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
File without changes
|
File without changes
|
data/lib/rspec-rayo/version.rb
CHANGED
data/rspec-rayo.gemspec
CHANGED
@@ -18,14 +18,14 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_dependency %q<rspec>, [">= 2.
|
22
|
-
s.add_dependency %q<punchblock>, [">= 0.
|
21
|
+
s.add_dependency %q<rspec>, [">= 2.9.0.rc1"]
|
22
|
+
s.add_dependency %q<punchblock>, [">= 0.9.2"]
|
23
23
|
s.add_dependency %q<countdownlatch>, [">= 1.0.0"]
|
24
|
-
s.add_dependency %q<future-resource>, [">= 0.0
|
24
|
+
s.add_dependency %q<future-resource>, [">= 1.0.0"]
|
25
25
|
|
26
|
-
s.add_development_dependency %q<yard>, ["
|
27
|
-
s.add_development_dependency %q<bundler>, ["
|
28
|
-
s.add_development_dependency %q<rcov>, [">= 0"]
|
26
|
+
s.add_development_dependency %q<yard>, [">= 0.6.0"]
|
27
|
+
s.add_development_dependency %q<bundler>, [">= 1.0.0"]
|
29
28
|
s.add_development_dependency %q<rake>, [">= 0"]
|
30
29
|
s.add_development_dependency %q<ci_reporter>, [">= 1.6.3"]
|
30
|
+
s.add_development_dependency %q<guard-rspec>
|
31
31
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "Rayo call control matchers" do
|
4
4
|
describe "a joined event" do
|
5
5
|
subject do
|
6
|
-
Punchblock::Event::Joined.new(:other_call_id => 'foo', :
|
6
|
+
Punchblock::Event::Joined.new(:other_call_id => 'foo', :mixer_name => 'foo1').tap do |event|
|
7
7
|
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
8
8
|
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
9
9
|
end
|
@@ -12,13 +12,13 @@ describe "Rayo call control matchers" do
|
|
12
12
|
it { should be_a_valid_joined_event }
|
13
13
|
it { should be_a_valid_joined_event.with_other_call_id('foo') }
|
14
14
|
it { should_not be_a_valid_joined_event.with_other_call_id('bar') }
|
15
|
-
it { should be_a_valid_joined_event.
|
16
|
-
it { should_not be_a_valid_joined_event.
|
15
|
+
it { should be_a_valid_joined_event.with_mixer_name('foo1') }
|
16
|
+
it { should_not be_a_valid_joined_event.with_mixer_name('bar1') }
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "an unjoined event" do
|
20
20
|
subject do
|
21
|
-
Punchblock::Event::Unjoined.new(:other_call_id => 'foo', :
|
21
|
+
Punchblock::Event::Unjoined.new(:other_call_id => 'foo', :mixer_name => 'foo1').tap do |event|
|
22
22
|
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
23
23
|
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
24
24
|
end
|
@@ -27,7 +27,7 @@ describe "Rayo call control matchers" do
|
|
27
27
|
it { should be_a_valid_unjoined_event }
|
28
28
|
it { should be_a_valid_unjoined_event.with_other_call_id('foo') }
|
29
29
|
it { should_not be_a_valid_unjoined_event.with_other_call_id('bar') }
|
30
|
-
it { should be_a_valid_unjoined_event.
|
31
|
-
it { should_not be_a_valid_unjoined_event.
|
30
|
+
it { should be_a_valid_unjoined_event.with_mixer_name('foo1') }
|
31
|
+
it { should_not be_a_valid_unjoined_event.with_mixer_name('bar1') }
|
32
32
|
end
|
33
33
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-rayo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,34 +10,33 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
14
|
-
default_executable:
|
13
|
+
date: 2012-03-14 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: rspec
|
18
|
-
requirement: &
|
17
|
+
requirement: &2152810580 !ruby/object:Gem::Requirement
|
19
18
|
none: false
|
20
19
|
requirements:
|
21
20
|
- - ! '>='
|
22
21
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.
|
22
|
+
version: 2.9.0.rc1
|
24
23
|
type: :runtime
|
25
24
|
prerelease: false
|
26
|
-
version_requirements: *
|
25
|
+
version_requirements: *2152810580
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: punchblock
|
29
|
-
requirement: &
|
28
|
+
requirement: &2152809920 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
30
|
requirements:
|
32
31
|
- - ! '>='
|
33
32
|
- !ruby/object:Gem::Version
|
34
|
-
version: 0.
|
33
|
+
version: 0.9.2
|
35
34
|
type: :runtime
|
36
35
|
prerelease: false
|
37
|
-
version_requirements: *
|
36
|
+
version_requirements: *2152809920
|
38
37
|
- !ruby/object:Gem::Dependency
|
39
38
|
name: countdownlatch
|
40
|
-
requirement: &
|
39
|
+
requirement: &2152809360 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
43
42
|
- - ! '>='
|
@@ -45,43 +44,43 @@ dependencies:
|
|
45
44
|
version: 1.0.0
|
46
45
|
type: :runtime
|
47
46
|
prerelease: false
|
48
|
-
version_requirements: *
|
47
|
+
version_requirements: *2152809360
|
49
48
|
- !ruby/object:Gem::Dependency
|
50
49
|
name: future-resource
|
51
|
-
requirement: &
|
50
|
+
requirement: &2152824660 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
53
52
|
requirements:
|
54
53
|
- - ! '>='
|
55
54
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.0
|
55
|
+
version: 1.0.0
|
57
56
|
type: :runtime
|
58
57
|
prerelease: false
|
59
|
-
version_requirements: *
|
58
|
+
version_requirements: *2152824660
|
60
59
|
- !ruby/object:Gem::Dependency
|
61
60
|
name: yard
|
62
|
-
requirement: &
|
61
|
+
requirement: &2152823860 !ruby/object:Gem::Requirement
|
63
62
|
none: false
|
64
63
|
requirements:
|
65
|
-
- -
|
64
|
+
- - ! '>='
|
66
65
|
- !ruby/object:Gem::Version
|
67
66
|
version: 0.6.0
|
68
67
|
type: :development
|
69
68
|
prerelease: false
|
70
|
-
version_requirements: *
|
69
|
+
version_requirements: *2152823860
|
71
70
|
- !ruby/object:Gem::Dependency
|
72
71
|
name: bundler
|
73
|
-
requirement: &
|
72
|
+
requirement: &2152822380 !ruby/object:Gem::Requirement
|
74
73
|
none: false
|
75
74
|
requirements:
|
76
|
-
- -
|
75
|
+
- - ! '>='
|
77
76
|
- !ruby/object:Gem::Version
|
78
77
|
version: 1.0.0
|
79
78
|
type: :development
|
80
79
|
prerelease: false
|
81
|
-
version_requirements: *
|
80
|
+
version_requirements: *2152822380
|
82
81
|
- !ruby/object:Gem::Dependency
|
83
|
-
name:
|
84
|
-
requirement: &
|
82
|
+
name: rake
|
83
|
+
requirement: &2152820500 !ruby/object:Gem::Requirement
|
85
84
|
none: false
|
86
85
|
requirements:
|
87
86
|
- - ! '>='
|
@@ -89,29 +88,29 @@ dependencies:
|
|
89
88
|
version: '0'
|
90
89
|
type: :development
|
91
90
|
prerelease: false
|
92
|
-
version_requirements: *
|
91
|
+
version_requirements: *2152820500
|
93
92
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
95
|
-
requirement: &
|
93
|
+
name: ci_reporter
|
94
|
+
requirement: &2152818700 !ruby/object:Gem::Requirement
|
96
95
|
none: false
|
97
96
|
requirements:
|
98
97
|
- - ! '>='
|
99
98
|
- !ruby/object:Gem::Version
|
100
|
-
version:
|
99
|
+
version: 1.6.3
|
101
100
|
type: :development
|
102
101
|
prerelease: false
|
103
|
-
version_requirements: *
|
102
|
+
version_requirements: *2152818700
|
104
103
|
- !ruby/object:Gem::Dependency
|
105
|
-
name:
|
106
|
-
requirement: &
|
104
|
+
name: guard-rspec
|
105
|
+
requirement: &2152665400 !ruby/object:Gem::Requirement
|
107
106
|
none: false
|
108
107
|
requirements:
|
109
108
|
- - ! '>='
|
110
109
|
- !ruby/object:Gem::Version
|
111
|
-
version:
|
110
|
+
version: '0'
|
112
111
|
type: :development
|
113
112
|
prerelease: false
|
114
|
-
version_requirements: *
|
113
|
+
version_requirements: *2152665400
|
115
114
|
description: Rspec2 Matchers for Rayo
|
116
115
|
email: jsgoecke@voxeo.com, ben@langfeld.me
|
117
116
|
executables: []
|
@@ -121,39 +120,31 @@ files:
|
|
121
120
|
- .document
|
122
121
|
- .gitignore
|
123
122
|
- .rspec
|
123
|
+
- CHANGELOG.md
|
124
124
|
- Gemfile
|
125
|
+
- Guardfile
|
125
126
|
- LICENSE.txt
|
126
127
|
- README.md
|
127
128
|
- Rakefile
|
128
129
|
- lib/rspec-rayo.rb
|
129
|
-
- lib/rspec-rayo/
|
130
|
-
- lib/rspec-rayo/
|
131
|
-
- lib/rspec-rayo/
|
132
|
-
- lib/rspec-rayo/
|
133
|
-
- lib/rspec-rayo/
|
134
|
-
- lib/rspec-rayo/
|
135
|
-
- lib/rspec-rayo/
|
136
|
-
- lib/rspec-rayo/
|
137
|
-
- lib/rspec-rayo/
|
138
|
-
- lib/rspec-rayo/rayo/matchers/output.rb
|
139
|
-
- lib/rspec-rayo/rayo/matchers/recording.rb
|
140
|
-
- lib/rspec-rayo/rayo/matchers/say.rb
|
141
|
-
- lib/rspec-rayo/rayo/matchers/transfer.rb
|
142
|
-
- lib/rspec-rayo/tropo1/driver.rb
|
130
|
+
- lib/rspec-rayo/call.rb
|
131
|
+
- lib/rspec-rayo/driver.rb
|
132
|
+
- lib/rspec-rayo/matchers.rb
|
133
|
+
- lib/rspec-rayo/matchers/call_control.rb
|
134
|
+
- lib/rspec-rayo/matchers/dtmf.rb
|
135
|
+
- lib/rspec-rayo/matchers/input.rb
|
136
|
+
- lib/rspec-rayo/matchers/join.rb
|
137
|
+
- lib/rspec-rayo/matchers/output.rb
|
138
|
+
- lib/rspec-rayo/matchers/recording.rb
|
143
139
|
- lib/rspec-rayo/version.rb
|
144
140
|
- rspec-rayo.gemspec
|
145
|
-
- spec/rspec-rayo/rayo/matchers/ask_spec.rb
|
146
141
|
- spec/rspec-rayo/rayo/matchers/call_control_spec.rb
|
147
|
-
- spec/rspec-rayo/rayo/matchers/conference_spec.rb
|
148
142
|
- spec/rspec-rayo/rayo/matchers/dtmf_spec.rb
|
149
143
|
- spec/rspec-rayo/rayo/matchers/input_spec.rb
|
150
144
|
- spec/rspec-rayo/rayo/matchers/join_spec.rb
|
151
145
|
- spec/rspec-rayo/rayo/matchers/output_spec.rb
|
152
|
-
- spec/rspec-rayo/rayo/matchers/say_spec.rb
|
153
|
-
- spec/rspec-rayo/rayo/matchers/transfer_spec.rb
|
154
146
|
- spec/rspec-rayo/rayo/matchers_spec.rb
|
155
147
|
- spec/spec_helper.rb
|
156
|
-
has_rdoc: true
|
157
148
|
homepage: http://github.com/tropo/rspec-rayo
|
158
149
|
licenses:
|
159
150
|
- MIT
|
@@ -175,19 +166,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
166
|
version: '0'
|
176
167
|
requirements: []
|
177
168
|
rubyforge_project:
|
178
|
-
rubygems_version: 1.
|
169
|
+
rubygems_version: 1.8.10
|
179
170
|
signing_key:
|
180
171
|
specification_version: 3
|
181
172
|
summary: Rspec2 for Rayo
|
182
173
|
test_files:
|
183
|
-
- spec/rspec-rayo/rayo/matchers/ask_spec.rb
|
184
174
|
- spec/rspec-rayo/rayo/matchers/call_control_spec.rb
|
185
|
-
- spec/rspec-rayo/rayo/matchers/conference_spec.rb
|
186
175
|
- spec/rspec-rayo/rayo/matchers/dtmf_spec.rb
|
187
176
|
- spec/rspec-rayo/rayo/matchers/input_spec.rb
|
188
177
|
- spec/rspec-rayo/rayo/matchers/join_spec.rb
|
189
178
|
- spec/rspec-rayo/rayo/matchers/output_spec.rb
|
190
|
-
- spec/rspec-rayo/rayo/matchers/say_spec.rb
|
191
|
-
- spec/rspec-rayo/rayo/matchers/transfer_spec.rb
|
192
179
|
- spec/rspec-rayo/rayo/matchers_spec.rb
|
193
180
|
- spec/spec_helper.rb
|
181
|
+
has_rdoc:
|
@@ -1,113 +0,0 @@
|
|
1
|
-
module RSpecRayo
|
2
|
-
class RayoDriver
|
3
|
-
attr_reader :call_queue, :event_queue, :threads
|
4
|
-
attr_accessor :calls
|
5
|
-
|
6
|
-
def initialize(options)
|
7
|
-
@calls = {}
|
8
|
-
@call_queue = Queue.new
|
9
|
-
@queue_timeout = options[:queue_timeout] || 5
|
10
|
-
@write_timeout = options[:write_timeout] || 5
|
11
|
-
@threads = []
|
12
|
-
|
13
|
-
initialize_rayo options
|
14
|
-
end
|
15
|
-
|
16
|
-
def get_call
|
17
|
-
read_queue @call_queue
|
18
|
-
end
|
19
|
-
|
20
|
-
def cleanup_calls
|
21
|
-
@calls.each_pair do |call_id, call|
|
22
|
-
call.hangup unless call.status == :finished
|
23
|
-
end
|
24
|
-
@calls = {}
|
25
|
-
end
|
26
|
-
|
27
|
-
def dial(options)
|
28
|
-
Call.new(:client => @rayo, :queue => Queue.new, :read_timeout => @queue_timeout, :write_timeout => @write_timeout).tap do |call|
|
29
|
-
dial = call.dial options
|
30
|
-
call.call_id = dial.call_id
|
31
|
-
@calls.merge! call.call_id => call
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def start_event_dispatcher
|
36
|
-
@threads << Thread.new do
|
37
|
-
event = nil
|
38
|
-
|
39
|
-
until event == 'STOP' do
|
40
|
-
event = @event_queue.pop
|
41
|
-
case event
|
42
|
-
when Punchblock::Event::Offer
|
43
|
-
call = Call.new :call_event => event,
|
44
|
-
:client => @rayo,
|
45
|
-
:queue => Queue.new,
|
46
|
-
:read_timeout => @queue_timeout,
|
47
|
-
:write_timeout => @write_timeout
|
48
|
-
@calls.merge! event.call_id => call
|
49
|
-
@call_queue.push call
|
50
|
-
when Punchblock::Event::Ringing
|
51
|
-
call = @calls[event.call_id]
|
52
|
-
call.ring_event = event if call
|
53
|
-
else
|
54
|
-
# Temp based on this nil returned on conference: https://github.com/tropo/punchblock/issues/27
|
55
|
-
begin
|
56
|
-
if event.is_a?(Punchblock::Event::End)
|
57
|
-
@calls[event.call_id].status = :finished
|
58
|
-
end
|
59
|
-
@calls[event.call_id].queue.push event unless event.nil?
|
60
|
-
rescue => error
|
61
|
-
# Event nil issue to be addressed here: https://github.com/tropo/rspec-rayo/issues/2
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def read_queue(queue)
|
70
|
-
Timeout::timeout(@queue_timeout) { queue.pop }
|
71
|
-
end
|
72
|
-
|
73
|
-
def initialize_rayo(options)
|
74
|
-
initialize_logging options
|
75
|
-
|
76
|
-
# Setup our Rayo environment
|
77
|
-
connection = Punchblock::Connection::XMPP.new :username => options[:username],
|
78
|
-
:password => options[:password],
|
79
|
-
:host => options[:host],
|
80
|
-
:port => options[:port],
|
81
|
-
:wire_logger => @wire_logger,
|
82
|
-
:transport_logger => @transport_logger,
|
83
|
-
:auto_reconnect => false
|
84
|
-
@rayo = Punchblock::Client.new :connection => connection,
|
85
|
-
:write_timeout => options[:write_timeout]
|
86
|
-
@event_queue = @rayo.event_queue
|
87
|
-
|
88
|
-
start_rayo
|
89
|
-
end
|
90
|
-
|
91
|
-
def initialize_logging(options)
|
92
|
-
@wire_logger = options[:wire_logger]
|
93
|
-
@wire_logger.level = options[:log_level]
|
94
|
-
#@wire_logger.info "Starting up..." if @wire_logger
|
95
|
-
|
96
|
-
@transport_logger = options[:transport_logger]
|
97
|
-
@transport_logger.level = options[:log_level]
|
98
|
-
#@transport_logger.info "Starting up..." if @transport_logger
|
99
|
-
end
|
100
|
-
|
101
|
-
def start_rayo
|
102
|
-
# Launch the Rayo thread
|
103
|
-
@threads << Thread.new do
|
104
|
-
begin
|
105
|
-
@rayo.run
|
106
|
-
rescue => e
|
107
|
-
puts "Exception in XMPP thread! #{e.message}"
|
108
|
-
puts e.backtrace.join("\t\n")
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
RSpec::Matchers.define :be_a_valid_successful_ask_event do
|
2
|
-
chain :with_utterance do |utterance|
|
3
|
-
@utterance = utterance
|
4
|
-
end
|
5
|
-
|
6
|
-
chain :with_interpretation do |interpretation|
|
7
|
-
@interpretation = interpretation
|
8
|
-
end
|
9
|
-
|
10
|
-
match_for_should do |event|
|
11
|
-
match_type event, Punchblock::Event::Complete do
|
12
|
-
match_type event.reason, Punchblock::Component::Tropo::Ask::Complete::Success
|
13
|
-
@error = "The utterance was not correct. Expected '#{@utterance}', got '#{event.reason.utterance}'" if @utterance && event.reason.utterance != @utterance
|
14
|
-
@error = "The interpretation was not correct. Expected '#{@interpretation}', got '#{event.reason.interpretation}'" if @interpretation && event.reason.interpretation != @interpretation
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
failure_message_for_should do |actual|
|
19
|
-
"The ask event was not valid: #{@error}"
|
20
|
-
end
|
21
|
-
|
22
|
-
description do
|
23
|
-
"be a valid successful ask event".tap do |d|
|
24
|
-
d << " with utterance '#{@utterance}'" if @utterance
|
25
|
-
d << " with interpretation '#{@interpretation}'" if @interpretation
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
RSpec::Matchers.define :be_a_valid_ask_noinput_event do
|
31
|
-
match_for_should do |event|
|
32
|
-
match_type event, Punchblock::Event::Complete do
|
33
|
-
match_type event.reason, Punchblock::Component::Tropo::Ask::Complete::NoInput
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
failure_message_for_should do |actual|
|
38
|
-
"The ask event was not valid: #{@error}"
|
39
|
-
end
|
40
|
-
|
41
|
-
description do
|
42
|
-
"be a valid noinput ask event"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
RSpec::Matchers.define :be_a_valid_ask_nomatch_event do
|
47
|
-
match_for_should do |event|
|
48
|
-
match_type event, Punchblock::Event::Complete do
|
49
|
-
match_type event.reason, Punchblock::Component::Tropo::Ask::Complete::NoMatch
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
failure_message_for_should do |actual|
|
54
|
-
"The ask event was not valid: #{@error}"
|
55
|
-
end
|
56
|
-
|
57
|
-
description do
|
58
|
-
"be a valid nomatch ask event"
|
59
|
-
end
|
60
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
RSpec::Matchers.define :be_a_valid_conference_offhold_event do
|
2
|
-
match_for_should do |event|
|
3
|
-
match_type event, Punchblock::Component::Tropo::Conference::OffHold
|
4
|
-
end
|
5
|
-
|
6
|
-
failure_message_for_should do |actual|
|
7
|
-
"The ask event was not valid: #{@error}"
|
8
|
-
end
|
9
|
-
|
10
|
-
description do
|
11
|
-
"Validate an ask event"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
RSpec::Matchers.define :be_a_valid_speaking_event do
|
16
|
-
chain :for_call_id do |call_id|
|
17
|
-
@call_id = call_id
|
18
|
-
end
|
19
|
-
|
20
|
-
match_for_should do |event|
|
21
|
-
match_type event, Punchblock::Component::Tropo::Conference::Speaking do
|
22
|
-
@error = "The speaking call ID was not correct. Expected '#{@call_id}', got '#{event.speaking_call_id}'" if @call_id && event.speaking_call_id != @call_id
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
failure_message_for_should do |actual|
|
27
|
-
"The speaking event was not valid: #{@error}"
|
28
|
-
end
|
29
|
-
|
30
|
-
description do
|
31
|
-
"be a valid speaking event".tap do |d|
|
32
|
-
d << " with call ID '#{@call_id}'" if @call_id
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
RSpec::Matchers.define :be_a_valid_finished_speaking_event do
|
38
|
-
chain :for_call_id do |call_id|
|
39
|
-
@call_id = call_id
|
40
|
-
end
|
41
|
-
|
42
|
-
match_for_should do |event|
|
43
|
-
match_type event, Punchblock::Component::Tropo::Conference::FinishedSpeaking do
|
44
|
-
@error = "The finished-speaking call ID was not correct. Expected '#{@call_id}', got '#{event.speaking_call_id}'" if @call_id && event.speaking_call_id != @call_id
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
failure_message_for_should do |actual|
|
49
|
-
"The finished speaking event was not valid: #{@error}"
|
50
|
-
end
|
51
|
-
|
52
|
-
description do
|
53
|
-
"be a valid finished speaking event".tap do |d|
|
54
|
-
d << " with call ID '#{@call_id}'" if @call_id
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
RSpec::Matchers.define :be_a_valid_conference_complete_terminator_event do
|
60
|
-
match_for_should do |event|
|
61
|
-
match_type event, Punchblock::Event::Complete do
|
62
|
-
match_type event.reason, Punchblock::Component::Tropo::Conference::Complete::Terminator
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
failure_message_for_should do |actual|
|
67
|
-
"The conference complete terminator event was not valid: #{@error}"
|
68
|
-
end
|
69
|
-
|
70
|
-
description do
|
71
|
-
"be a valid conference complete terminator event"
|
72
|
-
end
|
73
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
RSpec::Matchers.define :be_a_valid_say_event do
|
2
|
-
match_for_should do |event|
|
3
|
-
match_type event, Punchblock::Event::Complete do
|
4
|
-
match_type event.reason, Punchblock::Component::Tropo::Say::Complete::Success
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
failure_message_for_should do |actual|
|
9
|
-
"The say event was not valid: #{@error}"
|
10
|
-
end
|
11
|
-
|
12
|
-
description do
|
13
|
-
"be a valid successful say event"
|
14
|
-
end
|
15
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
RSpec::Matchers.define :be_a_valid_transfer_event do
|
2
|
-
match_for_should do |event|
|
3
|
-
match_type event, Punchblock::Event::Complete do
|
4
|
-
match_type event.reason, Punchblock::Component::Tropo::Transfer::Complete::Success
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
failure_message_for_should do |actual|
|
9
|
-
"The transfer event was not valid: #{@error}"
|
10
|
-
end
|
11
|
-
|
12
|
-
description do
|
13
|
-
"be a valid transfer event"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
RSpec::Matchers.define :be_a_valid_transfer_timeout_event do
|
18
|
-
match_for_should do |event|
|
19
|
-
match_type event, Punchblock::Event::Complete do
|
20
|
-
match_type event.reason, Punchblock::Component::Tropo::Transfer::Complete::Timeout
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
failure_message_for_should do |actual|
|
25
|
-
"The transfer event was not valid: #{@error}"
|
26
|
-
end
|
27
|
-
|
28
|
-
description do
|
29
|
-
"be a valid transfer timeout event"
|
30
|
-
end
|
31
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module RSpecRayo
|
2
|
-
class Tropo1Driver
|
3
|
-
require 'drb'
|
4
|
-
require 'net/http'
|
5
|
-
require 'uri'
|
6
|
-
require 'countdownlatch'
|
7
|
-
|
8
|
-
attr_accessor :script_content, :result, :drb, :config
|
9
|
-
|
10
|
-
def initialize(uri = nil, latch_timeout = 5)
|
11
|
-
@uri = uri || "druby://0.0.0.0:8787"
|
12
|
-
@latch_timeout = latch_timeout
|
13
|
-
@config = {}
|
14
|
-
reset!
|
15
|
-
end
|
16
|
-
|
17
|
-
def start_drb
|
18
|
-
@drb = DRb.start_service @uri, self
|
19
|
-
end
|
20
|
-
|
21
|
-
def stop_drb
|
22
|
-
@drb.stop_service
|
23
|
-
end
|
24
|
-
|
25
|
-
def reset!
|
26
|
-
@script_content = nil
|
27
|
-
@result = nil
|
28
|
-
@latches = {}
|
29
|
-
end
|
30
|
-
|
31
|
-
def trigger(latch_name)
|
32
|
-
latch = @latches[latch_name]
|
33
|
-
raise RuntimeError, "No latch by that name" unless latch
|
34
|
-
latch.countdown!
|
35
|
-
end
|
36
|
-
|
37
|
-
def add_latch(latch_name, count = 1)
|
38
|
-
@latches[latch_name] = CountDownLatch.new count
|
39
|
-
end
|
40
|
-
|
41
|
-
def wait(latch_name)
|
42
|
-
latch = @latches[latch_name]
|
43
|
-
raise RuntimeError, "No latch by that name" unless latch
|
44
|
-
latch.wait @latch_timeout
|
45
|
-
end
|
46
|
-
|
47
|
-
def place_call(session_url)
|
48
|
-
Net::HTTP.get URI.parse(session_url)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Rayo Ask matchers" do
|
4
|
-
describe "an ask complete event" do
|
5
|
-
subject do
|
6
|
-
Punchblock::Event::Complete.new.tap do |event|
|
7
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
8
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
9
|
-
event << reason
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "that's successful" do
|
14
|
-
let :reason do
|
15
|
-
Punchblock::Component::Tropo::Ask::Complete::Success.new.tap do |success|
|
16
|
-
success << '<utterance>blah</utterance>'
|
17
|
-
success << '<interpretation>blah</interpretation>'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
it { should be_a_valid_successful_ask_event }
|
22
|
-
it { should be_a_valid_successful_ask_event.with_utterance('blah') }
|
23
|
-
it { should_not be_a_valid_successful_ask_event.with_utterance('woo') }
|
24
|
-
it { should be_a_valid_successful_ask_event.with_interpretation('blah') }
|
25
|
-
it { should_not be_a_valid_successful_ask_event.with_interpretation('woo') }
|
26
|
-
end
|
27
|
-
|
28
|
-
describe "that stopped" do
|
29
|
-
let(:reason) { Punchblock::Event::Complete::Stop.new }
|
30
|
-
it { should be_a_valid_complete_stopped_event }
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "that got no input" do
|
34
|
-
let(:reason) { Punchblock::Component::Tropo::Ask::Complete::NoInput.new }
|
35
|
-
it { should be_a_valid_ask_noinput_event }
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "that got no match" do
|
39
|
-
let(:reason) { Punchblock::Component::Tropo::Ask::Complete::NoMatch.new }
|
40
|
-
it { should be_a_valid_ask_nomatch_event }
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Rayo Conference matchers" do
|
4
|
-
describe "a conference event" do
|
5
|
-
subject do
|
6
|
-
Punchblock::Component::Tropo::Conference::OffHold.new.tap do |event|
|
7
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
8
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
it { should be_a_valid_conference_offhold_event }
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "a speaking event" do
|
16
|
-
subject do
|
17
|
-
Punchblock::Component::Tropo::Conference::Speaking.new.tap do |event|
|
18
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
19
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
20
|
-
event.write_attr :'call-id', 'abc123'
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
it { should be_a_valid_speaking_event }
|
25
|
-
it { should be_a_valid_speaking_event.for_call_id('abc123') }
|
26
|
-
it { should_not be_a_valid_speaking_event.for_call_id('123abc') }
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "a finished-speaking event" do
|
30
|
-
subject do
|
31
|
-
Punchblock::Component::Tropo::Conference::FinishedSpeaking.new.tap do |event|
|
32
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
33
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
34
|
-
event.write_attr :'call-id', 'abc123'
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
it { should be_a_valid_finished_speaking_event }
|
39
|
-
it { should be_a_valid_finished_speaking_event.for_call_id('abc123') }
|
40
|
-
it { should_not be_a_valid_finished_speaking_event.for_call_id('123abc') }
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "a conference complete terminator event" do
|
44
|
-
subject do
|
45
|
-
Punchblock::Event::Complete.new.tap do |event|
|
46
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
47
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
48
|
-
event << Punchblock::Component::Tropo::Conference::Complete::Terminator.new
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
it { should be_a_valid_conference_complete_terminator_event }
|
53
|
-
end
|
54
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Rayo Say matchers" do
|
4
|
-
describe "a say complete event" do
|
5
|
-
subject do
|
6
|
-
Punchblock::Event::Complete.new.tap do |event|
|
7
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
8
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
9
|
-
event << reason
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "that's successful" do
|
14
|
-
let(:reason) { Punchblock::Component::Tropo::Say::Complete::Success.new }
|
15
|
-
it { should be_a_valid_say_event }
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "that stopped" do
|
19
|
-
let(:reason) { Punchblock::Event::Complete::Stop.new }
|
20
|
-
it { should be_a_valid_complete_stopped_event }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "Rayo call control matchers" do
|
4
|
-
describe "a transfer complete event" do
|
5
|
-
subject do
|
6
|
-
Punchblock::Event::Complete.new.tap do |event|
|
7
|
-
event.call_id = '5d6fe904-103d-4551-bd47-cf212c37b8c7'
|
8
|
-
event.component_id = '6d5bf745-8fa9-4e78-be18-6e6a48393f13'
|
9
|
-
event << reason
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "that's successful" do
|
14
|
-
let(:reason) { Punchblock::Component::Tropo::Transfer::Complete::Success.new }
|
15
|
-
it { should be_a_valid_transfer_event }
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "that timed out" do
|
19
|
-
let(:reason) { Punchblock::Component::Tropo::Transfer::Complete::Timeout.new }
|
20
|
-
it { should be_a_valid_transfer_timeout_event }
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|