iro/tests/sipgate.py
author Sandro Knauß <knauss@netzguerilla.net>
Wed, 25 Apr 2012 17:15:15 +0200
branchdevel
changeset 281 76572d14bd27
parent 272 97826c8248f9
child 294 0e75bd39767d
permissions -rw-r--r--
createdoc.py: cleaning up

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