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 |