@@ -183,3 +183,259 @@ def test_add_rule_regex(self):
183
183
)
184
184
assert self .project .automation_rules .count () == 4
185
185
assert rule .priority == 10
186
+
187
+
188
+ @pytest .mark .django_db
189
+ class TestAutomationRuleMove :
190
+
191
+ @pytest .fixture (autouse = True )
192
+ def setup_method (self ):
193
+ self .project = get (Project )
194
+ self .rule_0 = self ._add_rule ('Zero' )
195
+ self .rule_1 = self ._add_rule ('One' )
196
+ self .rule_2 = self ._add_rule ('Two' )
197
+ self .rule_3 = self ._add_rule ('Three' )
198
+ self .rule_4 = self ._add_rule ('Four' )
199
+ self .rule_5 = self ._add_rule ('Five' )
200
+ assert self .project .automation_rules .count () == 6
201
+
202
+ def _add_rule (self , description ):
203
+ rule = RegexAutomationRule .objects .add_rule (
204
+ project = self .project ,
205
+ description = description ,
206
+ match_arg = '.*' ,
207
+ version_type = BRANCH ,
208
+ action = VersionAutomationRule .ACTIVATE_VERSION_ACTION ,
209
+ )
210
+ return rule
211
+
212
+ def test_move_rule_one_step (self ):
213
+ self .rule_0 .move (1 )
214
+ new_order = [
215
+ self .rule_1 ,
216
+ self .rule_0 ,
217
+ self .rule_2 ,
218
+ self .rule_3 ,
219
+ self .rule_4 ,
220
+ self .rule_5 ,
221
+ ]
222
+
223
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
224
+ assert rule == new_order [priority ]
225
+ assert rule .priority == priority
226
+
227
+ def test_move_rule_positive_steps (self ):
228
+ self .rule_1 .move (1 )
229
+ self .rule_1 .move (2 )
230
+
231
+ new_order = [
232
+ self .rule_0 ,
233
+ self .rule_2 ,
234
+ self .rule_3 ,
235
+ self .rule_4 ,
236
+ self .rule_1 ,
237
+ self .rule_5 ,
238
+ ]
239
+
240
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
241
+ assert rule == new_order [priority ]
242
+ assert rule .priority == priority
243
+
244
+ def test_move_rule_positive_steps_overflow (self ):
245
+ self .rule_2 .move (3 )
246
+ self .rule_2 .move (2 )
247
+
248
+ new_order = [
249
+ self .rule_0 ,
250
+ self .rule_2 ,
251
+ self .rule_1 ,
252
+ self .rule_3 ,
253
+ self .rule_4 ,
254
+ self .rule_5 ,
255
+ ]
256
+
257
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
258
+ assert rule == new_order [priority ]
259
+ assert rule .priority == priority
260
+
261
+ def test_move_rules_positive_steps (self ):
262
+ self .rule_2 .move (2 )
263
+ self .rule_0 .refresh_from_db ()
264
+ self .rule_0 .move (7 )
265
+ self .rule_4 .refresh_from_db ()
266
+ self .rule_4 .move (4 )
267
+ self .rule_1 .refresh_from_db ()
268
+ self .rule_1 .move (1 )
269
+
270
+ new_order = [
271
+ self .rule_4 ,
272
+ self .rule_1 ,
273
+ self .rule_0 ,
274
+ self .rule_3 ,
275
+ self .rule_2 ,
276
+ self .rule_5 ,
277
+ ]
278
+
279
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
280
+ assert rule == new_order [priority ]
281
+ assert rule .priority == priority
282
+
283
+ def test_move_rule_one_negative_step (self ):
284
+ self .rule_3 .move (- 1 )
285
+ new_order = [
286
+ self .rule_0 ,
287
+ self .rule_1 ,
288
+ self .rule_3 ,
289
+ self .rule_2 ,
290
+ self .rule_4 ,
291
+ self .rule_5 ,
292
+ ]
293
+
294
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
295
+ assert rule == new_order [priority ]
296
+ assert rule .priority == priority
297
+
298
+ def test_move_rule_negative_steps (self ):
299
+ self .rule_4 .move (- 1 )
300
+ self .rule_4 .move (- 2 )
301
+
302
+ new_order = [
303
+ self .rule_0 ,
304
+ self .rule_4 ,
305
+ self .rule_1 ,
306
+ self .rule_2 ,
307
+ self .rule_3 ,
308
+ self .rule_5 ,
309
+ ]
310
+
311
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
312
+ assert rule == new_order [priority ]
313
+ assert rule .priority == priority
314
+
315
+ def test_move_rule_negative_steps_overflow (self ):
316
+ self .rule_2 .move (- 3 )
317
+ self .rule_2 .move (- 2 )
318
+
319
+ new_order = [
320
+ self .rule_0 ,
321
+ self .rule_1 ,
322
+ self .rule_3 ,
323
+ self .rule_2 ,
324
+ self .rule_4 ,
325
+ self .rule_5 ,
326
+ ]
327
+
328
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
329
+ assert rule == new_order [priority ]
330
+ assert rule .priority == priority
331
+
332
+ def test_move_rules_negative_steps (self ):
333
+ self .rule_2 .move (- 2 )
334
+ self .rule_5 .refresh_from_db ()
335
+ self .rule_5 .move (- 7 )
336
+ self .rule_3 .refresh_from_db ()
337
+ self .rule_3 .move (- 2 )
338
+ self .rule_1 .refresh_from_db ()
339
+ self .rule_1 .move (- 1 )
340
+
341
+ new_order = [
342
+ self .rule_2 ,
343
+ self .rule_3 ,
344
+ self .rule_1 ,
345
+ self .rule_0 ,
346
+ self .rule_5 ,
347
+ self .rule_4 ,
348
+ ]
349
+
350
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
351
+ assert rule == new_order [priority ]
352
+ assert rule .priority == priority
353
+
354
+ def test_move_rules_up_and_down (self ):
355
+ self .rule_2 .move (2 )
356
+ self .rule_5 .refresh_from_db ()
357
+ self .rule_5 .move (- 3 )
358
+ self .rule_3 .refresh_from_db ()
359
+ self .rule_3 .move (4 )
360
+ self .rule_1 .refresh_from_db ()
361
+ self .rule_1 .move (- 1 )
362
+
363
+ new_order = [
364
+ self .rule_0 ,
365
+ self .rule_1 ,
366
+ self .rule_3 ,
367
+ self .rule_5 ,
368
+ self .rule_4 ,
369
+ self .rule_2 ,
370
+ ]
371
+
372
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
373
+ assert rule == new_order [priority ]
374
+ assert rule .priority == priority
375
+
376
+ def test_delete_fist_rule (self ):
377
+ self .rule_0 .delete ()
378
+ assert self .project .automation_rules .all ().count () == 5
379
+
380
+ new_order = [
381
+ self .rule_1 ,
382
+ self .rule_2 ,
383
+ self .rule_3 ,
384
+ self .rule_4 ,
385
+ self .rule_5 ,
386
+ ]
387
+
388
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
389
+ assert rule == new_order [priority ]
390
+ assert rule .priority == priority
391
+
392
+ def test_delete_last_rule (self ):
393
+ self .rule_5 .delete ()
394
+ assert self .project .automation_rules .all ().count () == 5
395
+
396
+ new_order = [
397
+ self .rule_0 ,
398
+ self .rule_1 ,
399
+ self .rule_2 ,
400
+ self .rule_3 ,
401
+ self .rule_4 ,
402
+ ]
403
+
404
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
405
+ assert rule == new_order [priority ]
406
+ assert rule .priority == priority
407
+
408
+ def test_delete_some_rule (self ):
409
+ self .rule_2 .delete ()
410
+ assert self .project .automation_rules .all ().count () == 5
411
+
412
+ new_order = [
413
+ self .rule_0 ,
414
+ self .rule_1 ,
415
+ self .rule_3 ,
416
+ self .rule_4 ,
417
+ self .rule_5 ,
418
+ ]
419
+
420
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
421
+ assert rule == new_order [priority ]
422
+ assert rule .priority == priority
423
+
424
+ def test_delete_some_rules (self ):
425
+ self .rule_2 .delete ()
426
+ self .rule_0 .refresh_from_db ()
427
+ self .rule_0 .delete ()
428
+ self .rule_5 .refresh_from_db ()
429
+ self .rule_5 .delete ()
430
+
431
+ assert self .project .automation_rules .all ().count () == 3
432
+
433
+ new_order = [
434
+ self .rule_1 ,
435
+ self .rule_3 ,
436
+ self .rule_4 ,
437
+ ]
438
+
439
+ for priority , rule in enumerate (self .project .automation_rules .all ()):
440
+ assert rule == new_order [priority ]
441
+ assert rule .priority == priority
0 commit comments