diff -r 448dd8d36839 -r 3929338fd17f iro/tests/task.py --- /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)