@@ -293,6 +293,20 @@ def test_project_marked_for_deletion(client, audit_capture):
293293 assert e .target_workspace_id == project .workspace_id
294294
295295
296+ def test_project_marked_for_deletion_via_v1_api (client , audit_capture ):
297+ """Deleting a project via the legacy v1 API (used by QGIS plugin) emits PROJECT_MARKED_FOR_DELETION."""
298+ project = Project .query .filter_by (
299+ workspace_id = test_workspace_id , name = test_project
300+ ).first ()
301+ workspace_name = project .workspace .name
302+
303+ client .delete (f"/v1/project/{ workspace_name } /{ project .name } " )
304+
305+ e = audit_capture .one (SyncEventType .PROJECT_MARKED_FOR_DELETION )
306+ assert e .target_project_id == project .id
307+ assert e .target_workspace_id == project .workspace_id
308+
309+
296310def test_project_restored (client , audit_capture ):
297311 project = Project .query .filter_by (
298312 workspace_id = test_workspace_id , name = test_project
@@ -370,6 +384,22 @@ def test_project_member_deleted(client, audit_capture):
370384 assert e .metadata ["reason" ] == "removed"
371385
372386
387+ def test_project_member_left (client , audit_capture ):
388+ project = Project .query .filter_by (
389+ workspace_id = test_workspace_id , name = test_project
390+ ).first ()
391+ user = add_user ("leavemember" , "pass123" )
392+ project .set_role (user .id , ProjectRole .READER )
393+ db .session .commit ()
394+ login (client , user .username , "pass123" )
395+
396+ client .post (f"/app/project/unsubscribe/{ project .id } " )
397+
398+ e = audit_capture .one (SyncEventType .PROJECT_MEMBER_DELETED )
399+ assert e .metadata ["target_email" ] == user .email
400+ assert e .metadata ["reason" ] == "left"
401+
402+
373403def test_project_access_request_created (client , audit_capture ):
374404 project = Project .query .filter_by (
375405 workspace_id = test_workspace_id , name = test_project
0 commit comments