--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/offer_integrated.py Mon Mar 05 21:37:44 2012 +0100
@@ -0,0 +1,121 @@
+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"