tests/offer_integrated.py
branchdevel
changeset 216 ab8e2f26718e
child 218 91f87ad13540
equal deleted inserted replaced
215:5bacdb7e94d1 216:ab8e2f26718e
       
     1 from twisted.internet.defer import inlineCallbacks
       
     2 
       
     3 from datetime import datetime
       
     4 from decimal import Decimal 
       
     5 from mock import patch, Mock
       
     6 
       
     7 from iro.model.job import exJobs
       
     8 from iro.model.pool import data
       
     9 from iro.model.schema import User, Offer as DBOffer, Userright
       
    10 from iro.model.message import SMS
       
    11 from iro.model import offer
       
    12 
       
    13 from iro.controller.task import Task, taskPool
       
    14 from iro.telnumber import Telnumber
       
    15 
       
    16 from iro.offer import Smstrade, SMTP, Offer
       
    17 
       
    18 from .dbtestcase import DBTestCase
       
    19 
       
    20 class DummyPool():
       
    21     def run(self, f,*a,**k):
       
    22         return f(*a,**k)
       
    23 
       
    24 def run( f,*a,**k):
       
    25     return f(*a,**k)
       
    26 
       
    27 class IntegratedOfferTests(DBTestCase):
       
    28     def setUp(self):
       
    29         DBTestCase.setUp(self)
       
    30         self.pool = data.pool
       
    31         data.pool = DummyPool()
       
    32         
       
    33         self.taskPool = taskPool.run
       
    34         taskPool.run = run 
       
    35 
       
    36     def tearDown(self):
       
    37         exJobs.clear()
       
    38         data.pool = self.pool
       
    39         self.pool = None
       
    40         taskPool.run = self.taskPool
       
    41         self.taskPool = None
       
    42         DBTestCase.tearDown(self)
       
    43 
       
    44 
       
    45     @patch("iro.model.job.datetime")
       
    46     @patch("urllib.urlopen")
       
    47     @inlineCallbacks
       
    48     def testSmstrade(self, p_u, p_dt):
       
    49         f = Mock()
       
    50         f.readlines.return_value = ["100","12345678","0.055","1"]
       
    51         p_u.return_value = f
       
    52 
       
    53         p_dt.today.return_value = datetime(2000, 1, 2, 3, 4, 5)
       
    54 
       
    55         with self.session() as session:
       
    56             u = User(name='test',apikey='abcdef123456789')
       
    57             session.add(u)
       
    58             o=DBOffer(name="s", provider="bla", route="basic", typ="sms")
       
    59             u.rights.append(Userright(o))
       
    60 
       
    61         
       
    62         offer.providers["bla"] = Smstrade("bla")
       
    63         offer.providers["bla"].key = "XXXXXX"
       
    64         offer.offers["s"] = Offer("s",offer.providers["bla"],"basic","sms")
       
    65 
       
    66         j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
       
    67         t = Task(Telnumber("0123456789"),j)
       
    68         yield t.start()
       
    69 
       
    70         with self.session() as session:
       
    71             u = session.merge(u)
       
    72             o = session.merge(o)
       
    73             job = u.job(j.dbjob)
       
    74             self.assertEqual(job.status,"sended")
       
    75             self.assertEqual(len(job.messages),1)
       
    76             
       
    77             msg = job.messages[0]
       
    78             self.assertEqual(msg.price,Decimal('0.0550'))
       
    79             self.assertEqual(msg.isBilled,False)
       
    80             self.assertEqual(msg.recipient,str(Telnumber('123456789')))
       
    81             self.assertEqual(msg.date,datetime(2000, 1, 2, 3, 4, 5))
       
    82             self.assertEqual(msg.offer,o)
       
    83             self.assertEqual(msg.exID,"12345678")
       
    84             self.assertEqual(msg.count,1)
       
    85 
       
    86 
       
    87     @patch("urllib.urlopen")
       
    88     @inlineCallbacks
       
    89     def testSmstradeException(self, mock_urlopen):
       
    90         f = Mock()
       
    91         f.readlines.return_value = ["703"]
       
    92         mock_urlopen.return_value = f
       
    93 
       
    94         with self.session() as session:
       
    95             u = User(name='test',apikey='abcdef123456789')
       
    96             session.add(u)
       
    97             o=DBOffer(name="s", provider="bla", route="basic", typ="sms")
       
    98             u.rights.append(Userright(o)) 
       
    99 
       
   100         offer.providers["bla"] = Smstrade("bla")
       
   101         offer.providers["bla"].key = "XXXXXX"
       
   102         offer.offers["s"] = Offer("s",offer.providers["bla"],"basic","sms")
       
   103 
       
   104         j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
       
   105         t = Task(Telnumber("0123456789"),j)
       
   106         yield t.start()
       
   107 
       
   108         with self.session() as session:
       
   109             u = session.merge(u)
       
   110             o = session.merge(o)
       
   111             job = u.job(j.dbjob)
       
   112             self.assertEqual(job.status,"error")
       
   113             self.assertEqual(len(job.messages),0)
       
   114 
       
   115     def testSmtp(self):
       
   116         pass
       
   117     testSmtp.todo ="to implement"
       
   118     
       
   119     def testSmtpException(self):
       
   120         pass
       
   121     testSmtpException.todo ="to implement"