diff --git a/Makefile b/Makefile index db1f353c73..2660eba845 100644 --- a/Makefile +++ b/Makefile @@ -19,12 +19,11 @@ analysis: . venv/bin/activate; flake8 --ignore=E402,F401,W391,W291,W293 twilio --max-line-length=300 test: analysis - . venv/bin/activate; \ - find tests -type d | xargs nosetests + . venv/bin/activate; pytest tests test-with-coverage: . venv/bin/activate; \ - find tests -type d | xargs nosetests --with-coverage --cover-inclusive --cover-erase --cover-package=twilio; \ + pytest --cov=twilio tests; \ coverage xml --omit 'twilio/rest/*' -o coverage.xml docs-install: diff --git a/requirements.txt b/requirements.txt index 29174d1c0c..0e7a439483 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,5 @@ flake8 mock -nose requests>=2.0.0 PyJWT>=2.0.0, <3.0.0 twine diff --git a/tests/requirements.txt b/tests/requirements.txt index f20b5dea95..44ba76b784 100644 --- a/tests/requirements.txt +++ b/tests/requirements.txt @@ -1,8 +1,8 @@ Sphinx==1.8.0 mock==0.8.0 -nose +pytest +pytest-cov coverage -nosexcover flake8 mccabe wheel>=0.22.0 diff --git a/tests/unit/jwt/test_access_token.py b/tests/unit/jwt/test_access_token.py index e58f4b0e16..a1f8e0f898 100644 --- a/tests/unit/jwt/test_access_token.py +++ b/tests/unit/jwt/test_access_token.py @@ -1,8 +1,6 @@ import time import unittest - from datetime import datetime -from nose.tools import assert_equal from twilio.jwt.access_token import AccessToken from twilio.jwt.access_token.grants import ( @@ -35,31 +33,31 @@ def assert_greater_equal(obj1, obj2): class AccessTokenTest(unittest.TestCase): def _validate_claims(self, payload): - assert_equal(SIGNING_KEY_SID, payload['iss']) - assert_equal(ACCOUNT_SID, payload['sub']) + assert SIGNING_KEY_SID == payload['iss'] + assert ACCOUNT_SID == payload['sub'] - assert_is_not_none(payload['exp']) - assert_is_not_none(payload['jti']) - assert_is_not_none(payload['grants']) + assert payload['exp'] is not None + assert payload['jti'] is not None + assert payload['grants'] is not None - assert_greater_equal(payload['exp'], int(time.time())) + assert payload['exp'] >= int(time.time()) - assert_in(payload['iss'], payload['jti']) + assert payload['iss'] in payload['jti'] def test_empty_grants(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal({}, decoded_token.payload['grants']) + assert {} == decoded_token.payload['grants'] def test_region(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret', region='foo') token = scat.to_jwt() decoded_token = AccessToken.from_jwt(token, 'secret') - assert_equal(decoded_token.headers['twr'], 'foo') + assert decoded_token.headers['twr'] == 'foo' def test_empty_region(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') @@ -72,15 +70,15 @@ def test_nbf(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret', nbf=now) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(now, decoded_token.nbf) + assert now == decoded_token.nbf def test_headers(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self.assertEqual(decoded_token.headers['cty'], 'twilio-fpa;v=1') @@ -88,66 +86,66 @@ def test_identity(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret', identity='test@twilio.com') token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal({ - 'identity': 'test@twilio.com' - }, decoded_token.payload['grants']) + assert { + 'identity': 'test@twilio.com' + } == decoded_token.payload['grants'] def test_conversations_grant(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') scat.add_grant(ConversationsGrant(configuration_profile_sid='CP123')) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'configuration_profile_sid': 'CP123' - }, decoded_token.payload['grants']['rtc']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'configuration_profile_sid': 'CP123' + } == decoded_token.payload['grants']['rtc'] def test_video_grant(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') scat.add_grant(VideoGrant(room='RM123')) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'room': 'RM123' - }, decoded_token.payload['grants']['video']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'room': 'RM123' + } == decoded_token.payload['grants']['video'] def test_ip_messaging_grant(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') scat.add_grant(IpMessagingGrant(service_sid='IS123', push_credential_sid='CR123')) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'service_sid': 'IS123', - 'push_credential_sid': 'CR123' - }, decoded_token.payload['grants']['ip_messaging']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'service_sid': 'IS123', + 'push_credential_sid': 'CR123' + } == decoded_token.payload['grants']['ip_messaging'] def test_chat_grant(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') scat.add_grant(ChatGrant(service_sid='IS123', push_credential_sid='CR123')) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'service_sid': 'IS123', - 'push_credential_sid': 'CR123' - }, decoded_token.payload['grants']['chat']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'service_sid': 'IS123', + 'push_credential_sid': 'CR123' + } == decoded_token.payload['grants']['chat'] def test_sync_grant(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') @@ -155,15 +153,15 @@ def test_sync_grant(self): scat.add_grant(SyncGrant(service_sid='IS123', endpoint_id='blahblahendpoint')) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(2, len(decoded_token.payload['grants'])) - assert_equal("bender", decoded_token.payload['grants']['identity']) - assert_equal({ - 'service_sid': 'IS123', - 'endpoint_id': 'blahblahendpoint' - }, decoded_token.payload['grants']['data_sync']) + assert 2 == len(decoded_token.payload['grants']) + assert "bender" == decoded_token.payload['grants']['identity'] + assert { + 'service_sid': 'IS123', + 'endpoint_id': 'blahblahendpoint' + } == decoded_token.payload['grants']['data_sync'] def test_grants(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') @@ -171,12 +169,12 @@ def test_grants(self): scat.add_grant(IpMessagingGrant()) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(2, len(decoded_token.payload['grants'])) - assert_equal({}, decoded_token.payload['grants']['video']) - assert_equal({}, decoded_token.payload['grants']['ip_messaging']) + assert 2 == len(decoded_token.payload['grants']) + assert {} == decoded_token.payload['grants']['video'] + assert {} == decoded_token.payload['grants']['ip_messaging'] def test_programmable_voice_grant(self): grant = VoiceGrant( @@ -190,18 +188,18 @@ def test_programmable_voice_grant(self): scat.add_grant(grant) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'outgoing': { - 'application_sid': 'AP123', - 'params': { - 'foo': 'bar' - } - } - }, decoded_token.payload['grants']['voice']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'outgoing': { + 'application_sid': 'AP123', + 'params': { + 'foo': 'bar' + } + } + } == decoded_token.payload['grants']['voice'] def test_programmable_voice_grant_incoming(self): grant = VoiceGrant( @@ -212,15 +210,15 @@ def test_programmable_voice_grant_incoming(self): scat.add_grant(grant) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'incoming': { - 'allow': True - } - }, decoded_token.payload['grants']['voice']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'incoming': { + 'allow': True + } + } == decoded_token.payload['grants']['voice'] def test_task_router_grant(self): grant = TaskRouterGrant( @@ -233,15 +231,15 @@ def test_task_router_grant(self): scat.add_grant(grant) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal({ - 'workspace_sid': 'WS123', - 'worker_sid': 'WK123', - 'role': 'worker' - }, decoded_token.payload['grants']['task_router']) + assert 1 == len(decoded_token.payload['grants']) + assert { + 'workspace_sid': 'WS123', + 'worker_sid': 'WK123', + 'role': 'worker' + } == decoded_token.payload['grants']['task_router'] def test_playback_grant(self): """Test that PlaybackGrants are created and decoded correctly.""" @@ -253,11 +251,11 @@ def test_playback_grant(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret') scat.add_grant(PlaybackGrant(grant=grant)) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(1, len(decoded_token.payload['grants'])) - assert_equal(grant, decoded_token.payload['grants']['player']) + assert 1 == len(decoded_token.payload['grants']) + assert grant == decoded_token.payload['grants']['player'] def test_pass_grants_in_constructor(self): grants = [ @@ -267,13 +265,13 @@ def test_pass_grants_in_constructor(self): scat = AccessToken(ACCOUNT_SID, SIGNING_KEY_SID, 'secret', grants=grants) token = scat.to_jwt() - assert_is_not_none(token) + assert token is not None decoded_token = AccessToken.from_jwt(token, 'secret') self._validate_claims(decoded_token.payload) - assert_equal(2, len(decoded_token.payload['grants'])) - assert_equal({}, decoded_token.payload['grants']['video']) - assert_equal({}, decoded_token.payload['grants']['ip_messaging']) + assert 2 == len(decoded_token.payload['grants']) + assert {} == decoded_token.payload['grants']['video'] + assert {} == decoded_token.payload['grants']['ip_messaging'] def test_constructor_validates_grants(self): grants = [VideoGrant, 'GrantMeAccessToEverything'] diff --git a/tests/unit/jwt/test_client.py b/tests/unit/jwt/test_client.py index 5cbd937f45..05928aad73 100644 --- a/tests/unit/jwt/test_client.py +++ b/tests/unit/jwt/test_client.py @@ -1,7 +1,5 @@ -import unittest - import time -from nose.tools import assert_true, assert_equal +import unittest from twilio.jwt import Jwt from twilio.jwt.client import ClientCapabilityToken, ScopeURI @@ -11,23 +9,23 @@ class ClientCapabilityTokenTest(unittest.TestCase): def assertIn(self, foo, bar, msg=None): """backport for 2.6""" - return assert_true(foo in bar, msg=(msg or "%s not found in %s" % (foo, bar))) + assert foo in bar, (msg or "%s not found in %s" % (foo, bar)) def now(self): return int(time.time()) def test_no_permissions(self): token = ClientCapabilityToken("AC123", "XXXXX") - assert_equal(len(token._generate_payload()), 1) - assert_equal(token._generate_payload()["scope"], '') + assert len(token._generate_payload()) == 1 + assert token._generate_payload()["scope"] == '' def test_inbound_permissions(self): token = ClientCapabilityToken("AC123", "XXXXX") token.allow_client_incoming("andy") eurl = "scope:client:incoming?clientName=andy" - assert_equal(len(token._generate_payload()), 1) - assert_equal(token._generate_payload()['scope'], eurl) + assert len(token._generate_payload()) == 1 + assert token._generate_payload()['scope'] == eurl def test_outbound_permissions(self): token = ClientCapabilityToken("AC123", "XXXXX") @@ -35,7 +33,7 @@ def test_outbound_permissions(self): eurl = "scope:client:outgoing?appSid=AP123" - assert_equal(len(token._generate_payload()), 1) + assert len(token._generate_payload()) == 1 self.assertIn(eurl, token._generate_payload()['scope']) def test_outbound_permissions_params(self): @@ -43,21 +41,21 @@ def test_outbound_permissions_params(self): token.allow_client_outgoing("AP123", foobar=3) eurl = "scope:client:outgoing?appParams=foobar%3D3&appSid=AP123" - assert_equal(token.payload["scope"], eurl) + assert token.payload["scope"] == eurl def test_events(self): token = ClientCapabilityToken("AC123", "XXXXX") token.allow_event_stream() event_uri = "scope:stream:subscribe?path=%2F2010-04-01%2FEvents" - assert_equal(token.payload["scope"], event_uri) + assert token.payload["scope"] == event_uri def test_events_with_filters(self): token = ClientCapabilityToken("AC123", "XXXXX") token.allow_event_stream(foobar="hey") event_uri = "scope:stream:subscribe?params=foobar%3Dhey&path=%2F2010-04-01%2FEvents" - assert_equal(token.payload["scope"], event_uri) + assert token.payload["scope"] == event_uri def test_decode(self): token = ClientCapabilityToken("AC123", "XXXXX") diff --git a/tests/unit/jwt/test_jwt.py b/tests/unit/jwt/test_jwt.py index e9ac4f0c1b..eee05d61d9 100644 --- a/tests/unit/jwt/test_jwt.py +++ b/tests/unit/jwt/test_jwt.py @@ -1,8 +1,7 @@ -import unittest -import jwt as jwt_lib import time as real_time +import unittest -from nose.tools import assert_true +import jwt as jwt_lib from mock import patch from twilio.jwt import Jwt, JwtDecodeError @@ -38,7 +37,7 @@ def _generate_headers(self): class JwtTest(unittest.TestCase): def assertIn(self, foo, bar, msg=None): """backport for 2.6""" - return assert_true(foo in bar, msg=(msg or "%s not found in %s" % (foo, bar))) + assert foo in bar, (msg or "%s not found in %s" % (foo, bar)) def now(self): return int(real_time.time()) diff --git a/tests/unit/test_request_validator.py b/tests/unit/test_request_validator.py index 86478d6746..fdc5d53095 100644 --- a/tests/unit/test_request_validator.py +++ b/tests/unit/test_request_validator.py @@ -1,8 +1,6 @@ # -*- coding: utf-8 -*- import unittest -from nose.tools import assert_equal, assert_true - from twilio.request_validator import RequestValidator @@ -28,36 +26,36 @@ def setUp(self): def test_compute_signature(self): expected = (self.expected) signature = self.validator.compute_signature(self.uri, self.params) - assert_equal(signature, expected) + assert signature == expected def test_compute_hash_unicode(self): expected = self.bodyHash body_hash = self.validator.compute_hash(self.body) - assert_equal(expected, body_hash) + assert expected == body_hash def test_validation(self): - assert_true(self.validator.validate(self.uri, self.params, self.expected)) + assert self.validator.validate(self.uri, self.params, self.expected) def test_validation_removes_port_on_https(self): uri = self.uri.replace(".com", ".com:1234") - assert_true(self.validator.validate(uri, self.params, self.expected)) + assert self.validator.validate(uri, self.params, self.expected) def test_validation_removes_port_on_http(self): expected = "Zmvh+3yNM1Phv2jhDCwEM3q5ebU=" # hash of http uri with port 1234 uri = self.uri.replace(".com", ".com:1234").replace("https", "http") - assert_true(self.validator.validate(uri, self.params, expected)) + assert self.validator.validate(uri, self.params, expected) def test_validation_adds_port_on_https(self): expected = "kvajT1Ptam85bY51eRf/AJRuM3w=" # hash of uri with port 443 - assert_true(self.validator.validate(self.uri, self.params, expected)) + assert self.validator.validate(self.uri, self.params, expected) def test_validation_adds_port_on_http(self): uri = self.uri.replace("https", "http") expected = "0ZXoZLH/DfblKGATFgpif+LLRf4=" # hash of uri with port 80 - assert_true(self.validator.validate(uri, self.params, expected)) + assert self.validator.validate(uri, self.params, expected) def test_validation_of_body_succeeds(self): uri = self.uriWithBody is_valid = self.validator.validate(uri, self.body, "a9nBmqA0ju/hNViExpshrM61xv4=") - assert_true(is_valid) + assert is_valid diff --git a/tests/unit/twiml/__init__.py b/tests/unit/twiml/__init__.py index 70b95d781e..637c5cd077 100644 --- a/tests/unit/twiml/__init__.py +++ b/tests/unit/twiml/__init__.py @@ -1,6 +1,6 @@ import unittest -from nose.tools import raises +from pytest import raises from twilio.twiml import ( format_language, @@ -14,10 +14,10 @@ class TwilioTest(unittest.TestCase): def strip(self, xml): return str(xml) - @raises(TwiMLException) def test_append_fail(self): - t = TwiML() - t.append(12345) + with raises(TwiMLException): + t = TwiML() + t.append(12345) def test_format_language_none(self): language = None @@ -31,9 +31,9 @@ def test_format_language_coerced(self): language = 'EN_us' self.assertEqual('en-US', format_language(language)) - @raises(TwiMLException) def test_format_language_fail(self): - format_language('this is invalid') + with raises(TwiMLException): + format_language('this is invalid') def test_lower_camel_empty_string(self): self.assertEqual('', lower_camel('')) diff --git a/tests/unit/twiml/test_messaging_response.py b/tests/unit/twiml/test_messaging_response.py index 4e097de9f5..79fcda723c 100644 --- a/tests/unit/twiml/test_messaging_response.py +++ b/tests/unit/twiml/test_messaging_response.py @@ -1,4 +1,3 @@ -from nose.tools import assert_equal from tests.unit.twiml import TwilioTest from twilio.twiml.messaging_response import MessagingResponse, Body, Media @@ -7,49 +6,40 @@ class TestResponse(TwilioTest): def test_empty_response(self): r = MessagingResponse() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_response(self): r = MessagingResponse() r.message('Hello') r.redirect(url='example.com') - assert_equal( - self.strip(r), - 'Helloexample.com' - ) + assert self.strip(r) == \ + 'Helloexample.com' def test_response_chain(self): with MessagingResponse() as r: r.message('Hello') r.redirect(url='example.com') - assert_equal( - self.strip(r), - 'Helloexample.com' - ) + assert self.strip(r) == \ + 'Helloexample.com' def test_nested_verbs(self): with MessagingResponse() as r: with r.message('Hello') as m: m.media('example.com') - assert_equal( - self.strip(r), - 'Helloexample.com' - ) + assert self.strip(r) == \ + 'Helloexample.com' def test_child_node(self): with MessagingResponse() as r: with r.add_child('message', tag='global') as mod: mod.add_child('bold', 'Hello') - assert_equal( - self.strip(r), - 'Hello') + assert self.strip(r) == \ + 'Hello' def test_mixed(self): r = MessagingResponse() @@ -58,10 +48,8 @@ def test_mixed(self): r.add_child('Child').append('content') r.append('after') - assert_equal( - self.strip(r), - 'beforecontentafter' - ) + assert self.strip(r) == \ + 'beforecontentafter' class TestMessage(TwilioTest): @@ -70,10 +58,8 @@ def test_body(self): r = MessagingResponse() r.message('Hello') - assert_equal( - self.strip(r), - 'Hello' - ) + assert self.strip(r) == \ + 'Hello' def test_nested_body(self): b = Body('Hello World') @@ -81,10 +67,8 @@ def test_nested_body(self): r = MessagingResponse() r.append(b) - assert_equal( - self.strip(r), - 'Hello World' - ) + assert self.strip(r) == \ + 'Hello World' def test_nested_body_media(self): b = Body('Hello World') @@ -94,10 +78,8 @@ def test_nested_body_media(self): r.append(b) r.append(m) - assert_equal( - self.strip(r), - 'Hello Worldhey.jpg' - ) + assert self.strip(r) == \ + 'Hello Worldhey.jpg' class TestRedirect(TwilioTest): @@ -105,10 +87,8 @@ def test_redirect(self): r = MessagingResponse() r.redirect(url='example.com') - assert_equal( - self.strip(r), - 'example.com' - ) + assert self.strip(r) == \ + 'example.com' class TestText(TwilioTest): @@ -116,10 +96,8 @@ def test_text(self): r = MessagingResponse() r.append('No tags!') - assert_equal( - self.strip(r), - 'No tags!' - ) + assert self.strip(r) == \ + 'No tags!' def text_mixed(self): r = MessagingResponse() @@ -127,7 +105,5 @@ def text_mixed(self): r.append(Body('Content')) r.append('after') - assert_equal( - self.strip(r), - 'beforeContentafter' - ) + assert self.strip(r) == \ + 'beforeContentafter' diff --git a/tests/unit/twiml/test_voice_response.py b/tests/unit/twiml/test_voice_response.py index 6a90112585..7f8b3e3c18 100644 --- a/tests/unit/twiml/test_voice_response.py +++ b/tests/unit/twiml/test_voice_response.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- -from nose.tools import assert_equal from tests.unit.twiml import TwilioTest from twilio.twiml.voice_response import VoiceResponse, Dial, Enqueue, Gather @@ -8,10 +7,7 @@ class TestResponse(TwilioTest): def test_empty_response(self): r = VoiceResponse() - assert_equal( - self.strip(r), - '' - ) + assert (self.strip(r) == '') def test_response(self): r = VoiceResponse() @@ -23,11 +19,9 @@ def test_response(self): from_='+10987654321' ) - assert_equal( - self.strip(r), - '' - 'twilio sms' - ) + assert self.strip(r) == \ + '' \ + 'twilio sms' def test_response_chain(self): with VoiceResponse() as r: @@ -39,21 +33,17 @@ def test_response_chain(self): from_='+10987654321' ) - assert_equal( - self.strip(r), - '' - 'twilio sms' - ) + assert self.strip(r) == \ + '' \ + 'twilio sms' def test_nested_verbs(self): with VoiceResponse() as r: with r.gather() as g: g.say('Hello', voice='man') - assert_equal( - self.strip(r), - 'Hello' - ) + assert self.strip(r) == \ + 'Hello' class TestSay(TwilioTest): @@ -63,71 +53,57 @@ def test_empty_say(self): r = VoiceResponse() r.say('') - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_say_hello_world(self): """ should say hello world """ r = VoiceResponse() r.say('Hello World') - assert_equal( - self.strip(r), - 'Hello World' - ) + assert self.strip(r) == \ + 'Hello World' def test_say_french(self): """ should say hello monkey """ r = VoiceResponse() r.say('n\xe9cessaire et d\'autres') - assert_equal( - self.strip(r), - 'nécessaire et d\'autres' - ) + assert self.strip(r) == \ + 'nécessaire et d\'autres' def test_say_loop(self): """ should say hello monkey and loop 3 times """ r = VoiceResponse() r.say('Hello Monkey', loop=3) - assert_equal( - self.strip(r), - 'Hello Monkey' - ) + assert self.strip(r) == \ + 'Hello Monkey' def test_say_loop_gb(self): """ should say have a woman say hello monkey and loop 3 times """ r = VoiceResponse() r.say('Hello Monkey', language='en-gb') - assert_equal( - self.strip(r), - 'Hello Monkey' - ) + assert self.strip(r) == \ + 'Hello Monkey' def test_say_loop_woman(self): """ should say have a woman say hello monkey and loop 3 times """ r = VoiceResponse() r.say('Hello Monkey', loop=3, voice='woman') - assert_equal( - self.strip(r), - 'Hello Monkey' - ) + assert self.strip(r) == \ + 'Hello Monkey' def test_say_all(self): """ convenience method: should say have a woman say hello monkey and loop 3 times and be in french """ r = VoiceResponse() r.say('Hello Monkey', loop=3, voice='man', language='fr') - assert_equal( - self.strip(r), - '' - 'Hello Monkey' - ) + assert self.strip(r) == \ + '' \ + 'Hello Monkey' class TestPlay(TwilioTest): @@ -137,40 +113,32 @@ def test_empty_play(self): r = VoiceResponse() r.play() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_play_hello(self): """ should play hello monkey """ r = VoiceResponse() r.play(url='http://hellomonkey.mp3') - assert_equal( - self.strip(r), - 'http://hellomonkey.mp3' - ) + assert self.strip(r) == \ + 'http://hellomonkey.mp3' def test_play_hello_loop(self): """ should play hello monkey loop """ r = VoiceResponse() r.play(url='http://hellomonkey.mp3', loop=3) - assert_equal( - self.strip(r), - 'http://hellomonkey.mp3' - ) + assert self.strip(r) == \ + 'http://hellomonkey.mp3' def test_play_digits(self): """ should play digits """ r = VoiceResponse() r.play(digits='w123') - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' class TestRecord(TwilioTest): @@ -180,41 +148,32 @@ def test_record_empty(self): r = VoiceResponse() r.record() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_record_action_method(self): """ should record with an action and a get method """ r = VoiceResponse() r.record(action='example.com', method='GET') - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_record_max_length_finish_timeout(self): """ should record with an maxLength, finishOnKey, and timeout """ r = VoiceResponse() r.record(timeout=4, finish_on_key='#', max_length=30) - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_record_transcribe(self): """ should record with a transcribe and transcribeCallback """ r = VoiceResponse() r.record(transcribe_callback='example.com') - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' class TestRedirect(TwilioTest): @@ -223,29 +182,23 @@ def test_redirect_empty(self): r = VoiceResponse() r.redirect('') - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_redirect_method(self): r = VoiceResponse() r.redirect('example.com', method='POST') - assert_equal( - self.strip(r), - 'example.com' - ) + assert self.strip(r) == \ + 'example.com' def test_redirect_method_params(self): r = VoiceResponse() r.redirect('example.com?id=34&action=hey', method='POST') - assert_equal( - self.strip(r), - '' - 'example.com?id=34&action=hey' - ) + assert self.strip(r) == \ + '' \ + 'example.com?id=34&action=hey' class TestHangup(TwilioTest): @@ -255,10 +208,8 @@ def test_hangup(self): r = VoiceResponse() r.hangup() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' class TestLeave(TwilioTest): @@ -268,10 +219,8 @@ def test_leave(self): r = VoiceResponse() r.leave() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' class TestReject(TwilioTest): @@ -281,10 +230,8 @@ def test_reject(self): r = VoiceResponse() r.reject() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' class TestSms(TwilioTest): @@ -294,43 +241,35 @@ def test_empty(self): r = VoiceResponse() r.sms('') - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_body(self): """ Test hello world """ r = VoiceResponse() r.sms('Hello, World') - assert_equal( - self.strip(r), - 'Hello, World' - ) + assert self.strip(r) == \ + 'Hello, World' def test_to_from_action(self): """ Test the to, from, and status callback """ r = VoiceResponse() r.sms('Hello, World', to=1231231234, from_=3453453456, status_callback='example.com?id=34&action=hey') - assert_equal( - self.strip(r), - '' - '' - 'Hello, World' - ) + assert self.strip(r) == \ + '' \ + '' \ + 'Hello, World' def test_action_method(self): """ Test the action and method parameters on Sms """ r = VoiceResponse() r.sms('Hello', method='POST', action='example.com?id=34&action=hey') - assert_equal( - self.strip(r), - '' - 'Hello' - ) + assert self.strip(r) == \ + '' \ + 'Hello' class TestConference(TwilioTest): @@ -348,12 +287,10 @@ def test_conference(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '' - '' - 'TestConferenceAttributes' - ) + assert self.strip(r) == \ + '' \ + '' \ + 'TestConferenceAttributes' def test_muted_conference(self): d = Dial() @@ -369,12 +306,10 @@ def test_muted_conference(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '' - '' - 'TestConferenceMutedAttribute' - ) + assert self.strip(r) == \ + '' \ + '' \ + 'TestConferenceMutedAttribute' class TestQueue(TwilioTest): @@ -386,11 +321,9 @@ def test_queue(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '' - 'TestQueueAttribute' - ) + assert self.strip(r) == \ + '' \ + 'TestQueueAttribute' class TestEcho(TwilioTest): @@ -399,10 +332,8 @@ def test_echo(self): r = VoiceResponse() r.echo() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' class TestEnqueue(TwilioTest): @@ -417,12 +348,10 @@ def test_enqueue(self): wait_url_method='POST' ) - assert_equal( - self.strip(r), - '' - 'TestEnqueueAttribute' - '' - ) + assert self.strip(r) == \ + '' \ + 'TestEnqueueAttribute' \ + '' def test_task_string(self): e = Enqueue(None, workflowSid='123123123') @@ -431,11 +360,9 @@ def test_task_string(self): r = VoiceResponse() r.append(e) - assert_equal( - self.strip(r), - '' - '{"account_sid": "AC123123123"}' - ) + assert self.strip(r) == \ + '' \ + '{"account_sid": "AC123123123"}' def test_task_dict(self): e = Enqueue(None, workflowSid='123123123') @@ -444,11 +371,9 @@ def test_task_dict(self): r = VoiceResponse() r.append(e) - assert_equal( - '' - '{"account_sid": "AC123123123"}', - self.strip(r) - ) + assert self.strip(r) == \ + '' \ + '{"account_sid": "AC123123123"}' class TestDial(TwilioTest): @@ -458,10 +383,8 @@ def test_dial(self): r = VoiceResponse() r.dial("1231231234") - assert_equal( - self.strip(r), - '1231231234' - ) + assert self.strip(r) == \ + '1231231234' def test_sim(self): d = Dial() @@ -470,10 +393,8 @@ def test_sim(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '123123123' - ) + assert self.strip(r) == \ + '123123123' def test_sip(self): """ should redirect the call """ @@ -483,10 +404,8 @@ def test_sip(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - 'foo@example.com' - ) + assert self.strip(r) == \ + 'foo@example.com' def test_sip_username_password(self): """ should redirect the call """ @@ -496,11 +415,9 @@ def test_sip_username_password(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '' - 'foo@example.com' - ) + assert self.strip(r) == \ + '' \ + 'foo@example.com' def test_add_number(self): """ add a number to a dial """ @@ -510,10 +427,8 @@ def test_add_number(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '1231231234' - ) + assert self.strip(r) == \ + '1231231234' def test_add_number_status_callback_event(self): """ add a number to a dial with status callback events""" @@ -523,12 +438,10 @@ def test_add_number_status_callback_event(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '' - '1231231234' - '' - ) + assert self.strip(r) == \ + '' \ + '1231231234' \ + '' def test_add_conference(self): """ add a conference to a dial """ @@ -538,10 +451,8 @@ def test_add_conference(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - 'My Room' - ) + assert self.strip(r) == \ + 'My Room' def test_add_queue(self): """ add a queue to a dial """ @@ -551,10 +462,8 @@ def test_add_queue(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - 'The Cute Queue' - ) + assert self.strip(r) == \ + 'The Cute Queue' def test_add_empty_client(self): """ add an empty client to a dial """ @@ -564,10 +473,8 @@ def test_add_empty_client(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_add_client(self): """ add a client to a dial """ @@ -577,10 +484,8 @@ def test_add_client(self): r = VoiceResponse() r.append(d) - assert_equal( - self.strip(r), - 'alice' - ) + assert self.strip(r) == \ + 'alice' class TestGather(TwilioTest): @@ -590,10 +495,8 @@ def test_empty(self): r = VoiceResponse() r.gather() - assert_equal( - self.strip(r), - '' - ) + assert self.strip(r) == \ + '' def test_gather_say(self): g = Gather() @@ -602,10 +505,8 @@ def test_gather_say(self): r = VoiceResponse() r.append(g) - assert_equal( - self.strip(r), - 'Hello' - ) + assert self.strip(r) == \ + 'Hello' def test_nested_say_play_pause(self): """ a gather with a say, play, and pause """ @@ -617,11 +518,9 @@ def test_nested_say_play_pause(self): r = VoiceResponse() r.append(g) - assert_equal( - self.strip(r), - 'Heyhey.mp3' - '' - ) + assert self.strip(r) == \ + 'Heyhey.mp3' \ + '' class TestText(TwilioTest): @@ -629,10 +528,8 @@ def test_text(self): r = VoiceResponse() r.append('No tags!') - assert_equal( - self.strip(r), - 'No tags!' - ) + assert self.strip(r) == \ + 'No tags!' def text_mixed(self): r = VoiceResponse() @@ -640,18 +537,14 @@ def text_mixed(self): r.say('Content') r.append('after') - assert_equal( - self.strip(r), - 'beforeContentafter' - ) + assert self.strip(r) == \ + 'beforeContentafter' def test_add_child(self): with VoiceResponse() as r: with r.add_child('alexa', omnipresent='true') as alexa: alexa.add_child('purchase', 'Kindle') - assert_equal( - self.strip(r), - '' - 'Kindle' - ) + assert self.strip(r) == \ + '' \ + 'Kindle'