tests for Task.start -> ExJob->setError/setStatus devel
authorSandro Knauß <knauss@netzguerilla.net>
Mon, 05 Mar 2012 21:37:44 +0100
branchdevel
changeset 216 ab8e2f26718e
parent 215 5bacdb7e94d1
child 217 d755b2e0cc0b
tests for Task.start -> ExJob->setError/setStatus
iro/offer/smstrade.py
tests/job.py
tests/offer_integrated.py
tests/smstrade.py
--- a/iro/offer/smstrade.py	Mon Mar 05 19:47:08 2012 +0100
+++ b/iro/offer/smstrade.py	Mon Mar 05 21:37:44 2012 +0100
@@ -84,7 +84,7 @@
             "key":Option(lambda x,y:x,long="smstrade Gateway Key https://login.smstrade.de/index.php?gateway", must=True)
             })
 
-    def send(self, route, sms, recipient):
+    def send(self, route, recipient, sms):
         """send SMS with $sms to $recipients"""
         #logger.debug('smstrade.sendSMS(%s,%s)'%(sms,  recipient))
 
--- a/tests/job.py	Mon Mar 05 19:47:08 2012 +0100
+++ b/tests/job.py	Mon Mar 05 21:37:44 2012 +0100
@@ -169,14 +169,11 @@
             job = u.job(self.job.dbjob)
             self.assertEqual(job.status,"sending")
 
-
-
     @patch("iro.model.job.datetime")
     def testCosts(self,p_dt):
         p_dt.today.return_value = datetime(2000, 1, 2, 3, 4, 5)
         task = Task(Telnumber('123456789'),self.job)
-        status = Status(self.provider,"a")
-        status.costs = 0.055
+        status = Status(self.provider,"a",costs=0.055,exID="12345678",count=1)
         
         self.job.setStatus(task, status)
         
@@ -193,3 +190,5 @@
             self.assertEqual(msg.recipient,str(Telnumber('123456789')))
             self.assertEqual(msg.date,datetime(2000, 1, 2, 3, 4, 5))
             self.assertEqual(msg.offer,o)
