tests/smstrade.py
author Sandro Knauß <knauss@netzguerilla.net>
Sat, 03 Mar 2012 03:29:19 +0100
branchdevel
changeset 213 3620bacf1152
parent 186 b381eaa774ab
child 214 bacf50bc46bf
permissions -rw-r--r--
tests for error in smstrade API.

from twisted.trial import unittest

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, UnknownStatusCode

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"
        p.send("gold",SMS(content,None), Telnumber("01701234567"))

        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)

    def testStatusCode(self):
        pass
    
    testStatusCode.todo = "to implement"

    def testRejectRecipient(self):
        p=self.getProvider()
        content = "Hello World"
        e = self.assertRaises(RejectRecipient, p.send, "basic",SMS(content,None), Telnumber("+331701234567"))
        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", SMS(content,None), Telnumber("01701234567"))

        f.readlines.return_value = ["71"]
        e = self.assertRaises(RejectRecipient, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
        self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich')

    @patch("urllib.urlopen")
    def testUnknownStatusCode(self,mock_urlopen):
        f = Mock()
        f.readlines.return_value = ["703"]
        mock_urlopen.return_value = f

        p=self.getProvider()
        content = "Hello World"
        e = self.assertRaises(UnknownStatusCode, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
        self.assertEqual(str(e),'950:Error in external API.\nStatusCode 703 is unknown.')



    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")