From 73627b45eb66a06b62ddf5bfb1cbd663adf8371d Mon Sep 17 00:00:00 2001 From: "ahmad(alah)" Date: Thu, 11 Apr 2024 23:10:36 +0200 Subject: [PATCH] [FIX] google_calendar: accepting recurrent event tests The `test_accepting_recurrent_event_*` tests make sure that accepting recurrent events on google side reflect in odoo. The test was failing because of the following: when retrieving the invited attendee, the test used `self.assertEqual(event.attendee_ids[1].state, expected_states[i])` assuming that organizer will be at index `0` and invited user at index `1`. However the list of `event.attendee_ids` is ordered by create_date. And we create both organizer and attendee with the same command at the same time: `partner_ids=[Command.set([self.organizer_user.partner_id.id, self.attendee_user.partner_id.id])]` So we might have organizer at index `1` and invited attendee at index `0`. This resulted in the indeterministic behavior of the test. To fix this issue: This commit changes how the invited attendee is retrieved, making sure that we always get the right attendee. fixes runbot-61527 closes odoo/odoo#162279 X-original-commit: 6db2614283abfc035343f021b9cfc52609aa9d44 Signed-off-by: Ahmad Almaghraby (alah) --- .../tests/test_sync_google2odoo.py | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/addons/google_calendar/tests/test_sync_google2odoo.py b/addons/google_calendar/tests/test_sync_google2odoo.py index 7ecb5aeac0f..3a67c60497a 100644 --- a/addons/google_calendar/tests/test_sync_google2odoo.py +++ b/addons/google_calendar/tests/test_sync_google2odoo.py @@ -98,6 +98,8 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): {"email": self.organizer_user.partner_id.email, "responseStatus": "accepted"}, {"email": self.attendee_user.partner_id.email, "responseStatus": response_status}, ] + updated_event_id = updated_event_google_values['id'] + updated_event_google_values['id'] = updated_event_id[:updated_event_id.index('_') + 1] + 'R' + updated_event_id[updated_event_id.index('_') + 1:] recurrence_google_values["recurrence"] = [rrule1] updated_event_google_values["recurrence"] = [rrule2] return [ @@ -1969,8 +1971,11 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): expected_states = ["needsAction", "needsAction", "accepted", "needsAction"] with self.mock_datetime_and_now("2024-04-22"): self.attendee_user.sudo()._sync_google_calendar(self.google_service) - for i, event in enumerate(recurrence.calendar_event_ids.sorted("start")): - self.assertEqual(event.attendee_ids[1].state, expected_states[i]) + attendees = self.env['calendar.attendee'].search([ + ('partner_id', '=', self.attendee_user.partner_id.id) + ]).sorted(key=lambda r: r.event_id.start) + for i, expected_state in enumerate(expected_states): + self.assertEqual(attendees[i].state, expected_state) @patch.object(GoogleCalendarService, 'get_events') def test_accepting_recurrent_event_with_this_event_option_synced_by_organizer(self, mock_get_events): @@ -1994,8 +1999,11 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): expected_states = ["needsAction", "needsAction", "accepted", "needsAction"] with self.mock_datetime_and_now("2024-04-22"): self.organizer_user.sudo()._sync_google_calendar(self.google_service) - for i, event in enumerate(recurrence.calendar_event_ids.sorted("start")): - self.assertEqual(event.attendee_ids[1].state, expected_states[i]) + attendees = self.env['calendar.attendee'].search([ + ('partner_id', '=', self.attendee_user.partner_id.id) + ]).sorted(key=lambda r: r.event_id.start) + for i, expected_state in enumerate(expected_states): + self.assertEqual(attendees[i].state, expected_state) @patch.object(GoogleCalendarService, 'get_events') def test_accepting_recurrent_event_with_all_events_option_synced_by_attendee(self, mock_get_events): @@ -2019,8 +2027,11 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): expected_states = ["accepted", "accepted", "accepted", "accepted"] with self.mock_datetime_and_now("2024-04-22"): self.attendee_user.sudo()._sync_google_calendar(self.google_service) - for i, event in enumerate(recurrence.calendar_event_ids.sorted("start")): - self.assertEqual(event.attendee_ids[1].state, expected_states[i]) + attendees = self.env['calendar.attendee'].search([ + ('partner_id', '=', self.attendee_user.partner_id.id) + ]).sorted(key=lambda r: r.event_id.start) + for i, expected_state in enumerate(expected_states): + self.assertEqual(attendees[i].state, expected_state) @patch.object(GoogleCalendarService, 'get_events') def test_accepting_recurrent_event_with_all_events_option_synced_by_organizer(self, mock_get_events): @@ -2044,8 +2055,11 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): expected_states = ["accepted", "accepted", "accepted", "accepted"] with self.mock_datetime_and_now("2024-04-22"): self.organizer_user.sudo()._sync_google_calendar(self.google_service) - for i, event in enumerate(recurrence.calendar_event_ids.sorted("start")): - self.assertEqual(event.attendee_ids[1].state, expected_states[i]) + attendees = self.env['calendar.attendee'].search([ + ('partner_id', '=', self.attendee_user.partner_id.id) + ]).sorted(key=lambda r: r.event_id.start) + for i, expected_state in enumerate(expected_states): + self.assertEqual(attendees[i].state, expected_state) @patch.object(GoogleCalendarService, 'get_events') def test_accepting_recurrent_event_with_following_events_option_synced_by_attendee(self, mock_get_events): @@ -2075,8 +2089,11 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): expected_states = ["needsAction", "needsAction", "accepted", "accepted"] with self.mock_datetime_and_now("2024-04-22"): self.attendee_user.sudo()._sync_google_calendar(self.google_service) - for i, event in enumerate(recurrence.calendar_event_ids.sorted("start")): - self.assertEqual(event.attendee_ids[1].state, expected_states[i]) + attendees = self.env['calendar.attendee'].search([ + ('partner_id', '=', self.attendee_user.partner_id.id) + ]).sorted(key=lambda r: r.event_id.start) + for i, expected_state in enumerate(expected_states): + self.assertEqual(attendees[i].state, expected_state) @patch.object(GoogleCalendarService, 'get_events') def test_accepting_recurrent_event_with_all_following_option_synced_by_organizer(self, mock_get_events): @@ -2106,5 +2123,8 @@ class TestSyncGoogle2Odoo(TestSyncGoogle): expected_states = ["needsAction", "needsAction", "accepted", "accepted"] with self.mock_datetime_and_now("2024-04-22"): self.organizer_user.sudo()._sync_google_calendar(self.google_service) - for i, event in enumerate(recurrence.calendar_event_ids.sorted("start")): - self.assertEqual(event.attendee_ids[1].state, expected_states[i]) + attendees = self.env['calendar.attendee'].search([ + ('partner_id', '=', self.attendee_user.partner_id.id) + ]).sorted(key=lambda r: r.event_id.start) + for i, expected_state in enumerate(expected_states): + self.assertEqual(attendees[i].state, expected_state)