+            self.assertEqual(msg.exID,"12345678")
+            self.assertEqual(msg.count,1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/offer_integrated.py	Mon Mar 05 21:37:44 2012 +0100
@@ -0,0 +1,121 @@
+from twisted.internet.defer import inlineCallbacks
+
+from datetime import datetime
+from decimal import Decimal 
+from mock import patch, Mock
+
+from iro.model.job import exJobs
+from iro.model.pool import data
+from iro.model.schema import User, Offer as DBOffer, Userright
+from iro.model.message import SMS
+from iro.model import offer
+
+from iro.controller.task import Task, taskPool
+from iro.telnumber import Telnumber
+
+from iro.offer import Smstrade, SMTP, Offer
+
+from .dbtestcase import DBTestCase
+
+class DummyPool():
+    def run(self, f,*a,**k):
+        return f(*a,**k)
+
+def run( f,*a,**k):
+    return f(*a,**k)
+
+class IntegratedOfferTests(DBTestCase):
+    def setUp(self):
+        DBTestCase.setUp(self)
+        self.pool = data.pool
+        data.pool = DummyPool()
+        
+        self.taskPool = taskPool.run
+        taskPool.run = run 
+
+    def tearDown(self):
+        exJobs.clear()
+        data.pool = self.pool
+        self.pool = None
+        taskPool.run = self.taskPool
+        self.taskPool = None
+        DBTestCase.tearDown(self)
+
+
+    @patch("iro.model.job.datetime")
+    @patch("urllib.urlopen")
+    @inlineCallbacks
+    def testSmstrade(self, p_u, p_dt):
+        f = Mock()
+        f.readlines.return_value = ["100","12345678","0.055","1"]
+        p_u.return_value = f
+
+        p_dt.today.return_value = datetime(2000, 1, 2, 3, 4, 5)
+
+        with self.session() as session:
+            u = User(name='test',apikey='abcdef123456789')
+            session.add(u)
+            o=DBOffer(name="s", provider="bla", route="basic", typ="sms")
+            u.rights.append(Userright(o))
+
+        
+        offer.providers["bla"] = Smstrade("bla")
+        offer.providers["bla"].key = "XXXXXX"
+        offer.offers["s"] = Offer("s",offer.providers["bla"],"basic","sms")
+
+        j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
+        t = Task(Telnumber("0123456789"),j)
+        yield t.start()
+
+        with self.session() as session:
+            u = session.merge(u)
+            o = session.merge(o)
+            job = u.job(j.dbjob)
+            self.assertEqual(job.status,"sended")
+            self.assertEqual(len(job.messages),1)
+            
+            msg = job.messages[0]
+            self.assertEqual(msg.price,Decimal('0.0550'))
+            self.assertEqual(msg.isBilled,False)
+            self.assertEqual(msg.recipient,str(Telnumber('123456789')))
+            self.assertEqual(msg.date,datetime(2000, 1, 2, 3, 4, 5))
+            self.assertEqual(msg.offer,o)
+            self.assertEqual(msg.exID,"12345678")
+            self.assertEqual(msg.count,1)
+
+
+    @patch("urllib.urlopen")
+    @inlineCallbacks
+    def testSmstradeException(self, mock_urlopen):
+        f = Mock()
+        f.readlines.return_value = ["703"]
+        mock_urlopen.return_value = f
+
+        with self.session() as session:
+            u = User(name='test',apikey='abcdef123456789')
+            session.add(u)
+            o=DBOffer(name="s", provider="bla", route="basic", typ="sms")
+            u.rights.append(Userright(o)) 
+
+        offer.providers["bla"] = Smstrade("bla")
+        offer.providers["bla"].key = "XXXXXX"
+        offer.offers["s"] = Offer("s",offer.providers["bla"],"basic","sms")
+
+        j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
+        t = Task(Telnumber("0123456789"),j)
+        yield t.start()
+
+        with self.session() as session:
+            u = session.merge(u)
+            o = session.merge(o)
+            job = u.job(j.dbjob)
+            self.assertEqual(job.status,"error")
+            self.assertEqual(len(job.messages),0)
+
+    def testSmtp(self):
+        pass
+    testSmtp.todo ="to implement"
+    
+    def testSmtpException(self):
+        pass
+    testSmtpException.todo ="to implement"
--- a/tests/smstrade.py	Mon Mar 05 19:47:08 2012 +0100
+++ b/tests/smstrade.py	Mon Mar 05 21:37:44 2012 +0100
@@ -36,7 +36,7 @@
         
         p=self.getProvider()
         content = "Hello World"
-        r = p.send("gold",SMS(content,None), Telnumber("01701234567"))
+        r = p.send("gold", Telnumber("01701234567"), SMS(content,None))
 
         ca = mock_urlopen.call_args[0]
         c=ca[1].split("&")
@@ -74,7 +74,7 @@
     def testRejectRecipient(self):
         p=self.getProvider()
         content = "Hello World"
-        e = self.assertRaises(RejectRecipient, p.send, "basic",SMS(content,None), Telnumber("+331701234567"))
+        e = self.assertRaises(RejectRecipient, p.send, "basic", Telnumber("+331701234567"), SMS(content,None))
         self.assertEqual(str(e),'Reject recipient(00331701234567): None')
 
     @patch("urllib.urlopen")
@@ -85,10 +85,10 @@
 
         p=self.getProvider()
         content = "Hello World"
-        self.assertRaises(RejectRecipient, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
+        self.assertRaises(RejectRecipient, p.send , "basic", Telnumber("01701234567") ,SMS(content,None))
 
         f.readlines.return_value = ["71"]
-        e = self.assertRaises(RejectRecipient, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
+        e = self.assertRaises(RejectRecipient, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
         self.assertEqual(str(e),'Reject recipient(00491701234567): 71: Feature nicht ueber diese Route moeglich.')
 
     @patch("urllib.urlopen")
@@ -99,7 +99,7 @@
 
         p=self.getProvider()
         content = "Hello World"
-        e = self.assertRaises(SmstradeException, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
+        e = self.assertRaises(SmstradeException, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
         self.assertEqual(str(e),'950:Error in external API.\n703: unknown statuscode.')
 
     @patch("urllib.urlopen")
@@ -110,7 +110,7 @@
 
         p=self.getProvider()
         content = "Hello World"
-        e = self.assertRaises(SmstradeException, p.send , "basic", SMS(content,None), Telnumber("01701234567"))
+        e = self.assertRaises(SmstradeException, p.send , "basic", Telnumber("01701234567"), SMS(content,None))
         self.assertEqual(str(e),'950:Error in external API.\n10: Empfaengernummer nicht korrekt.')