require 'rails_helper' RSpec.describe Channel::Driver::Sms::Twilio do it 'passes' do channel = create_channel stub_request(:post, url_to_mock) .to_return(body: mocked_response_success) api = channel.driver_instance.new expect(api.send(channel.options, { recipient: '+37060010000', message: message_body })).to be true end it 'fails' do channel = create_channel stub_request(:post, url_to_mock) .to_return(status: 400, body: mocked_response_failure) api = channel.driver_instance.new expect { api.send(channel.options, { recipient: 'asd', message: message_body }) }.to raise_exception(Twilio::REST::RestError) expect(a_request(:post, url_to_mock)).to have_been_made end private def create_channel FactoryBot.create(:channel, options: { account_id: account_id, adapter: 'sms/twilio', sender: sender_number, token: token }, created_by_id: 1, updated_by_id: 1) end # api parameters def url_to_mock "https://api.twilio.com/2010-04-01/Accounts/#{account_id}/Messages.json" end def account_id 'ASDASDAS3213424AD' end def message_body 'Test' end def sender_number '+15005550006' end def token '2345r4erfdvc4wedxv3efds' end # mocked responses def mocked_response_success '{"sid": "SM07eab0404df148a4bf3712cb8b72e4c2", "date_created": "Fri, 01 Jun 2018 06:11:19 +0000", "date_updated": "Fri, 01 Jun 2018 06:11:19 +0000", "date_sent": null, "account_sid": "AC5989ff24c08f701b8b1ef09e1b79cbf8", "to": "+37060010000", "from": "+15005550006", "messaging_service_sid": null, "body": "Sent from your Twilio trial account - Test", "status": "queued", "num_segments": "1", "num_media": "0", "direction": "outbound-api", "api_version": "2010-04-01", "price": null, "price_unit": "USD", "error_code": null, "error_message": null, "uri": "/2010-04-01/Accounts/AC5989ff24c08f701b8b1ef09e1b79cbf8/Messages/SM07eab0404df148a4bf3712cb8b72e4c2.json", "subresource_uris": {"media": "/2010-04-01/Accounts/AC5989ff24c08f701b8b1ef09e1b79cbf8/Messages/SM07eab0404df148a4bf3712cb8b72e4c2/Media.json"}}' end def mocked_response_failure '{"code": 21211, "message": "The \'To\' number asd is not a valid phone number.", "more_info": "https://www.twilio.com/docs/errors/21211", "status": 400}' end end