tests/job.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 09 Feb 2012 17:36:31 +0100
branchdevel
changeset 140 75d0eaaa871d
parent 135 f8640c663e3e
child 141 90c95fdd1e33
permissions -rw-r--r--
start fixing job mangement

import unittest
from Queue import deque

from iro.controller.task import createJob, Task
from iro.controller.pool  import taskPool

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

#activates all logging we can get.

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)
        self.pool = data.pool
        data.pool = DumpPool()

    def tearDown(self):
        exJobs.clear()
        data.pool = self.pool
        self.pool = None
        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)
        exjob = createJob(u,[Telnumber('0123325456')],SMS('sms'),[])
        self.assertEqual(taskPool.pool.q.qsize(),1)
        self.assertEqual(exjob.tasks.keys(),[Telnumber('0123325456')])
        self.assertIsInstance(exjob.tasks[Telnumber('0123325456')], Task)



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

if __name__ == '__main__':
        unittest.main()