# HG changeset patch # User Sandro Knauß # Date 1330741759 -3600 # Node ID 3620bacf115289fde35088b932f317c717271c88 # Parent 39e4c09e1b60a215426faadcca29aa378e580e03 tests for error in smstrade API. diff -r 39e4c09e1b60 -r 3620bacf1152 iro/error.py --- a/iro/error.py Fri Mar 02 14:00:23 2012 +0100 +++ b/iro/error.py Sat Mar 03 03:29:19 2012 +0100 @@ -69,7 +69,12 @@ return "Not a valid Typ: %s"%self.name class RejectRecipient(Exception): - pass + def __init__(self,recipient, status=None): + self.recipient = recipient + self.status = status + + def __str__(self): + return "Reject recipient(%s): %s"%(str(self.recipient),str(self.status)) class ConfigException(Exception): def __init__(self,section, name): diff -r 39e4c09e1b60 -r 3620bacf1152 iro/offer/smstrade.py --- a/iro/offer/smstrade.py Fri Mar 02 14:00:23 2012 +0100 +++ b/iro/offer/smstrade.py Sat Mar 03 03:29:19 2012 +0100 @@ -19,16 +19,18 @@ from ..config import Option from ..model.status import Status from .provider import Provider, providers +from ..error import RejectRecipient, ExternalException import logging logger=logging.getLogger("smstrade") -class UnknownStatusCode(Exception): - def __init__(self,code): - self.code=code +class UnknownStatusCode(ExternalException): + def __init__(self,status): + ExternalException.__init__(self) + self.status=status def __str__(self): - return "StatusCode %i is unknown"%self.code + return "%s\nStatusCode %i is unknown."%(ExternalException.__str__(self),self.status) class StatusCode: @@ -57,7 +59,7 @@ def __str__(self): try: - return self.statusCodes[self.code] + return "%i: %s"%(self.code, self.statusCodes[self.code]) except IndexError: raise UnknownStatusCode(self.code) @@ -92,17 +94,17 @@ route = unicode(route) if recipient.land != '49' and route == "basic": - return Exception() + raise RejectRecipient(recipient) to ='00'+recipient.land+recipient.number - try: - smsSendStatus = self.__send(route, to, sms) - logger.info('smstrade._send(...)=%i(%s)'%(int(smsSendStatus),str(smsSendStatus))) - if int(smsSendStatus) in (100,): - return Status(self,route) - else: - raise Exception() - except UnknownStatusCode: + + smsSendStatus = self.__send(route, to, sms) + logger.info('smstrade._send(...)=%i(%s)'%(int(smsSendStatus),str(smsSendStatus))) + if int(smsSendStatus) in (100,): + return Status(self,route) + elif int(smsSendStatus) in (70,71,): + raise RejectRecipient(recipient, status=smsSendStatus) + else: raise Exception() def __send(self, route, to, sms): diff -r 39e4c09e1b60 -r 3620bacf1152 tests/smstrade.py --- a/tests/smstrade.py Fri Mar 02 14:00:23 2012 +0100 +++ b/tests/smstrade.py Sat Mar 03 03:29:19 2012 +0100 @@ -2,10 +2,10 @@ from mock import patch, Mock -from iro.error import NoRoute, NoTyp, NeededOption +from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient from iro.telnumber import Telnumber from iro.model.message import SMS -from iro.offer import Smstrade +from iro.offer.smstrade import Smstrade, UnknownStatusCode HOST = "localhost" PORT = 9999 @@ -50,6 +50,39 @@ testStatusCode.todo = "to implement" + def testRejectRecipient(self): + p=self.getProvider() + content = "Hello World" + e = self.assertRaises(RejectRecipient, p.send, "basic",SMS(content,None), Telnumber("+331701234567")) + self.assertEqual(str(e),'Reject recipient(00331701234567): None') + + @patch("urllib.urlopen") + def testRejectRecipient70(self,mock_urlopen): + f = Mock() + f.readlines.return_value = ["70"] + mock_urlopen.return_value = f + + p=self.getProvider() + content = "Hello World" + self.assertRaises(RejectRecipient, p.send , "basic", SMS(content,None), Telnumber("01701234567")) + + f.readlines.return_value = ["71"] + e = self.assertRaises(RejectRecipient, p.send , "basic", SMS(content,None), Telnumber("01701234567")) + self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich') + + @patch("urllib.urlopen") + def testUnknownStatusCode(self,mock_urlopen): + f = Mock() + f.readlines.return_value = ["703"] + mock_urlopen.return_value = f + + p=self.getProvider() + content = "Hello World" + e = self.assertRaises(UnknownStatusCode, p.send , "basic", SMS(content,None), Telnumber("01701234567")) + self.assertEqual(str(e),'950:Error in external API.\nStatusCode 703 is unknown.') + + + def testNeededOption(self): s= self.getProvider() self.assertEqual(s.key, "XXXXXXXX")