tests/offer_integrated.py
author Sandro Knauß <knauss@netzguerilla.net>
Mon, 05 Mar 2012 21:37:44 +0100
branchdevel
changeset 216 ab8e2f26718e
child 218 91f87ad13540
permissions -rw-r--r--
tests for Task.start -> ExJob->setError/setStatus

from twisted.internet.defer import inlineCallbacks

from datetime import datetime
from decimal import Decimal 
from mock import patch, Mock

from iro.model.job import exJobs
from iro.model.pool import data
from iro.model.schema import User, Offer as DBOffer, Userright
from iro.model.message import SMS
from iro.model import offer

from iro.controller.task import Task, taskPool
from iro.telnumber import Telnumber

from iro.offer import Smstrade, SMTP, Offer

from .dbtestcase import DBTestCase

class DummyPool():
    def run(self, f,*a,**k):
        return f(*a,**k)

def run( f,*a,**k):
    return f(*a,**k)

class IntegratedOfferTests(DBTestCase):
    def setUp(self):
        DBTestCase.setUp(self)
        self.pool = data.pool
        data.pool = DummyPool()
        
        self.taskPool = taskPool.run
        taskPool.run = run 

    def tearDown(self):
        exJobs.clear()
        data.pool = self.pool
        self.pool = None
        taskPool.run = self.taskPool
        self.taskPool = None
        DBTestCase.tearDown(self)


    @patch("iro.model.job.datetime")
    @patch("urllib.urlopen")
    @inlineCallbacks
    def testSmstrade(self, p_u, p_dt):
        f = Mock()
        f.readlines.return_value = ["100","12345678","0.055","1"]
        p_u.return_value = f

        p_dt.today.return_value = datetime(2000, 1, 2, 3, 4, 5)

        with self.session() as session:
            u = User(name='test',apikey='abcdef123456789')
            session.add(u)
            o=DBOffer(name="s", provider="bla", route="basic", typ="sms")
            u.rights.append(Userright(o))

        
        offer.providers["bla"] = Smstrade("bla")
        offer.providers["bla"].key = "XXXXXX"
        offer.offers["s"] = Offer("s",offer.providers["bla"],"basic","sms")

        j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
        t = Task(Telnumber("0123456789"),j)
        yield t.start()

        with self.session() as session:
            u = session.merge(u)
            o = session.merge(o)
            job = u.job(j.dbjob)
            self.assertEqual(job.status,"sended")
            self.assertEqual(len(job.messages),1)
            
            msg = job.messages[0]
            self.assertEqual(msg.price,Decimal('0.0550'))
            self.assertEqual(msg.isBilled,False)
            self.assertEqual(msg.recipient,str(Telnumber('123456789')))
            self.assertEqual(msg.date,datetime(2000, 1, 2, 3, 4, 5))
            self.assertEqual(msg.offer,o)
            self.assertEqual(msg.exID,"12345678")
            self.assertEqual(msg.count,1)


    @patch("urllib.urlopen")
    @inlineCallbacks
    def testSmstradeException(self, mock_urlopen):
        f = Mock()
        f.readlines.return_value = ["703"]
        mock_urlopen.return_value = f

        with self.session() as session:
            u = User(name='test',apikey='abcdef123456789')
            session.add(u)
            o=DBOffer(name="s", provider="bla", route="basic", typ="sms")
            u.rights.append(Userright(o)) 

        offer.providers["bla"] = Smstrade("bla")
        offer.providers["bla"].key = "XXXXXX"
        offer.offers["s"] = Offer("s",offer.providers["bla"],"basic","sms")

        j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
        t = Task(Telnumber("0123456789"),j)
        yield t.start()

        with self.session() as session:
            u = session.merge(u)
            o = session.merge(o)
            job = u.job(j.dbjob)
            self.assertEqual(job.status,"error")
            self.assertEqual(len(job.messages),0)

    def testSmtp(self):
        pass
    testSmtp.todo ="to implement"
    
    def testSmtpException(self):
        pass
    testSmtpException.todo ="to implement"