diff --git a/engine/apps/schedules/ical_utils.py b/engine/apps/schedules/ical_utils.py index 8eeacddf..13d0771b 100644 --- a/engine/apps/schedules/ical_utils.py +++ b/engine/apps/schedules/ical_utils.py @@ -490,7 +490,12 @@ def get_cached_oncall_users_for_multiple_schedules(schedules: typing.List["OnCal for cache_key, oncall_users in cached_results.items(): schedule_public_primary_key = _get_schedule_public_primary_key_from_schedule_oncall_users_cache_key(cache_key) schedule = schedules[schedule_public_primary_key] - oncall_users = [users[user_public_primary_key] for user_public_primary_key in oncall_users] + oncall_users = [ + users[user_public_primary_key] + for user_public_primary_key in oncall_users + # filter out any users that we couldn't find in the database (e.g. deleted) + if user_public_primary_key in users + ] results[schedule] = oncall_users diff --git a/engine/apps/schedules/tests/test_ical_utils.py b/engine/apps/schedules/tests/test_ical_utils.py index 3b6cf517..dd54ec45 100644 --- a/engine/apps/schedules/tests/test_ical_utils.py +++ b/engine/apps/schedules/tests/test_ical_utils.py @@ -671,3 +671,12 @@ def test_get_cached_oncall_users_for_multiple_schedules( _generate_cache_key(schedule2): [users[2].public_primary_key, users[3].public_primary_key], _generate_cache_key(schedule3): [users[4].public_primary_key, users[5].public_primary_key], } + + # scenario: user is deleted but still in cache (all schedules are still in cache) + users[0].delete() + results = get_cached_oncall_users_for_multiple_schedules(schedules) + assert results == { + schedule1: [users[1]], + schedule2: [users[2], users[3]], + schedule3: [users[4], users[5]], + }