1
1
import json
2
- from datetime import datetime
2
+ from datetime import datetime , timedelta
3
3
from uuid import uuid4
4
4
5
5
from django .core .management import call_command
@@ -107,17 +107,18 @@ def setUp(self):
107
107
108
108
reference = str (uuid4 ())
109
109
110
- data = {
110
+ self . data = {
111
111
'success' : 'true' ,
112
112
'eventCode' : 'AUTHORISATION' ,
113
113
'merchantReference' : reference ,
114
114
'merchantAccountCode' : settings .ADYEN_MERCHANT_ACCOUNT ,
115
115
}
116
116
117
- self .notification1 = NotificationFactory .create (
118
- notification = json .dumps (data ),
119
- is_processed = False
120
- )
117
+ with freeze_time ('2019-01-01 11:44' ):
118
+ self .notification1 = NotificationFactory .create (
119
+ notification = json .dumps (self .data ),
120
+ is_processed = False
121
+ )
121
122
self .order1 = OrderFactory .create (
122
123
status = Status .Pending ,
123
124
reference = reference
@@ -152,6 +153,57 @@ def test_process_notifications(self):
152
153
self .assertTrue (self .notification1 .is_processed )
153
154
self .assertTrue (self .notification1 .processed_at , datetime (2019 , 1 , 1 , 12 , 0 ))
154
155
156
+ @freeze_time ('2019-01-01 12:00' )
157
+ def test_process_notifications_is_error (self ):
158
+ self .assertFalse (self .order1 .paid )
159
+
160
+ self .data .update (eventCode = 'ERROR' )
161
+ self .notification1 .notification = json .dumps (self .data )
162
+ self .notification1 .save ()
163
+
164
+ call_command ('adyen_maintenance' )
165
+
166
+ self .order1 .refresh_from_db ()
167
+ self .assertFalse (self .order1 .paid )
168
+
169
+ self .notification1 .refresh_from_db ()
170
+ self .assertTrue (self .notification1 .is_processed )
171
+ self .assertTrue (self .notification1 .processed_at , datetime (2019 , 1 , 1 , 12 , 0 ))
172
+
173
+ @freeze_time ('2019-01-01 12:00' )
174
+ def test_process_notifications_is_cancelled (self ):
175
+ self .assertFalse (self .order1 .paid )
176
+
177
+ self .data .update (eventCode = 'CANCEL' )
178
+ self .notification1 .notification = json .dumps (self .data )
179
+ self .notification1 .save ()
180
+
181
+ call_command ('adyen_maintenance' )
182
+
183
+ self .order1 .refresh_from_db ()
184
+ self .assertFalse (self .order1 .paid )
185
+
186
+ self .notification1 .refresh_from_db ()
187
+ self .assertTrue (self .notification1 .is_processed )
188
+ self .assertTrue (self .notification1 .processed_at , datetime (2019 , 1 , 1 , 12 , 0 ))
189
+
190
+ @freeze_time ('2019-01-01 12:00' )
191
+ def test_process_notifications_is_refused (self ):
192
+ self .assertFalse (self .order1 .paid )
193
+
194
+ self .data .update (eventCode = 'REFUSED' )
195
+ self .notification1 .notification = json .dumps (self .data )
196
+ self .notification1 .save ()
197
+
198
+ call_command ('adyen_maintenance' )
199
+
200
+ self .order1 .refresh_from_db ()
201
+ self .assertFalse (self .order1 .paid )
202
+
203
+ self .notification1 .refresh_from_db ()
204
+ self .assertTrue (self .notification1 .is_processed )
205
+ self .assertTrue (self .notification1 .processed_at , datetime (2019 , 1 , 1 , 12 , 0 ))
206
+
155
207
156
208
class CleanupPending (TestCase ):
157
209
def test_cleanup (self ):
@@ -168,15 +220,30 @@ def test_cleanup(self):
168
220
with freeze_time ('2019-01-3 12:00' ):
169
221
self .order4 = OrderFactory .create (status = Status .Authorised )
170
222
223
+ data = {
224
+ 'success' : 'true' ,
225
+ 'eventCode' : 'AUTHORISATION' ,
226
+ 'merchantReference' : 'unknown' ,
227
+ 'merchantAccountCode' : settings .ADYEN_MERCHANT_ACCOUNT ,
228
+ }
229
+
230
+ with freeze_time ('2019-01-01 11:44' ):
231
+ self .notification1 = NotificationFactory .create (
232
+ notification = json .dumps (data ),
233
+ is_processed = False
234
+ )
235
+
171
236
with freeze_time ('2019-01-10 12:00' ):
172
237
call_command ('adyen_maintenance' )
173
238
174
239
self .order1 .refresh_from_db ()
175
240
self .order2 .refresh_from_db ()
176
241
self .order3 .refresh_from_db ()
177
242
self .order4 .refresh_from_db ()
243
+ self .notification1 .refresh_from_db ()
178
244
179
245
self .assertEqual (self .order1 .status , Status .Error )
180
246
self .assertEqual (self .order2 .status , Status .Pending )
181
247
self .assertEqual (self .order3 .status , Status .Error )
182
248
self .assertEqual (self .order4 .status , Status .Authorised )
249
+ self .assertTrue (self .notification1 .is_processed )
0 commit comments