tests/job.py
author Sandro Knauß <knauss@netzguerilla.net>
Tue, 07 Feb 2012 01:56:59 +0100
branchdevel
changeset 135 f8640c663e3e
child 140 75d0eaaa871d
permissions -rw-r--r--
model.job created

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()