from twisted.internet import reactor
from Queue import deque
from iro.controller.task import createJob, Task
from iro.controller.pool import taskPool, dbPool
from iro.model.job import exJobs, ExJob
from iro.model.pool import data
from iro.model.message import SMS, Fax, Mail
from iro.model.schema import Job, User
from iro.telnumber import Telnumber
from iro.validate import vInteger
from .dbtestcase import DBTestCase
class DumpPool():
def run(self, f,*a,**k):
return f(*a,**k)
class exJobsTest(DBTestCase):
'''tests for exJobs'''
def setUp(self):
DBTestCase.setUp(self)
self.pool = data.pool
data.pool = DumpPool()
def tearDown(self):
exJobs.clear()
data.pool = self.pool
self.pool = None
DBTestCase.tearDown(self)
def testCreate(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
session.add(u)
job = exJobs.create(u, [Telnumber('123456789')], SMS('test'), ['test'])
self.assertIsInstance(job, ExJob)
self.assertTrue(vInteger(job.dbjob, None, minv=0 ))
self.assertEqual(job.message, SMS('test'))
self.assertEqual(job.recipients, [Telnumber('123456789')])
self.assertEqual(job.offers,['test'])
self.assertEqual(job.tasks,{})
with self.session() as session:
j = session.query(Job.id).all()
self.assertEqual(j,[(job.dbjob,)])
self.assertEqual(exJobs[job.dbjob],job)
def testGet(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
session.add(u)
job = ExJob(None, [Telnumber('123456789')], SMS('test'), ['test'])
exJobs[1] = job
self.assertEqual(len(exJobs), 1)
self.assertEqual(job, exJobs[1])
def testGetFromDB(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
job = Job( info="info", status="started")
u.jobs.append(job)
session.add(u)
with self.session() as session:
job = session.merge(job)
u = session.merge(u)
ejob= ExJob(job.id, [Telnumber('123456789')], SMS('test'), ['test'])
exJobs[job.id]=ejob
self.assertEqual(job.extend, ejob)
self.assertEqual(u.jobs[0].extend,ejob)
def testUnknownExJob(self):
self.assertRaises(KeyError,exJobs.__getitem__,'a1234567890')
class JobTest(DBTestCase):
def setUp(self):
DBTestCase.setUp(self)
dbPool.start(reactor)
def tearDown(self):
exJobs.clear()
dbPool.pool.stop()
taskPool.pool.q.queue = deque()
DBTestCase.tearDown(self)
def testCreateSMS(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
session.add(u)
d = createJob(u,[Telnumber('0123325456')],SMS('sms'),[])
def poolsize(result):
self.assertEqual(taskPool.pool.q.qsize(),1)
return result
d.addCallback(poolsize)
def keys(result):
self.assertEqual(result.tasks.keys(),[Telnumber('0123325456')])
return result
d.addCallback(keys)
def tasktest(result):
self.assertIsInstance(result.tasks[Telnumber('0123325456')], Task)
return result
d.addCallback(tasktest)
return d
#def testCreateFax(self):
# with self.session() as session:
# u = User(name='test',apikey='abcdef123456789')
# session.add(u)
# job = createJob(u,[Telnumber('0123325456')],Fax('header','fax',[]),[])
# self.assertEqual(taskPool.pool.q.qsize(),1)
#def testCreateMail(self):
# with self.session() as session:
# u = User(name='test',apikey='abcdef123456789')
# session.add(u)
# job = createJob(u,[],Mail('sub','body','t@t.de'),[])