Skip to content

Commit

Permalink
Adding more unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
arfrank committed Nov 15, 2010
1 parent 71965d6 commit 1a2d67d
Show file tree
Hide file tree
Showing 16 changed files with 181 additions and 95 deletions.
19 changes: 11 additions & 8 deletions helpers/parameters.py
Expand Up @@ -26,10 +26,10 @@ def parse_phone_number(phone_number):
phoneGroups = phonePattern.search(phone_number).groups()
pn = '+1'+str(phoneGroups[1])+str(phoneGroups[2])+str(phoneGroups[3])
except Exception, e:
logging.info('having trouble parsing phone number: '+phone_number)
#logging.info('having trouble parsing phone number: '+phone_number)
return phone_number, False
else:
logging.info('successful parsing phone number: '+phone_number)
#logging.info('successful parsing phone number: '+phone_number)
return pn, True
#should actually parse # and check for truth

Expand All @@ -47,26 +47,29 @@ def valid_to_phone_number(phone_number,required = False):
return True, 21401, 'http://www.twilio.com/docs/errors/21401'

def valid_from_phone_number(phone_number, required = False, Direction = 'outbound-api', SMS = False):
#logging.info('Trying to send a from message for SMS:' +str(SMS)+' '+str(phone_number))
if (phone_number is None or phone_number == '') and required:
return False, 21603, 'http://www.twilio.com/docs/errors/21603'
else:
# logging.info('from phone number not none, and required')
number_parsed, Valid = parse_phone_number(phone_number)
if Valid:
logging.info('valid from phone number, but is it outgoing')
logging.info('Direction is: '+str(Direction))
#logging.info('valid from phone number, but is it outgoing')
#logging.info('Direction is: '+str(Direction))
if Direction in ['outbound-call','outbound-api','outbound-reply']:
logging.info('outgoing direction from phone number')
#logging.info('outgoing direction from phone number')
#need to check numbers
#first check if we have that phone number as an incoming phone number
PN = incoming_phone_numbers.Incoming_Phone_Number.all().filter('PhoneNumber =',number_parsed).get()
if PN is None:
logging.info('no incoming phone number')
#logging.info('Not an incoming phone number to be used')
#logging.info('no incoming phone number')
if SMS:
return False, 14108, 'http://www.twilio.com/docs/error/14108'
else:
PN = outgoing_caller_ids.Outgoing_Caller_Ids.all().filter('PhoneNumber =',number_parsed).get()
PN = outgoing_caller_ids.Outgoing_Caller_Id.all().filter('PhoneNumber =',number_parsed).get()
if PN is None:
#logging.info('could not find an outgoing number')
return False, 14108, 'http://www.twilio.com/docs/error/14108'
else:
return True, 0, ''
Expand All @@ -75,7 +78,7 @@ def valid_from_phone_number(phone_number, required = False, Direction = 'outboun
else:
return True, 0, ''
else:
logging.info('not a valid from phone number')
#logging.info('not a valid from phone number')
return False, 21401, 'http://www.twilio.com/docs/errors/21401'

def valid_body(body, required=True):
Expand Down
Binary file modified helpers/parameters.pyc
Binary file not shown.
2 changes: 1 addition & 1 deletion models/accounts.py
Expand Up @@ -46,7 +46,7 @@ def sanitize(self, request, arg_name, arg_value):

def validate(self, request, arg_name,arg_value, **kwargs):
validators = {
'FriendlyName' : parameters.friendlyname_length(request.get('FriendlyName',''))
'FriendlyName' : parameters.friendlyname_length(parameters.arg_or_request(arg_value, request, arg_name,''))
}
if arg_name in validators:

Expand Down
Binary file modified models/accounts.pyc
Binary file not shown.
4 changes: 2 additions & 2 deletions models/calls.py
Expand Up @@ -70,7 +70,7 @@ def new(cls, ParentCallSid, AccountSid,To,From,PhoneNumberSid,Status,StartTime =
def validate(self, request, arg_name,arg_value, **kwargs):
validators = {
'To' : parameters.valid_to_phone_number(arg_value if arg_value is not None else request.get('To',None),required=True),
'From' : parameters.valid_from_phone_number(arg_value if arg_value is not None else request.get('From',None),required=True, self = self)
'From' : parameters.valid_from_phone_number(arg_value if arg_value is not None else request.get('From',None),required=True, Direction = kwargs['Direction'] if 'Direction' in kwargs else None)
}
if arg_name in validators:
return validators[arg_name]
Expand All @@ -96,7 +96,7 @@ def ring(self):
self.Status = 'ringing'
self.put()

def connect(self, Instance, request):
def connect(self):#, Instance, request):
self.Status = 'in-progress'
self.StartTime = datetime.datetime.now()
#get url of twiml
Expand Down
35 changes: 35 additions & 0 deletions unit_tests/account_model_test.py
@@ -0,0 +1,35 @@
import unittest
import logging

from google.appengine.ext import db

import models

class CallModel(unittest.TestCase):
def setUp(self):
self.Account = models.accounts.Account.new(key_name = 'email@email.com', email="email@email.com", password="password")
#account creation is actually done via the webapp, so don't have to think about creation

def test_Account_Password_Check_Success(self):
PW = self.Account.check_password('password')
self.assertTrue(PW)

def test_Account_Password_Check_Failure(self):
PW = self.Account.check_password('failure')
self.assertFalse(PW)

def test_Account_FriendlyName_Validation_None(self):
Valid, TwilioCode, TwilioMsg = self.Account.validate(None, 'FriendlyName', '')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 20002)

def test_Account_FriendlyName_Validation_Success(self):
Valid, TwilioCode, TwilioMsg = self.Account.validate(None, 'FriendlyName', 'This is an okay length friendly name')
self.assertTrue(Valid)
self.assertEqual(TwilioCode, 0)

def test_Account_FriendlyName_Validation_TooLong(self):
Valid, TwilioCode, TwilioMsg = self.Account.validate(None, 'FriendlyName', 'TOO LONG OF A NAME TOO LONG OF A NAME TOO LONG OF A NAME TOO LONG OF A NAME TOO LONG OF A NAME TOO LONG OF A NAME TOO LONG OF A NAME')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 20002)

