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'