iro/tests/smstrade.py
branchdevel
changeset 231 3929338fd17f
parent 216 ab8e2f26718e
child 294 0e75bd39767d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/smstrade.py	Sun Mar 18 14:06:27 2012 +0100
@@ -0,0 +1,130 @@
+from twisted.trial import unittest
+from decimal import Decimal
+from mock import patch, Mock
+
+from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient
+from iro.telnumber import Telnumber
+from iro.model.message import SMS
+from iro.offer.smstrade import Smstrade, SmstradeException, StatusCode
+
+
+HOST = "localhost"
+PORT = 9999
+
+class TestSMStradeProvider(unittest.TestCase):
+
+    def getProvider(self, c=None):
+        _c={"key":"XXXXXXXX",
+            "typ":"smstrade",
+            }
+
+        if c:
+            _c.update(c)
+
+        ret = Smstrade("test")
+        ret.load(_c.items())
+        return ret
+
+    @patch("urllib.urlopen")
+    def testSendSMS(self,mock_urlopen):
+        f = Mock()
+        f.readlines.return_value = ["100","12345678","0.055","1"]
+        mock_urlopen.return_value = f
+
+        params = ["key=XXXXXXXX","to=00491701234567", "message=Hello+World", "route=gold", "message_id=1", "cost=1","count=1",'charset=utf-8']
+        params.sort()
+        
+        p=self.getProvider()
+        content = "Hello World"
+        r = p.send("gold", Telnumber("01701234567"), SMS(content,None))
+
+        ca = mock_urlopen.call_args[0]
+        c=ca[1].split("&")
+        c.sort()
+        
+        self.assertEqual(ca[0],"https://gateway.smstrade.de")
+        self.assertEqual(c,params)
+        self.assertEqual(f.readlines.call_count,1)
+
+        self.assertEqual(r.provider, p)
+        self.assertEqual(r.route, 'gold')
+        self.assertEqual(r.costs, Decimal('0.055'))
+        self.assertEqual(r.exID, '12345678')
+        self.assertEqual(r.count, 1)
+
+    def testStatusCode(self):
+        s = StatusCode(10,"12345678","1.10",1)
+        self.assertEqual(str(s),'10: Empfaengernummer nicht korrekt.')
+        self.assertEqual(int(s),10)
+        self.assertEqual(s.count,1)
+        self.assertEqual(s.costs,Decimal("1.10"))
+        self.assertEqual(s.exID,'12345678')
+
+
+    def testUnknownStatusCode(self):
+        s = StatusCode(999)
+        self.assertEqual(str(s),'999: unknown statuscode.')
+        self.assertEqual(int(s),999)
+        self.assertEqual(s.count,0)
+        self.assertEqual(s.costs,Decimal("0.00"))
+        self.assertEqual(s.exID, None)
+
+
+
+    def testRejectRecipient(self):
+        p=self.getProvider()
+        content = "Hello World"
+        e = self.assertRaises(RejectRecipient, p.send, "basic", Telnumber("+331701234567"), SMS(content,None))
+        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", Telnumber("01701234567") ,SMS(content,None))
+
+        f.readlines.return_value = ["71"]
+        e = self.assertRaises(RejectRecipient, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
+        self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich.')
+
+    @patch("urllib.urlopen")
+    def testUnknwonStatuscode(self,mock_urlopen):
+        f = Mock()
+        f.readlines.return_value = ["703"]
+        mock_urlopen.return_value = f
+
+        p=self.getProvider()
+        content = "Hello World"
+        e = self.assertRaises(SmstradeException, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
+        self.assertEqual(str(e),'950: Error in external API.\n703: unknown statuscode.')
+
+    @patch("urllib.urlopen")
+    def testSmstradeException(self,mock_urlopen):
+        f = Mock()
+        f.readlines.return_value = ["10"]
+        mock_urlopen.return_value = f
+
+        p=self.getProvider()
+        content = "Hello World"
+        e = self.assertRaises(SmstradeException, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
+        self.assertEqual(str(e),'950: Error in external API.\n10: Empfaengernummer nicht korrekt.')
+
+
+
+    def testNeededOption(self):
+        s= self.getProvider()
+        self.assertEqual(s.key, "XXXXXXXX")
+
+        self.assertRaises(NeededOption, s.load,[])
+
+    def testSendFunc(self):
+        s = self.getProvider()
+        p = s.getSendFunc("sms","basic")
+        self.assertEqual(p.func, s.send)
+        self.assertEqual(p.args, ("basic",))
+        self.assertRaises(NoRoute,s.getSendFunc,"sms","foo")
+        self.assertRaises(NoTyp,s.getSendFunc,"mail2","basic")