import unittest
from iro.controller.task import createJob
from iro.model.job import jobs, Job
from iro.model.pool import data
from iro.model.message import SMS, Fax, Mail
from iro.model.schema import Job as DBJob, User
from iro.telnumber import Telnumber
from iro.error import JobNotFound
from iro.validate import vHash
from .dbtestcase import DBTestCase, setUpModule, tearDownModule
#activates all logging we can get.
from twisted.python import log
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s(%(processName)s)-%(levelname)s: %(message)s')
observer = log.PythonLoggingObserver()
observer.start()
class DumpPool():
def run(self, f,*a,**k):
return f(*a,**k)
data.pool=DumpPool()
class JobsTest(DBTestCase):
'''tests for jobs'''
def tearDown(self):
jobs.clear()
DBTestCase.tearDown(self)
def testCreate(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
session.add(u)
job = jobs.create(u, [Telnumber('123456789')], SMS('test'), ['test'])
self.assertIsInstance(job, Job)
self.assertTrue(vHash(job.id, None, 40, 40))
with self.session() as session:
j = session.query(DBJob.hash).all()
self.assertEqual(j,[(job.id,)])
self.assertEqual(jobs[job.id],job)
def testGet(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
session.add(u)
job = Job(u, [Telnumber('123456789')], SMS('test'), ['test'])
jobs['a1'] = job
self.assertEqual(len(jobs), 1)
self.assertEqual(job, jobs['a1'])
def testGetFromDB(self):
with self.session() as session:
u = User(name='test',apikey='abcdef123456789')
job = DBJob(hash='a1', info="info", status="started")
u.jobs.append(job)
session.add(u)
with self.session() as session:
job = session.merge(job)
u = session.merge(u)
self.assertEqual(repr(jobs['a1'].dbjob),repr(job))
self.assertEqual(repr(jobs['a1'].user),repr(u))
self.assertEqual(jobs['a1'].info, 'info')
def testUnknownJob(self):
with self.assertRaises(JobNotFound):
Job.fromDB('a1234567890')
with self.assertRaises(KeyError):
jobs['a1234567890']
@unittest.skip('test not implemented')
def testSyncroniced(self):
pass
class JobTest(DBTestCase):
def testCreateSMS(self):
job = createJob([],SMS('sms'),[])
pass
def testCreateFax(self):
job = createJob([],Fax('header','fax',[]),[])
pass
def testCreateMail(self):
job = createJob([],Mail('sub','body','t@t.de'),[])
if __name__ == '__main__':
unittest.main()