tests/job.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 09 Feb 2012 18:27:58 +0100
branchdevel
changeset 141 90c95fdd1e33
parent 140 75d0eaaa871d
child 142 7d0c1fa97123
permissions -rw-r--r--
first defer test in job management

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'),[])