tests/offer_integrated.py
branchdevel
changeset 218 91f87ad13540
parent 216 ab8e2f26718e
equal deleted inserted replaced
217:d755b2e0cc0b 218:91f87ad13540
     5 from mock import patch, Mock
     5 from mock import patch, Mock
     6 
     6 
     7 from iro.model.job import exJobs
     7 from iro.model.job import exJobs
     8 from iro.model.pool import data
     8 from iro.model.pool import data
     9 from iro.model.schema import User, Offer as DBOffer, Userright
     9 from iro.model.schema import User, Offer as DBOffer, Userright
    10 from iro.model.message import SMS
    10 from iro.model.message import SMS, Mail
    11 from iro.model import offer
    11 from iro.model import offer
    12 
    12 
    13 from iro.controller.task import Task, taskPool
    13 from iro.controller.task import Task, taskPool
    14 from iro.telnumber import Telnumber
    14 from iro.telnumber import Telnumber
    15 
    15 
    16 from iro.offer import Smstrade, SMTP, Offer
    16 from iro.offer import Smstrade, SMTP, Offer
       
    17 from iro.offer.smstrade import SmstradeException, StatusCode
    17 
    18 
    18 from .dbtestcase import DBTestCase
    19 from .dbtestcase import DBTestCase
    19 
    20 
    20 class DummyPool():
    21 class DummyPool():
    21     def run(self, f,*a,**k):
    22     def run(self, f,*a,**k):
    22         return f(*a,**k)
    23         return f(*a,**k)
    23 
    24 
    24 def run( f,*a,**k):
    25 def run( f,*a,**k):
    25     return f(*a,**k)
    26     return f(*a,**k)
       
    27 
       
    28 from twisted.python import log
       
    29 
       
    30 class DummyObserver(object):
       
    31     def __init__(self):
       
    32         self.e=[]    
       
    33 
       
    34     def start(self):
       
    35         log.addObserver(self.emit)
       
    36 
       
    37     def stop(self):
       
    38         log.removeObserver(self.emit)
       
    39     
       
    40     def emit(self, eventDict):
       
    41         self.e.append(eventDict)
       
    42 
       
    43 
    26 
    44 
    27 class IntegratedOfferTests(DBTestCase):
    45 class IntegratedOfferTests(DBTestCase):
    28     def setUp(self):
    46     def setUp(self):
    29         DBTestCase.setUp(self)
    47         DBTestCase.setUp(self)
    30         self.pool = data.pool
    48         self.pool = data.pool
    31         data.pool = DummyPool()
    49         data.pool = DummyPool()
    32         
    50         
    33         self.taskPool = taskPool.run
    51         self.taskPool = taskPool.run
    34         taskPool.run = run 
    52         taskPool.run = run 
    35 
    53 
       
    54         self.log = DummyObserver()
       
    55         self.log.start()
       
    56 
    36     def tearDown(self):
    57     def tearDown(self):
       
    58         self.log.stop()
    37         exJobs.clear()
    59         exJobs.clear()
    38         data.pool = self.pool
    60         data.pool = self.pool
    39         self.pool = None
    61         self.pool = None
    40         taskPool.run = self.taskPool
    62         taskPool.run = self.taskPool
    41         self.taskPool = None
    63         self.taskPool = None
    65 
    87 
    66         j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
    88         j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
    67         t = Task(Telnumber("0123456789"),j)
    89         t = Task(Telnumber("0123456789"),j)
    68         yield t.start()
    90         yield t.start()
    69 
    91 
       
    92         self.assertEqual(self.log.e[0]['message'], ("Job(%s) to '0049123456789' ended sucecessfully via bla:basic."%j.dbjob,))
       
    93         
    70         with self.session() as session:
    94         with self.session() as session:
    71             u = session.merge(u)
    95             u = session.merge(u)
    72             o = session.merge(o)
    96             o = session.merge(o)
    73             job = u.job(j.dbjob)
    97             job = u.job(j.dbjob)
    74             self.assertEqual(job.status,"sended")
    98             self.assertEqual(job.status,"sended")
       
    99             self.assertEqual(job.info,"tesched")
    75             self.assertEqual(len(job.messages),1)
   100             self.assertEqual(len(job.messages),1)
    76             
   101             
    77             msg = job.messages[0]
   102             msg = job.messages[0]
    78             self.assertEqual(msg.price,Decimal('0.0550'))
   103             self.assertEqual(msg.price,Decimal('0.0550'))
    79             self.assertEqual(msg.isBilled,False)
   104             self.assertEqual(msg.isBilled,False)
   103 
   128 
   104         j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
   129         j = yield exJobs.create(u,[Telnumber("0123456789")],SMS("bla"),['s'],'tesched')
   105         t = Task(Telnumber("0123456789"),j)
   130         t = Task(Telnumber("0123456789"),j)
   106         yield t.start()
   131         yield t.start()
   107 
   132 
       
   133         errors = self.flushLoggedErrors(SmstradeException)
       
   134         self.assertEqual(len(errors), 1)
       
   135         self.assertEqual(self.log.e[0]['why'], "Error: Job(%s) to '0049123456789' failed."%j.dbjob)
       
   136         
       
   137         self.assertEqual(t.error, True)
       
   138         self.assertEqual(str(t.status.value),str(SmstradeException(StatusCode(703))))
       
   139         
   108         with self.session() as session:
   140         with self.session() as session:
   109             u = session.merge(u)
   141             u = session.merge(u)
   110             o = session.merge(o)
   142             o = session.merge(o)
   111             job = u.job(j.dbjob)
   143             job = u.job(j.dbjob)
   112             self.assertEqual(job.status,"error")
   144             self.assertEqual(job.status,"error")
   113             self.assertEqual(len(job.messages),0)
   145             self.assertEqual(len(job.messages),0)
   114 
   146 
   115     def testSmtp(self):
   147     @patch("smtplib.SMTP")
   116         pass
   148     @inlineCallbacks
   117     testSmtp.todo ="to implement"
   149     def testSmtp(self, p_s ):
       
   150         with self.session() as session:
       
   151             u = User(name='test',apikey='abcdef123456789')
       
   152             session.add(u)
       
   153             o=DBOffer(name="s", provider="bla", route=None, typ="mail")
       
   154             u.rights.append(Userright(o)) 
       
   155 
       
   156         offer.providers["bla"] = SMTP("bla")
       
   157         offer.providers["bla"].SSL = False
       
   158         offer.providers["bla"].TLS = False
       
   159         offer.providers["bla"].host = "localhost"
       
   160         offer.providers["bla"].port = 12345
       
   161         offer.providers["bla"].user = ""
       
   162         offer.providers["bla"].send_from = "frm@test.de"
       
   163         offer.offers["s"] = Offer("s",offer.providers["bla"],None,"mail")
       
   164 
       
   165         j = yield exJobs.create(u,["t@test.de"],Mail("bla",'msg',None),['s'],'tesched')
       
   166         t = Task("t@test.de",j)
       
   167         yield t.start()
       
   168         
       
   169         self.assertEqual(self.log.e[0]['message'], ("Job(%s) to 't@test.de' ended sucecessfully via bla:None."%j.dbjob,))
       
   170         
       
   171         with self.session() as session:
       
   172             u = session.merge(u)
       
   173             o = session.merge(o)
       
   174             job = u.job(j.dbjob)
       
   175             self.assertEqual(job.status,"sended")
       
   176             self.assertEqual(job.info,"tesched")
       
   177             self.assertEqual(len(job.messages),0)
   118     
   178     
   119     def testSmtpException(self):
   179     @patch("smtplib.SMTP")
   120         pass
   180     @inlineCallbacks
   121     testSmtpException.todo ="to implement"
   181     def testSmtpException(self, p_s):
       
   182         p_s.side_effect = IOError(111,"Connection refused")
       
   183         with self.session() as session:
       
   184             u = User(name='test',apikey='abcdef123456789')
       
   185             session.add(u)
       
   186             o=DBOffer(name="s", provider="bla", route=None, typ="mail")
       
   187             u.rights.append(Userright(o)) 
       
   188 
       
   189         offer.providers["bla"] = SMTP("bla")
       
   190         offer.providers["bla"].SSL = False
       
   191         offer.providers["bla"].TLS = False
       
   192         offer.providers["bla"].host = "localhost"
       
   193         offer.providers["bla"].port = 12345
       
   194         offer.providers["bla"].user = ""
       
   195         offer.providers["bla"].send_from = "frm@test.de"
       
   196         offer.offers["s"] = Offer("s",offer.providers["bla"],None,"mail")
       
   197 
       
   198         j = yield exJobs.create(u,["t@test.de"],Mail("bla",'msg',None),['s'],'tesched')
       
   199         t = Task("t@test.de",j)
       
   200         yield t.start()
       
   201 
       
   202         errors = self.flushLoggedErrors(IOError)
       
   203         self.assertEqual(len(errors), 1)
       
   204         self.assertEqual(self.log.e[0]['why'], "Error: Job(%s) to 't@test.de' failed."%j.dbjob
       
   205 )
       
   206         self.assertEqual(t.error, True)
       
   207         self.assertEqual(str(t.status.value),str(IOError(111,"Connection refused")))
       
   208 
       
   209         with self.session() as session:
       
   210             u = session.merge(u)
       
   211             o = session.merge(o)
       
   212             job = u.job(j.dbjob)
       
   213             self.assertEqual(job.status,"error")
       
   214             self.assertEqual(len(job.messages),0)
       
   215