9
9
from odoo import exceptions
10
10
from odoo .addons .base .tests .test_ir_cron import CronMixinCase
11
11
from odoo .addons .event .tests .common import EventCase
12
+ from odoo .addons .event .models .event_mail import EventMail
12
13
from odoo .addons .mail .tests .common import MailCase
13
14
from odoo .tests import tagged , users , warmup
14
15
from odoo .tools import formataddr , mute_logger
@@ -47,7 +48,7 @@ def setUpClass(cls):
47
48
cls ._setup_test_reports ()
48
49
with cls .mock_datetime_and_now (cls , cls .reference_now ):
49
50
# create with admin to force create_date
50
- cls .test_event = cls .env ['event.event' ].create ({
51
+ cls .test_event = cls .env ['event.event' ].with_user ( cls . user_eventmanager ). create ({
51
52
'name' : 'TestEventMail' ,
52
53
'user_id' : cls .user_eventmanager .id ,
53
54
'date_begin' : cls .event_date_begin ,
@@ -635,6 +636,8 @@ def test_event_mail_schedule_on_slot(self):
635
636
test_event = self .test_event .with_env (self .env )
636
637
test_event .write ({
637
638
'is_multi_slots' : True ,
639
+ # Start and end hours expressed in event tz
640
+ # The slots datetimes will be saved in utc
638
641
'event_slot_ids' : [
639
642
(0 , 0 , {
640
643
'date' : self .event_date_end .date () - relativedelta (days = 1 ),
@@ -648,12 +651,14 @@ def test_event_mail_schedule_on_slot(self):
648
651
}),
649
652
],
650
653
})
654
+ # Verify datetimes in UTC
655
+ self .assertEqual (test_event .date_tz , 'Europe/Brussels' )
651
656
self .assertEqual (
652
657
test_event .event_slot_ids .mapped ('start_datetime' ),
653
- [datetime (2021 , 3 , 23 , 8 , 0 , 0 ), datetime (2021 , 3 , 24 , 8 , 0 , 0 )])
658
+ [datetime (2021 , 3 , 23 , 7 , 0 , 0 ), datetime (2021 , 3 , 24 , 7 , 0 , 0 )])
654
659
self .assertEqual (
655
660
test_event .event_slot_ids .mapped ('end_datetime' ),
656
- [datetime (2021 , 3 , 23 , 18 , 0 , 0 ), datetime (2021 , 3 , 24 , 18 , 0 , 0 )])
661
+ [datetime (2021 , 3 , 23 , 17 , 0 , 0 ), datetime (2021 , 3 , 24 , 17 , 0 , 0 )])
657
662
658
663
# create some registrations (even wrong registrations without slot)
659
664
with self .mock_datetime_and_now (self .reference_now ):
@@ -686,13 +691,12 @@ def test_event_mail_schedule_on_slot(self):
686
691
self .assertFalse (mail_slot .mail_count_done )
687
692
self .assertFalse (mail_slot .mail_done )
688
693
mail_slot_1 = event_prev_scheduler .mail_slot_ids .filtered (lambda s : s .event_slot_id .date == self .event_date_end .date () - relativedelta (days = 1 ))
689
- self .assertEqual (mail_slot_1 .scheduled_date , datetime (2021 , 3 , 22 , 8 , 0 , 0 ))
694
+ self .assertEqual (mail_slot_1 .scheduled_date , datetime (2021 , 3 , 22 , 7 , 0 , 0 ))
690
695
mail_slot_2 = event_prev_scheduler .mail_slot_ids .filtered (lambda s : s .event_slot_id .date == self .event_date_end .date ())
691
- self .assertEqual (mail_slot_2 .scheduled_date , datetime (2021 , 3 , 23 , 8 , 0 , 0 ))
696
+ self .assertEqual (mail_slot_2 .scheduled_date , datetime (2021 , 3 , 23 , 7 , 0 , 0 ))
692
697
693
698
# execute cron to run scheduler on first slot
694
- slot1_before_oneday = datetime (2021 , 3 , 23 , 8 , 0 , 0 ) - relativedelta (days = 1 )
695
- EventMail = type (self .env ['event.mail' ])
699
+ slot1_before_oneday = datetime (2021 , 3 , 23 , 7 , 0 , 0 ) - relativedelta (days = 1 )
696
700
exec_origin = EventMail ._execute_event_based_for_registrations
697
701
with patch .object (
698
702
EventMail , '_execute_event_based_for_registrations' , autospec = True , wraps = EventMail , side_effect = exec_origin ,
@@ -716,6 +720,27 @@ def test_event_mail_schedule_on_slot(self):
716
720
self .assertFalse (event_prev_scheduler .mail_done )
717
721
self .assertSchedulerCronTriggers (capture , [slot1_before_oneday ])
718
722
723
+ # deleting a slot with registrations archives it and prevents its mailings to be send
724
+ first_slot = test_event .event_slot_ids [0 ]
725
+ first_slot .unlink ()
726
+ self .assertFalse (first_slot .active )
727
+ for mail_slot in first_slot .slot_mail_ids :
728
+ self .assertFalse (mail_slot .active )
729
+
730
+ slot1_before_oneday_archived = datetime (2021 , 3 , 23 , 7 , 0 , 0 ) - relativedelta (days = 1 )
731
+ exec_origin = EventMail ._execute_event_based_for_registrations
732
+ with patch .object (
733
+ EventMail , '_execute_event_based_for_registrations' , autospec = True , wraps = EventMail , side_effect = exec_origin ,
734
+ ) as mock_exec :
735
+ capture = self .execute_event_cron (freeze_date = slot1_before_oneday_archived )
736
+
737
+ # mailing hasn't been sent, info should stay the same
738
+ self .assertEqual (mail_slot_1 .mail_count_done , 4 )
739
+ self .assertFalse (mail_slot_1 .mail_done )
740
+ self .assertEqual (event_prev_scheduler .mail_count_done , 4 )
741
+ self .assertFalse (event_prev_scheduler .mail_done )
742
+ self .assertSchedulerCronTriggers (capture , [])
743
+
719
744
@mute_logger ('odoo.addons.base.models.ir_model' , 'odoo.models' )
720
745
@users ('user_eventmanager' )
721
746
@warmup
0 commit comments