tests for error in smstrade API.
--- 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):
--- 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):
--- 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")