require 'spec_helper'
describe Twilio::TwiML::VoiceResponse do
context 'Testing Response' do
it 'should allow empty response' do
r = Twilio::TwiML::VoiceResponse.new
expect(r.to_s).to eq('')
end
it 'should allow populated response' do
r = Twilio::TwiML::VoiceResponse.new
r.hangup
r.leave
r.sms('twilio sms', to: '+11234567890', from: '+10987654321')
expect(r.to_s).to eq('twilio sms')
end
it 'should allow chaining' do
r = Twilio::TwiML::VoiceResponse.new.hangup.leave.sms(
'twilio sms',
to: '+11234567890',
from: '+10987654321'
)
expect(r.to_s).to eq('twilio sms')
end
end
context 'Testing Say' do
it 'should allow empty say' do
r = Twilio::TwiML::VoiceResponse.new
r.say ''
# For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
# Ruby 2.4 generates an empty tag
expect(r.to_s).to eq('')
.or(eq(''))
end
it 'should allow populated say' do
r = Twilio::TwiML::VoiceResponse.new
r.say 'Hello World'
expect(r.to_s).to eq('Hello World')
end
it 'should allow unicode say' do
r = Twilio::TwiML::VoiceResponse.new
r.say 'nécessaire et d\'autres'
expect(r.to_s).to eq('nécessaire et d\'autres')
end
it 'should allow looping' do
r = Twilio::TwiML::VoiceResponse.new
r.say 'Hello Monkey', loop: 3
expect(r.to_s).to eq('Hello Monkey')
end
it 'should allow languages' do
r = Twilio::TwiML::VoiceResponse.new
r.say 'Hello Monkey', language: 'en-gb'
expect(r.to_s).to eq('Hello Monkey')
end
it 'should allow all attributes' do
r = Twilio::TwiML::VoiceResponse.new
r.say 'Hello Monkey', loop: 3, voice: 'man', language: 'fr'
expect(r.to_s).to eq('Hello Monkey')
end
end
context 'Testing Play' do
it 'should allow empty play' do
r = Twilio::TwiML::VoiceResponse.new
r.play
# For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
# Ruby 2.4 generates an empty tag
expect(r.to_s).to eq('')
.or(eq(''))
end
it 'should play hello' do
r = Twilio::TwiML::VoiceResponse.new
r.play(url: 'http://hellomonkey.mp3')
expect(r.to_s).to eq('http://hellomonkey.mp3')
end
it 'should play hello on loop' do
r = Twilio::TwiML::VoiceResponse.new
r.play(url: 'http://hellomonkey.mp3', loop: 3)
expect(r.to_s).to eq('http://hellomonkey.mp3')
end
it 'should play digits' do
r = Twilio::TwiML::VoiceResponse.new
r.play(digits: 'w123')
# For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
# Ruby 2.4 generates an empty tag
expect(r.to_s).to eq('')
.or(eq(''))
end
end
context 'Testing Record' do
it 'should allow empty record' do
r = Twilio::TwiML::VoiceResponse.new
r.record
expect(r.to_s).to eq('')
end
it 'should allow action and method' do
r = Twilio::TwiML::VoiceResponse.new
r.record action: 'example.com', method: 'GET'
expect(r.to_s).to eq('')
end
it 'should allow max_length, finish_on_key, and timeout' do
r = Twilio::TwiML::VoiceResponse.new
r.record timeout: 4, finish_on_key: '#', max_length: 30
expect(r.to_s).to eq('')
end
it 'should allow transcribe' do
r = Twilio::TwiML::VoiceResponse.new
r.record transcribe_callback: 'example.com'
expect(r.to_s).to eq('')
end
end
context 'Testing Redirect' do
it 'should allow empty redirect' do
r = Twilio::TwiML::VoiceResponse.new
r.redirect ''
# For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
# Ruby 2.4 generates an empty tag
expect(r.to_s).to eq('')
.or(eq(''))
end
it 'should allow method' do
r = Twilio::TwiML::VoiceResponse.new
r.redirect 'example.com', method: 'POST'
expect(r.to_s).to eq('example.com')
end
it 'should allow method and params' do
r = Twilio::TwiML::VoiceResponse.new
r.redirect 'example.com?id=34&action=hey', method: 'POST'
expect(r.to_s).to eq('example.com?id=34&action=hey')
end
end
context 'Testing Hangup' do
it 'should allow hangup' do
r = Twilio::TwiML::VoiceResponse.new
r.hangup
expect(r.to_s).to eq('')
end
end
context 'Testing Leave' do
it 'should allow leave' do
r = Twilio::TwiML::VoiceResponse.new
r.leave
expect(r.to_s).to eq('')
end
end
context 'Testing Reject' do
it 'should reject with a default reason' do
r = Twilio::TwiML::VoiceResponse.new
r.reject
expect(r.to_s).to eq('')
end
end
context 'Testing SMS' do
it 'should allow empty SMS' do
r = Twilio::TwiML::VoiceResponse.new
r.sms ''
# For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
# Ruby 2.4 generates an empty tag
expect(r.to_s).to eq('')
.or(eq(''))
end
it 'should allow SMS body' do
r = Twilio::TwiML::VoiceResponse.new
r.sms 'Hello, World'
expect(r.to_s).to eq('Hello, World')
end
it 'should allow to, from, action, and status_callback' do
r = Twilio::TwiML::VoiceResponse.new
r.sms('Hello, World', to: 1231231234, from: 3453453456, status_callback: 'example.com?id=34&action=hey')
expect(r.to_s).to eq('Hello, World')
end
it 'should allow action and method' do
r = Twilio::TwiML::VoiceResponse.new
r.sms('Hello', method: 'POST', action: 'example.com?id=34&action=hey')
expect(r.to_s).to eq('Hello')
end
end
context 'Testing Conference' do
it 'should allow basic conferencing' do
d = Twilio::TwiML::Dial.new
d.conference(
'TestConferenceAttributes',
beep: false,
wait_url: '',
start_conference_on_enter: true,
end_conference_on_exit: true
)
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('TestConferenceAttributes')
end
it 'should allow muted conferencing' do
d = Twilio::TwiML::Dial.new
d.conference(
'TestConferenceMutedAttribute',
beep: false,
muted: true,
wait_url: '',
start_conference_on_enter: true,
end_conference_on_exit: true
)
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('TestConferenceMutedAttribute')
end
end
context 'Testing Queue' do
it 'should allow queues in VoiceResponse' do
d = Twilio::TwiML::Dial.new
d.queue('TestQueueAttribute', url: '', method: 'GET')
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('TestQueueAttribute')
end
end
context 'Testing Echo' do
it 'should allow VoiceResponse Echo' do
r = Twilio::TwiML::VoiceResponse.new
r.echo
expect(r.to_s).to eq('')
end
end
context 'Testing Enqueue' do
it 'should allow VoiceResponse.enqueue' do
r = Twilio::TwiML::VoiceResponse.new
r.enqueue(
'TestEnqueueAttribute',
action: 'act',
method: 'GET',
wait_url: 'wait',
wait_url_method: 'POST'
)
expect(r.to_s).to eq('TestEnqueueAttribute')
end
it 'should allow Enqueue.task and appending Enqueue' do
e = Twilio::TwiML::Enqueue.new(nil, workflow_sid: '123123123')
e.task('{"account_sid": "AC123123123"}')
r = Twilio::TwiML::VoiceResponse.new
r.append(e)
expect(r.to_s).to eq('{"account_sid": "AC123123123"}')
end
it 'should allow Enqueue.task with a dictionary and appending Enqueue' do
e = Twilio::TwiML::Enqueue.new(nil, workflow_sid: '123123123')
e.task({account_sid: 'AC123123123'})
r = Twilio::TwiML::VoiceResponse.new
r.append(e)
expect(r.to_s).to eq('{"account_sid":"AC123123123"}')
end
end
context 'Testing Dial' do
it 'should allow VoiceResponse.dial' do
r = Twilio::TwiML::VoiceResponse.new
r.dial '1231231234'
expect(r.to_s).to eq('1231231234')
end
it 'should allow Dial.sim' do
d = Twilio::TwiML::Dial.new
d.sim '123123123'
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('123123123')
end
it 'should allow Dial.sip' do
d = Twilio::TwiML::Dial.new
d.sip 'foo@example.com'
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('foo@example.com')
end
it 'should allow Dial.sip with username, password' do
d = Twilio::TwiML::Dial.new
d.sip('foo@example.com', username: 'foo', password: 'bar')
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('foo@example.com')
end
it 'should allow Dial.number' do
d = Twilio::TwiML::Dial.new
d.number '1231231234'
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('1231231234')
end
it 'should allow Dial.number with params' do
d = Twilio::TwiML::Dial.new
d.number('1231231234', status_callback: 'http://example.com', status_callback_event: 'initiated completed')
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('1231231234')
end
it 'should allow Dial.conference' do
d = Twilio::TwiML::Dial.new
d.conference 'My Room'
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('My Room')
end
it 'should allow Dial.queue' do
d = Twilio::TwiML::Dial.new
d.queue 'The Cute Queue'
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('The Cute Queue')
end
it 'should allow empty Dial.client' do
d = Twilio::TwiML::Dial.new
d.client ''
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
# For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
# Ruby 2.4 generates an empty tag
expect(r.to_s).to eq('')
.or(eq(''))
end
it 'should allow populated Dial.client' do
d = Twilio::TwiML::Dial.new
d.client 'alice'
r = Twilio::TwiML::VoiceResponse.new
r.append(d)
expect(r.to_s).to eq('alice')
end
end
context 'Testing Gather' do
it 'should allow empty Gather' do
r = Twilio::TwiML::VoiceResponse.new
r.gather
expect(r.to_s).to eq('')
end
it 'should allow Gather.say' do
g = Twilio::TwiML::Gather.new
g.say 'Hello'
r = Twilio::TwiML::VoiceResponse.new
r.append(g)
expect(r.to_s).to eq('Hello')
end
it 'should allow nested play and pause' do
g = Twilio::TwiML::Gather.new
g.say 'Hey'
g.play(url: 'hey.mp3')
g.pause
r = Twilio::TwiML::VoiceResponse.new
r.append(g)
expect(r.to_s).to eq('Heyhey.mp3')
end
end
end