From e56eb4d2fa96ad8a22ffeed172103f0edf961ec7 Mon Sep 17 00:00:00 2001 From: Jon Wayne Parrott Date: Wed, 18 May 2016 13:21:40 -0700 Subject: [PATCH] Adding tests for the twilio sample. Fixes #183 (#354) --- managed_vms/twilio/main.py | 2 +- managed_vms/twilio/main_test.py | 67 +++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 managed_vms/twilio/main_test.py diff --git a/managed_vms/twilio/main.py b/managed_vms/twilio/main.py index 68b8e5b1e4b9..e3fe8edd51a9 100644 --- a/managed_vms/twilio/main.py +++ b/managed_vms/twilio/main.py @@ -48,7 +48,7 @@ def send_sms(): to = request.args.get('to') if not to: return ('Please provide the number to message in the "to" query string' - ' parameter.') + ' parameter.'), 400 client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN) rv = client.messages.create( diff --git a/managed_vms/twilio/main_test.py b/managed_vms/twilio/main_test.py new file mode 100644 index 000000000000..b57c52d0d48c --- /dev/null +++ b/managed_vms/twilio/main_test.py @@ -0,0 +1,67 @@ +# Copyright 2016 Google Inc. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json + +from googleapiclient.http import HttpMockSequence +import httplib2 +import pytest + + +class HttpMockSequenceWithCredentials(HttpMockSequence): + def add_credentials(self, *args): + pass + + +@pytest.fixture +def app(monkeypatch): + monkeypatch.setenv('TWILIO_ACCOUNT_SID', 'sid123') + monkeypatch.setenv('TWILIO_AUTH_TOKEN', 'auth123') + monkeypatch.setenv('TWILIO_NUMBER', '0123456789') + + import main + + main.app.testing = True + return main.app.test_client() + + +def test_receive_call(app): + r = app.post('/call/receive') + assert 'Hello from Twilio!' in r.data.decode('utf-8') + + +def test_send_sms(app, monkeypatch): + httpmock = HttpMockSequenceWithCredentials([ + ({'status': '200'}, json.dumps({ + 'sid': 'sid123' + })) + ]) + + def mock_http_ctor(*args, **kwargs): + return httpmock + + monkeypatch.setattr(httplib2, 'Http', mock_http_ctor) + + r = app.get('/sms/send') + assert r.status_code == 400 + + r = app.get('/sms/send?to=5558675309') + assert r.status_code == 200 + + +def test_receive_sms(app): + r = app.post('/sms/receive', data={ + 'From': '5558675309', 'Body': 'Jenny, I got your number.'}) + assert r.status_code == 200 + assert 'Jenny, I got your number' in r.data.decode('utf-8')