21 changes: 21 additions & 0 deletions unit_tests/authorization_decorator_test.py
@@ -0,0 +1,21 @@
import unittest

import logging

from decorators import authorization
import models

from google.appengine.ext import db

class AuthorizationDecorator(unittest.TestCase):
def setUp(self):
self.Account = models.accounts.Account.new(key_name='email@email.com',email='email@email.com',password='password')
self.Account.put()

def test_Authorization_Success(self):
def blank(self):
pass
authorized_method = authorization.authorize_request(blank(self))
logging.info( authorized_method )
# need to fake a web request
# authorized_method(self, '2010-04-01',self.Account.Sid,{})
File renamed without changes.
70 changes: 38 additions & 32 deletions unit_tests/call_model_test.py
Expand Up @@ -3,49 +3,55 @@
from google.appengine.ext import db
import models


class MessagesModel(unittest.TestCase):
class CallModel(unittest.TestCase):
def setUp(self):
#create account
self.Account = models.accounts.Account.new(key_name='email@email.com',email='email@email.com',password='password')
self.Account.put()
self.PhoneNumber,Valid,TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new(PhoneNumber = '+13015559999', request = None, AccountSid = self.Account.Sid)
self.PhoneNumber.put()
self.OutgoingCallerId, Valid, TwilioCode, TwilioMsg = models.outgoing_caller_ids.Outgoing_Caller_Id.new(PhoneNumber = '+13015556666', request = None, AccountSid = self.Account.Sid)
db.put([self.PhoneNumber, self.OutgoingCallerId])
self.FakeToNumber = '+12405551234'
self.BodyText = 'Fake Body Text'
self.LongBodyText = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis. Curabitur dapibus enim sit amet elit pharetra tincidunt feugiat nisl imperdiet. Ut convallis libero in urna ultrices accumsan. Donec sed odio eros. Donec viverra mi quis quam pulvinar at malesuada arcu rhoncus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In rutrum accumsan ultricies. Mauris vitae nisi at sem facilisis semper ac in est.'

