tests for error in smstrade API. devel
authorSandro Knauß <knauss@netzguerilla.net>
Sat, 03 Mar 2012 03:29:19 +0100
branchdevel
changeset 213 3620bacf1152
parent 212 39e4c09e1b60
child 214 bacf50bc46bf
tests for error in smstrade API.
iro/error.py
iro/offer/smstrade.py
tests/smstrade.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):
--- 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")