diff --git a/engine/apps/google/tasks.py b/engine/apps/google/tasks.py index f8af0375..bfd3dea1 100644 --- a/engine/apps/google/tasks.py +++ b/engine/apps/google/tasks.py @@ -41,16 +41,16 @@ def sync_out_of_office_calendar_events_for_user(google_oauth2_user_pk: int) -> N ) for schedule in users_schedules: - _, _, upcoming_shifts = schedule.shifts_for_user( + _, current_shifts, upcoming_shifts = schedule.shifts_for_user( user, start_time_utc, datetime_end=end_time_utc, ) - if upcoming_shifts: + if current_shifts or upcoming_shifts: logger.info( - f"Found {len(upcoming_shifts)} upcoming shift(s) for user {user_id} " - f"during the out of office event {event_id}" + f"Found {len(current_shifts)} current shift(s) and {len(upcoming_shifts)} upcoming shift(s) " + f"for user {user_id} during the out of office event {event_id}" ) shift_swap_request_exists = ShiftSwapRequest.objects.filter( @@ -78,7 +78,9 @@ def sync_out_of_office_calendar_events_for_user(google_oauth2_user_pk: int) -> N else: logger.info(f"Shift swap request already exists for user {user_id} schedule {schedule.pk}") else: - logger.info(f"No upcoming shifts found for user {user_id} during the out of office event {event_id}") + logger.info( + f"No current or upcoming shifts found for user {user_id} during the out of office event {event_id}" + ) @shared_dedicated_queue_retry_task(autoretry_for=(Exception,), retry_backoff=True) diff --git a/engine/apps/google/tests/test_sync_out_of_office_calendar_events_for_user.py b/engine/apps/google/tests/test_sync_out_of_office_calendar_events_for_user.py index 0ad6f50b..1d3640e1 100644 --- a/engine/apps/google/tests/test_sync_out_of_office_calendar_events_for_user.py +++ b/engine/apps/google/tests/test_sync_out_of_office_calendar_events_for_user.py @@ -56,10 +56,16 @@ def _create_mock_google_calendar_event(start_time: datetime.datetime, end_time: } +def _get_utc_now(): + return datetime.datetime.now(tz=datetime.timezone.utc) + + +def _adjust_datetime(dt): + return dt.replace(second=0, microsecond=0) + + def _create_event_start_and_end_times(start_days_in_future=5, end_time_minutes_past_start=50): - start_time = ( - datetime.datetime.now(tz=datetime.timezone.utc) + datetime.timedelta(days=start_days_in_future) - ).replace(second=0, microsecond=0) + start_time = _adjust_datetime(_get_utc_now() + datetime.timedelta(days=start_days_in_future)) end_time = start_time + datetime.timedelta(minutes=end_time_minutes_past_start) return start_time, end_time @@ -259,6 +265,29 @@ def test_sync_out_of_office_calendar_events_for_user_no_upcoming_shifts( assert ShiftSwapRequest.objects.filter(beneficiary=user).count() == 0 +@patch("apps.google.client.build") +@pytest.mark.django_db +def test_sync_out_of_office_calendar_events_for_user_considers_current_shifts( + mock_google_api_client_build, + test_setup, +): + in_five_minutes = _adjust_datetime(_get_utc_now() + datetime.timedelta(minutes=5)) + in_ten_minutes = in_five_minutes + datetime.timedelta(minutes=5) + + mock_google_api_client_build.return_value.events.return_value.list.return_value.execute.return_value = { + "items": [ + _create_mock_google_calendar_event(in_five_minutes, in_ten_minutes), + ], + } + + google_oauth2_user, _ = test_setup([]) + user = google_oauth2_user.user + + tasks.sync_out_of_office_calendar_events_for_user(google_oauth2_user.pk) + + assert ShiftSwapRequest.objects.filter(beneficiary=user).count() == 1 + + @patch("apps.google.client.build") @pytest.mark.django_db def test_sync_out_of_office_calendar_events_for_user_preexisting_shift_swap_request(