Skip to content

Commit d2072f8

Browse files
fix: return 404 for deleted activity in activity_retrieve endpoint (#2037)
Previously, fetching a deleted activity without a version would cause a `NullPointerError` or undefined behavior downstream (attempting `schema.applet_id` on `None`). Now it returns a proper 404. Changes: - Add null check after ActivitiesCRUD.get_by_id() to raise ActivityDoeNotExist - Update test assertion to expect HTTP 404 instead of generic != 200 Notes: - `ActivityDoeNotExist` already existed in `apps/activities/errors.py` - Only affects the unversioned code path in `activity_retrieve` (the versioned path was already safe)
1 parent c52eaf6 commit d2072f8

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

src/apps/activities/api/activities.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from apps.activities.domain.activity_item import (
2020
ActivityItemSingleLanguageDetail,
2121
)
22+
from apps.activities.errors import ActivityDoeNotExist
2223
from apps.activities.filters import AppletActivityFilter
2324
from apps.activities.services.activity import ActivityItemService, ActivityService
2425
from apps.activity_assignments.service import ActivityAssignmentService
@@ -126,6 +127,8 @@ async def activity_retrieve(
126127
await CheckAccessService(session, user.id).check_applet_detail_access(applet_id)
127128
else:
128129
schema = await ActivitiesCRUD(session).get_by_id(activity_id)
130+
if schema is None:
131+
raise ActivityDoeNotExist()
129132
await CheckAccessService(session, user.id).check_applet_detail_access(schema.applet_id)
130133
activity = await ActivityService(session, user.id).get_single_language_by_id(activity_id, language)
131134
result = ActivitySingleLanguageWithItemsDetailPublic.model_validate(activity)

src/apps/answers/tests/test_cross_version_flow.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,11 @@ async def test_fetch_deleted_activity_from_history(
232232
update_data = AppletUpdate(**data)
233233
await srv.update(applet_with_flow.id, update_data)
234234

235-
# Fetching the deleted activity without version should fail
235+
# Fetching the deleted activity without version should return 404
236236
response = await client.get(
237237
self.activity_url.format(activity_id=original_activity.id),
238238
)
239-
assert response.status_code != http.HTTPStatus.OK
239+
assert response.status_code == http.HTTPStatus.NOT_FOUND
240240

241241
# Fetching with the original version should succeed from history
242242
response = await client.get(

0 commit comments

Comments
 (0)