iro/tests/smstrade.py
branchdevel
changeset 231 3929338fd17f
parent 216 ab8e2f26718e
child 294 0e75bd39767d
equal deleted inserted replaced
230:448dd8d36839 231:3929338fd17f
       
     1 from twisted.trial import unittest
       
     2 from decimal import Decimal
       
     3 from mock import patch, Mock
       
     4 
       
     5 from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient
       
     6 from iro.telnumber import Telnumber
       
     7 from iro.model.message import SMS
       
     8 from iro.offer.smstrade import Smstrade, SmstradeException, StatusCode
       
     9 
       
    10 
       
    11 HOST = "localhost"
       
    12 PORT = 9999
       
    13 
       
    14 class TestSMStradeProvider(unittest.TestCase):
       
    15 
       
    16     def getProvider(self, c=None):
       
    17         _c={"key":"XXXXXXXX",
       
    18             "typ":"smstrade",
       
    19             }
       
    20 
       
    21         if c:
       
    22             _c.update(c)
       
    23 
       
    24         ret = Smstrade("test")
       
    25         ret.load(_c.items())
       
    26         return ret
       
    27 
       
    28     @patch("urllib.urlopen")
       
    29     def testSendSMS(self,mock_urlopen):
       
    30         f = Mock()
       
    31         f.readlines.return_value = ["100","12345678","0.055","1"]
       
    32         mock_urlopen.return_value = f
       
    33 
       
    34         params = ["key=XXXXXXXX","to=00491701234567", "message=Hello+World", "route=gold", "message_id=1", "cost=1","count=1",'charset=utf-8']
       
    35         params.sort()
       
    36         
       
    37         p=self.getProvider()
       
    38         content = "Hello World"
       
    39         r = p.send("gold", Telnumber("01701234567"), SMS(content,None))
       
    40 
       
    41         ca = mock_urlopen.call_args[0]
       
    42         c=ca[1].split("&")
       
    43         c.sort()
       
    44         
       
    45         self.assertEqual(ca[0],"https://gateway.smstrade.de")
       
    46         self.assertEqual(c,params)
       
    47         self.assertEqual(f.readlines.call_count,1)
       
    48 
       
    49         self.assertEqual(r.provider, p)
       
    50         self.assertEqual(r.route, 'gold')
       
    51         self.assertEqual(r.costs, Decimal('0.055'))
       
    52         self.assertEqual(r.exID, '12345678')
       
    53         self.assertEqual(r.count, 1)
       
    54 
       
    55     def testStatusCode(self):
       
    56         s = StatusCode(10,"12345678","1.10",1)
       
    57         self.assertEqual(str(s),'10: Empfaengernummer nicht korrekt.')
       
    58         self.assertEqual(int(s),10)
       
    59         self.assertEqual(s.count,1)
       
    60         self.assertEqual(s.costs,Decimal("1.10"))
       
    61         self.assertEqual(s.exID,'12345678')
       
    62 
       
    63 
       
    64     def testUnknownStatusCode(self):
       
    65         s = StatusCode(999)
       
    66         self.assertEqual(str(s),'999: unknown statuscode.')
       
    67         self.assertEqual(int(s),999)
       
    68         self.assertEqual(s.count,0)
       
    69         self.assertEqual(s.costs,Decimal("0.00"))
       
    70         self.assertEqual(s.exID, None)
       
    71 
       
    72 
       
    73 
       
    74     def testRejectRecipient(self):
       
    75         p=self.getProvider()
       
    76         content = "Hello World"
       
    77         e = self.assertRaises(RejectRecipient, p.send, "basic", Telnumber("+331701234567"), SMS(content,None))
       
    78         self.assertEqual(str(e),'Reject recipient(00331701234567): None')
       
    79 
       
    80     @patch("urllib.urlopen")
       
    81     def testRejectRecipient70(self,mock_urlopen):
       
    82         f = Mock()
       
    83         f.readlines.return_value = ["70"]
       
    84         mock_urlopen.return_value = f
       
    85 
       
    86         p=self.getProvider()
       
    87         content = "Hello World"
       
    88         self.assertRaises(RejectRecipient, p.send , "basic", Telnumber("01701234567") ,SMS(content,None))
       
    89 
       
    90         f.readlines.return_value = ["71"]
       
    91         e = self.assertRaises(RejectRecipient, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
       
    92         self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich.')
       
    93 
       
    94     @patch("urllib.urlopen")
       
    95     def testUnknwonStatuscode(self,mock_urlopen):
       
    96         f = Mock()
       
    97         f.readlines.return_value = ["703"]
       
    98         mock_urlopen.return_value = f
       
    99 
       
   100         p=self.getProvider()
       
   101         content = "Hello World"
       
   102         e = self.assertRaises(SmstradeException, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
       
   103         self.assertEqual(str(e),'950: Error in external API.\n703: unknown statuscode.')
       
   104 
       
   105     @patch("urllib.urlopen")
       
   106     def testSmstradeException(self,mock_urlopen):
       
   107         f = Mock()
       
   108         f.readlines.return_value = ["10"]
       
   109         mock_urlopen.return_value = f
       
   110 
       
   111         p=self.getProvider()
       
   112         content = "Hello World"
       
   113         e = self.assertRaises(SmstradeException, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
       
   114         self.assertEqual(str(e),'950: Error in external API.\n10: Empfaengernummer nicht korrekt.')
       
   115 
       
   116 
       
   117 
       
   118     def testNeededOption(self):
       
   119         s= self.getProvider()
       
   120         self.assertEqual(s.key, "XXXXXXXX")
       
   121 
       
   122         self.assertRaises(NeededOption, s.load,[])
       
   123 
       
   124     def testSendFunc(self):
       
   125         s = self.getProvider()
       
   126         p = s.getSendFunc("sms","basic")
       
   127         self.assertEqual(p.func, s.send)
       
   128         self.assertEqual(p.args, ("basic",))
       
   129         self.assertRaises(NoRoute,s.getSendFunc,"sms","foo")
       
   130         self.assertRaises(NoTyp,s.getSendFunc,"mail2","basic")