require 'rails_helper'
# Twilio Params
# https://www.twilio.com/docs/api/twiml/sms/twilio_request
# url: https://b924379f.ngrok.io/users/1/web_requests/7/sms-endpoint
# params: {"ToCountry"=>"US", "ToState"=>"NY", "SmsMessageSid"=>"SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "NumMedia"=>"0", "ToCity"=>"NEW YORK", "FromZip"=>"48342", "SmsSid"=>"SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "FromState"=>"MI", "SmsStatus"=>"received", "FromCity"=>"PONTIAC", "Body"=>"Lol", "FromCountry"=>"US", "To"=>"+1347555555", "ToZip"=>"10016", "NumSegments"=>"1", "MessageSid"=>"SMxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "AccountSid"=>"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "From"=>"+12485551111", "ApiVersion"=>"2010-04-01"}
# signature: K29NMD9+v5/QLzbdGZW/DRGyxNU=
describe Agents::TwilioReceiveTextAgent do
before do
allow_any_instance_of(Twilio::Security::RequestValidator).to receive(:validate) { true }
end
let(:payload) {
{
"ToCountry"=>"US",
"ToState"=>"NY",
"SmsMessageSid"=>"SMxxxxxxxxxxxxxxxx",
"NumMedia"=>"0",
"ToCity"=>"NEW YORK",
"FromZip"=>"48342",
"SmsSid"=>"SMxxxxxxxxxxxxxxxx",
"FromState"=>"MI",
"SmsStatus"=>"received",
"FromCity"=>"PONTIAC",
"Body"=>"Hy ",
"FromCountry"=>"US",
"To"=>"+1347555555",
"ToZip"=>"10016",
"NumSegments"=>"1",
"MessageSid"=>"SMxxxxxxxxxxxxxxxx",
"AccountSid"=>"ACxxxxxxxxxxxxxxxx",
"From"=>"+12485551111",
"ApiVersion"=>"2010-04-01"}
}
describe 'receive_twilio_text_message' do
before do
@agent = Agents::TwilioReceiveTextAgent.new(
:name => 'twilioreceive',
:options => { :account_sid => 'x',
:auth_token => 'x',
:server_url => 'http://example.com',
:expected_receive_period_in_days => 1
}
)
@agent.user = users(:bob)
@agent.save!
end
it 'should create event upon receiving request' do
request = ActionDispatch::Request.new({
'action_dispatch.request.request_parameters' => payload.merge({"secret" => "sms-endpoint"}),
'REQUEST_METHOD' => "POST",
'HTTP_ACCEPT' => 'application/xml',
'HTTP_X_TWILIO_SIGNATURE' => "HpS7PBa1Agvt4OtO+wZp75IuQa0="
})
out = nil
expect {
out = @agent.receive_web_request(request)
}.to change { Event.count }.by(1)
expect(out).to eq(["\n\n", 200, "text/xml"])
expect(Event.last.payload).to eq(payload)
end
end
describe 'receive_twilio_text_message and send a response' do
before do
@agent = Agents::TwilioReceiveTextAgent.new(
:name => 'twilioreceive',
:options => { :account_sid => 'x',
:auth_token => 'x',
:server_url => 'http://example.com',
:reply_text => "thanks!",
:expected_receive_period_in_days => 1
}
)
@agent.user = users(:bob)
@agent.save!
end
it 'should create event and send back TwiML Message if reply_text is set' do
out = nil
request = ActionDispatch::Request.new({
'action_dispatch.request.request_parameters' => payload.merge({"secret" => "sms-endpoint"}),
'REQUEST_METHOD' => "POST",
'HTTP_ACCEPT' => 'application/xml',
'HTTP_X_TWILIO_SIGNATURE' => "HpS7PBa1Agvt4OtO+wZp75IuQa0="
})
expect {
out = @agent.receive_web_request(request)
}.to change { Event.count }.by(1)
expect(out).to eq(["\n\nthanks!\n\n", 200, "text/xml"])
expect(Event.last.payload).to eq(payload)
end
end
end