def test_Message_creation_success(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = self.FakeToNumber, From = self.PhoneNumber.PhoneNumber, Body = self.BodyText, Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
def test_Call_Creation_Success_Full_Lifecycle(self):
Call, Valid, TwilioCode, TwilioMsg = models.calls.Call.new(To = self.FakeToNumber, From = self.PhoneNumber.PhoneNumber, request = None, Direction = 'outbound-api', AccountSid = self.Account.Sid, Status = 'queued')
self.assertTrue(Valid)
self.assertEqual(Call.Status,'queued')
Call.ring()
self.assertEqual(Call.Status,'ringing')
Call.connect()
self.assertEqual(Call.Status,'in-progress')
Call.disconnect()
self.assertEqual(Call.Status,'complete')

def test_Call_Creation_Success_Outgoing_Caller_Id_Full_Lifecycle(self):
Call, Valid, TwilioCode, TwilioMsg = models.calls.Call.new(To = self.FakeToNumber, From = self.OutgoingCallerId.PhoneNumber, request = None, Direction = 'outbound-api', AccountSid = self.Account.Sid, Status = 'queued')
self.assertTrue(Valid)
self.assertEqual(TwilioCode, 0)
self.assertEqual(Call.Status,'queued')
Call.ring()
self.assertEqual(Call.Status,'ringing')
Call.connect()
self.assertEqual(Call.Status,'in-progress')
Call.disconnect()
self.assertEqual(Call.Status,'complete')

def test_Call_Creation_Success_Busy(self):
Call, Valid, TwilioCode, TwilioMsg = models.calls.Call.new(To = self.FakeToNumber, From = self.PhoneNumber.PhoneNumber, request = None, Direction = 'outbound-api', AccountSid = self.Account.Sid, Status = 'queued')
self.assertTrue(Valid)
self.assertEqual(Message.To,self.FakeToNumber)
self.assertEqual(Message.From,self.PhoneNumber.PhoneNumber)
self.assertEqual(Message.Body,self.BodyText)
self.assertEqual(Call.Status,'queued')
Call.ring()
self.assertEqual(Call.Status,'ringing')
Call.busy()
self.assertEqual(Call.Status,'busy')

def test_Message_creation_to_failure(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = 'adsfadsfasdf', From = self.PhoneNumber.PhoneNumber, Body = 'Good body text', Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21401)

def test_Message_creation_from_failure_mistyped_number(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = self.FakeToNumber, From = '+240555a123', Body = 'Good body text', Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
def test_Call_Failure_Invalid_To_Number(self):
Call, Valid, TwilioCode, TwilioMsg = models.calls.Call.new(To = '+12123123', From = self.PhoneNumber.PhoneNumber, request = None, Direction = 'outbound-api', AccountSid = self.Account.Sid)
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21401)

def test_Message_creation_from_failure_not_allowed_number(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = self.FakeToNumber, From = '+5555555555', Body = 'Good body text', Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
def test_Call_Failure_Invalid_From_Number(self):
Call, Valid, TwilioCode, TwilioMsg = models.calls.Call.new(To = self.FakeToNumber, From = '+14105553232', request = None, Direction = 'outbound-api', AccountSid = self.Account.Sid)
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 14108)

def test_Message_creation_body_blank_failure(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = self.FakeToNumber, From = self.PhoneNumber.PhoneNumber, Body = '', Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 14103)

def test_Message_creation_body_long_failure(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = self.FakeToNumber, From = self.PhoneNumber.PhoneNumber, Body = self.LongBodyText, Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21605)

def test_Message_creation_callback_failure(self):
Message, Valid, TwilioCode, TwilioMsg = models.messages.Message.new(To = self.FakeToNumber, From = self.PhoneNumber.PhoneNumber, Body = 'Good body text', Direction = 'outbound-api', request = None, AccountSid = self.Account.Sid)
Empty file.
57 changes: 57 additions & 0 deletions unit_tests/incoming_phone_numbers_model_test.py
@@ -0,0 +1,57 @@
import unittest
import logging

from google.appengine.ext import db

import models

class IncomingPhoneNumberModel(unittest.TestCase):
def setUp(self):
#create account
self.Account = models.accounts.Account.new(key_name='email@email.com',email='email@email.com',password='password')
self.Account.put()
self.PhoneNumber = '+12405553456'

def test_Incoming_Phone_Number_Creation_Success(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = 'http://www.twilio.com/', VoiceMethod = 'POST', VoiceFallbackUrl = 'http://www.twilio.com', VoiceFallbackMethod = 'POST', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'POST', SmsUrl = 'http://www.twilio.com', SmsFallback = 'POST', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'POST')
self.assertTrue(Valid)
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = 'http://www.twilio.com/', VoiceMethod = 'GET', VoiceFallbackUrl = 'http://www.twilio.com', VoiceFallbackMethod = 'GET', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'GET', SmsUrl = 'http://www.twilio.com', SmsFallback = 'GET', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'GET')
self.assertTrue(Valid)

