iro/tests/task.py
branchdevel
changeset 231 3929338fd17f
parent 217 d755b2e0cc0b
child 234 08fcc2b6df99
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/tests/task.py	Sun Mar 18 14:06:27 2012 +0100
@@ -0,0 +1,95 @@
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks
+
+from Queue import deque
+
+from iro.model.schema import User, Offer as DBOffer, Userright
+from iro.model.message import SMS
+from iro.model.status import Status
+from iro.model.offer import offers
+from iro.model.job import exJobs
+
+from iro.controller.task import createJob, Task
+from iro.controller.pool  import taskPool, dbPool
+
+from iro.offer import Offer, Provider
+
+from iro.error import NoRouteForTask
+from iro.telnumber import Telnumber
+
+from ..test_helpers.dbtestcase import DBTestCase
+
+class TaskTestCase(DBTestCase):
+    def setUp(self):
+        DBTestCase.setUp(self)
+        dbPool.start(reactor)
+
+    def tearDown(self):
+        exJobs.clear()
+        offers.clear()
+        dbPool.pool.stop()
+        taskPool.pool.q.queue = deque()
+        DBTestCase.tearDown(self)
+ 
+class TestTasks(TaskTestCase):
+   
+    @inlineCallbacks
+    def testCreateSMS(self):
+        with self.session() as session:
+            u = User(name='test',apikey='abcdef123456789')
+            session.add(u)
+        
+        job = yield createJob(u,[Telnumber('0123325456')],SMS('sms'),[])
+        
+        self.assertEqual(taskPool.pool.q.qsize(),1)
+        
+        self.assertEqual(job.tasks.keys(),[Telnumber('0123325456')])
+        self.assertIsInstance(job.tasks[Telnumber('0123325456')], Task)
+
+    @inlineCallbacks
+    def testRun(self):
+        with self.session() as session:
+            u = User(name='test',apikey='abcdef123456789')
+            session.add(u)
+            o=DBOffer(name="test", provider="bla", route="basic", typ="sms")
+            u.rights.append(Userright(o)) 
+        
+        p=Provider(name="p", typs={"sms":["test",]})
+        def send(typ,route,recipient,message):
+            return Status(provider=p, route=route)
+        p.send=send
+        offers["test"] = Offer("test",provider=p, route="test", typ="sms")
+
+        exjob = yield exJobs.create(u, [Telnumber('123456789')], SMS('test'), ['test'])
+        
+        task=Task(Telnumber('123456789'), exjob)
+        ret = yield task._run()
+        self.assertIsInstance(ret, Status)
+        self.assertEqual(ret.provider, p)
+        self.assertEqual(ret.route, "test")
+
+    @inlineCallbacks
+    def testNoRoute(self):
+        with self.session() as session:
+            u = User(name='test',apikey='abcdef123456789')
+            session.add(u)
+
+        exjob = yield exJobs.create(u, [Telnumber('123456789')], SMS('test'), [])
+        
+        task=Task(Telnumber('123456789'), exjob)
+        d = task._run()
+        self.assertFailure(d, NoRouteForTask)
+
+    def testSetStatus(self):
+        task=Task(Telnumber('123456789'), None)
+        self.assertEqual(task.status,None)
+        self.assertEqual(task.error,False)
+
+        self.assertEqual(task.setStatus("fooja"),"fooja")
+        self.assertEqual(task.status,"fooja")
+
+    def testSetError(self):
+        task=Task(Telnumber('123456789'), None)
+        self.assertEqual(task.setError("fooja"),"fooja")
+        self.assertEqual(task.status,"fooja")
+        self.assertEqual(task.error,True)