require 'spec_helper' describe "Verb" do context "Say" do it "says 'hi'" do Twilio::Verb.say('hi').should match %r{hi} end it "says 'hi' with female voice" do Twilio::Verb.say('hi', :voice => 'woman').should match %r{hi} end it "says 'hola' in Spanish with female voice" do Twilio::Verb.say('hola', :voice => 'woman', :language => 'es').should match %r{hola} end it "says 'hi' three times" do Twilio::Verb.say('hi', :loop => 3).should match %r{hi} end it "says 'hi' three times with pause" do Twilio::Verb.say('hi', :loop => 3, :pause => true).should match %r{hihihi} end it "says 'hi' with pause and say 'bye'" do verb = Twilio::Verb.new { |v| v.say 'hi', :loop => 1 v.pause v.say 'bye' }.response.should match %r{hibye} end it "says 'hi' with 2 second pause and say 'bye'" do verb = Twilio::Verb.new { |v| v.say 'hi' v.pause :length => 2 v.say 'bye' }.response.should match %r{hibye} end end context "Play" do it "plays mp3 response" do Twilio::Verb.play('http://foo.com/cowbell.mp3').should == verb_response(:play_mp3) end it "plays mp3 response two times" do Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 2).should == verb_response(:play_mp3_two_times) end it "plays mp3 response two times with pause" do Twilio::Verb.play('http://foo.com/cowbell.mp3', :loop => 2, :pause => true).should == verb_response(:play_mp3_two_times_with_pause) end end context "Gather" do it "gathers" do Twilio::Verb.gather.should == verb_response(:gather) end it "gathers with action" do Twilio::Verb.gather(:action => 'http://foobar.com').should == verb_response(:gather_with_action) end it "gathers with GET method" do Twilio::Verb.gather(:method => 'GET').should == verb_response(:gather_with_get_method) end it "gathers with timeout" do Twilio::Verb.gather(:timeout => 10).should == verb_response(:gather_with_timeout) end it "gathers with finish key" do Twilio::Verb.gather(:finishOnKey => '*').should == verb_response(:gather_with_finish_key) end it "gathers with num digits" do Twilio::Verb.gather(:numDigits => 5).should == verb_response(:gather_with_num_digits) end it "gathers with all options set" do Twilio::Verb.gather(:action => 'http://foobar.com', :finishOnKey => '*', :method => 'GET', :numDigits => 5, :timeout => 10).should match %r{} end it "gathers and says instructions" do verb = Twilio::Verb.new { |v| v.gather { v.say 'Please enter your account number followed by the pound sign' } v.say "We didn't receive any input. Goodbye!" }.response.should match %r{Please enter your account number followed by the pound signWe didn't receive any input. Goodbye!} end it "gathers with timeout and says instructions" do verb = Twilio::Verb.new { |v| v.gather(:timeout => 10) { v.say 'Please enter your account number followed by the pound sign' } v.say "We didn't receive any input. Goodbye!" }.response.should match %r{Please enter your account number followed by the pound signWe didn't receive any input. Goodbye!} end end context "Record" do it "records" do Twilio::Verb.record.should == verb_response(:record) end it "records with action" do Twilio::Verb.record(:action => 'http://foobar.com').should == verb_response(:record_with_action) end it "records with GET method" do Twilio::Verb.record(:method => 'GET').should == verb_response(:record_with_get_method) end it "records with timeout" do Twilio::Verb.record(:timeout => 10).should == verb_response(:record_with_timeout) end it "records with finish key" do Twilio::Verb.record(:finishOnKey => '*').should == verb_response(:record_with_finish_key) end it "records with max length" do Twilio::Verb.record(:maxLength => 1800).should == verb_response(:record_with_max_length) end it "records with transcribe" do Twilio::Verb.record(:transcribe => true, :transcribeCallback => '/handle_transcribe').should match %r{} end end context "Dial" do it "dials" do Twilio::Verb.dial('415-123-4567').should == verb_response(:dial) end it "dials with action" do Twilio::Verb.dial('415-123-4567', :action => 'http://foobar.com').should == verb_response(:dial_with_action) end it "dials with GET method" do Twilio::Verb.dial('415-123-4567', :method => 'GET').should == verb_response(:dial_with_get_method) end it "dials with timeout" do Twilio::Verb.dial('415-123-4567', :timeout => 10).should == verb_response(:dial_with_timeout) end it "dials with hangup on star" do Twilio::Verb.dial('415-123-4567', :hangupOnStar => true).should == verb_response(:dial_with_hangup_on_star) end it "dials with time limit" do Twilio::Verb.dial('415-123-4567', :timeLimit => 3600).should == verb_response(:dial_with_time_limit) end it "dials with caller id" do Twilio::Verb.dial('415-123-4567', :callerId => '858-987-6543').should == verb_response(:dial_with_caller_id) end it "dials with timeout and caller id" do Twilio::Verb.dial('415-123-4567', :timeout => 10, :callerId => '858-987-6543').should match %r{415-123-4567} end it "dials with redirect" do verb = Twilio::Verb.new { |v| v.dial '415-123-4567' v.redirect 'http://www.foo.com/nextInstructions' }.response.should == verb_response(:dial_with_redirect) end it "dials with number and send digits" do verb = Twilio::Verb.new { |v| v.dial { v.number('415-123-4567', :sendDigits => 'wwww1928') } }.response.should == verb_response(:dial_with_number_and_send_digits) end it "dials multiple numbers" do verb = Twilio::Verb.new { |v| v.dial { v.number '415-123-4567' v.number '415-123-4568' v.number '415-123-4569' } }.response.should == verb_response(:dial_multiple_numbers) end it "dials a conference" do verb = Twilio::Verb.new { |v| v.dial { v.conference 'MyRoom' } }.response.should == verb_response(:dial_conference) end it "dials a muted conference" do verb = Twilio::Verb.new { |v| v.dial { v.conference 'MyRoom', :mute => :true } }.response.should == verb_response(:dial_muted_conference) end end context "Hang Up" do it "hangs up" do Twilio::Verb.hangup.should == verb_response(:hangup) end it "says hi and hangs up" do verb = Twilio::Verb.new { |v| v.say 'hi' v.hangup }.response.should match %r{hi} end end context "Reject" do it "rejects" do Twilio::Verb.reject.should == verb_response(:reject) end it "just rejects incoming call" do verb = Twilio::Verb.new { |v| v.reject }.response.should match %r{} end it "just rejects incoming call with 'busy' status" do verb = Twilio::Verb.new { |v| v.reject :reason => 'busy' }.response.should match %r{} end end context "SMS" do it "sends a simple SMS message" do verb = Twilio::Verb.new { |v| v.sms 'Join us at the bar', :to => "8005554321", :from => "9006661111", :action => "/smsService", :method => "GET" }.response.should match %r{Join us at the bar} end end end