def test_Incoming_Phone_Number_Creation_Failure_FriendlyName_Blank(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = '')
self.assertFalse(Valid)
self.assertEqual(20002, TwilioCode)

def test_Incoming_Phone_Number_Creation_Failure_FriendlyName_TooLong(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'TOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONGTOO LONG')
self.assertFalse(Valid)
self.assertEqual(20002, TwilioCode)

def test_Incoming_Phone_Number_Creation_Failure_VoiceUrl(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = 'BADURL', VoiceMethod = 'POST', VoiceFallbackUrl = 'http://www.twilio.com', VoiceFallbackMethod = 'POST', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'POST', SmsUrl = 'http://www.twilio.com', SmsFallback = 'POST', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'POST')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21502)

def test_Incoming_Phone_Number_Creation_Failure_VoiceMethod(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = 'http://www.twilio.com', VoiceMethod = 'paste', VoiceFallbackUrl = 'http://www.twilio.com', VoiceFallbackMethod = 'POST', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'POST', SmsUrl = 'http://www.twilio.com', SmsFallback = 'POST', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'POST')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21403)


def test_Incoming_Phone_Number_Creation_Failure_VoiceFallbackUrl_Bad(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = 'http://www.twilio.com', VoiceMethod = 'POST', VoiceFallbackUrl = 'BAD URL', VoiceFallbackMethod = 'POST', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'POST', SmsUrl = 'http://www.twilio.com', SmsFallback = 'POST', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'POST')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21502)

def test_Incoming_Phone_Number_Creation_Failure_VoiceFallbackUrl_NoStandardUrl(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = '', VoiceMethod = 'POST', VoiceFallbackUrl = 'BAD URL', VoiceFallbackMethod = 'POST', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'POST', SmsUrl = 'http://www.twilio.com', SmsFallback = 'POST', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'POST')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21502)


def test_Incoming_Phone_Number_Creation_Failure_VoiceFallbackMethod(self):
Incoming_Phone_Number, Valid, TwilioCode, TwilioMsg = models.incoming_phone_numbers.Incoming_Phone_Number.new( request = None, AccountSid = self.Account.Sid, PhoneNumber = self.PhoneNumber, FriendlyName = 'Successful FriendlyName', VoiceUrl = 'http://www.twilio.com', VoiceMethod = 'POST', VoiceFallbackUrl = 'http://www.twilio.com', VoiceFallbackMethod = 'paste', StatusCallback = 'http://www.twilio.com', StatusCallbackMethod = 'POST', SmsUrl = 'http://www.twilio.com', SmsFallback = 'POST', SmsFallbackUrl = 'http://www.twilio.com', SmsFallbackMethod = 'POST')
self.assertFalse(Valid)
self.assertEqual(TwilioCode, 21403)

0 comments on commit 1a2d67d

Please sign in to comment.