refactoring error of smstrade.
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, StatusException
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 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(StatusException, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
self.assertEqual(str(e),'950:Error in external API.\n703: unknown statuscode.')
@patch("urllib.urlopen")
def testStatusException(self,mock_urlopen):
f = Mock()
f.readlines.return_value = ["10"]
mock_urlopen.return_value = f
p=self.getProvider()
content = "Hello World"
e = self.assertRaises(StatusException, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
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")