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