iro/tests/sipgate.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 25 Apr 2012 00:03:09 +0200
branchdevel
changeset 273 170dfb782231
parent 272 97826c8248f9
child 294 0e75bd39767d
permissions -rw-r--r--
doc: switsching to english impressum -> about

# -*- 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)