iro/tests/sipgate.py
branchdevel
changeset 272 97826c8248f9
child 294 0e75bd39767d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/sipgate.py	Tue Apr 24 23:59:00 2012 +0200
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+from twisted.trial import unittest
+from twisted.web import xmlrpc, server
+from twisted.internet import reactor
+from decimal import Decimal
+
+from iro.error import NoRoute, NoTyp, NeededOption, RejectRecipient
+from iro.telnumber import Telnumber
+from iro.model.message import SMS, Fax
+from iro.offer.sipgate import Sipgate
+
+
+class XMLRPCServer(xmlrpc.XMLRPC):
+    def lookupProcedure(self, procedurePath):
+        return self.l[procedurePath]
+
+class TestSipgateProvider(unittest.TestCase):
+
+    def setUp(self):
+        self.server = XMLRPCServer()
+        self.p = reactor.listenTCP(0, server.Site(self.server),
+                                   interface="127.0.0.1")
+        self.port = self.p.getHost().port
+
+    def tearDown(self):
+        self.server = None
+        return self.p.stopListening()
+
+    def getProvider(self, c=None):
+        _c={"username":"XXXXXXXX",
+            "password":"PPPPPPPP",
+            "typ": "sipgate"
+            }
+
+        if c:
+            _c.update(c)
+
+        ret = Sipgate("test")
+        ret.url="http://%%s:%%s@127.0.0.1:%d/" % self.port
+        ret.load(_c.items())
+        return ret
+
+    def testSendSMS(self):
+        p=self.getProvider()
+        content = u"Hello World - äüöß'\""
+       
+        @xmlrpc.withRequest
+        def f(request, args):
+            self.assertEqual(request.getUser(),"XXXXXXXX")
+            self.assertEqual(request.getPassword(),"PPPPPPPP")
+            self.assertEqual(args,{'Content': u'Hello World - äüöß\'"',
+                'TOS': 'text',
+                'RemoteUri': 'sip:491701234567@sipgate.net'})
+            return {"SessionID":"", "StatusCode":200, "StatusString":"Method success"}
+
+        self.server.l = {"samurai.SessionInitiate": f}
+
+        def s(r):
+            self.assertEqual(r.provider, p)
+            self.assertEqual(r.route, None)
+            self.assertEqual(r.costs, Decimal('0.079'))
+            self.assertEqual(r.exID, '')
+            self.assertEqual(r.count, 1)
+
+        d = p.send("sms", Telnumber("01701234567"), SMS(content,None))
+        d.addCallback(s)
+        return d
+
+
+    def testNeededOption(self):
+        s= self.getProvider()
+        self.assertEqual(s.username, "XXXXXXXX")
+        self.assertEqual(s.password, "PPPPPPPP")
+        self.assertEqual(s.price_sms, '0.079')
+        self.assertEqual(s.price_fax, '0.03')
+
+        self.assertRaises(NeededOption, s.load,[])
+
+    def testSendFunc(self):
+        s = self.getProvider()
+        p = s.getSendFunc("sms",None)
+        self.assertEqual(p.func, s.send)
+        self.assertEqual(p.args, ("sms",))
+        self.assertRaises(NoRoute,s.getSendFunc,"sms","foo")
+        self.assertRaises(NoTyp,s.getSendFunc,"mail2",None)