@@ -63,7 +63,12 @@ def test_delete_user_as_admin(py_api: TestClient, user_test: Connection) -> None
6363 text ("SELECT COUNT(*) FROM users WHERE id = :id" ),
6464 parameters = {"id" : new_id },
6565 ).scalar ()
66+ group_count = user_test .execute (
67+ text ("SELECT COUNT(*) FROM users_groups WHERE user_id = :id" ),
68+ parameters = {"id" : new_id },
69+ ).scalar ()
6670 assert user_count == 0
71+ assert group_count == 0
6772
6873
6974def test_delete_user_no_auth (py_api : TestClient ) -> None :
@@ -98,53 +103,43 @@ def test_delete_user_has_resources(py_api: TestClient, user_test: Connection) ->
98103 text ("SELECT COUNT(*) FROM users WHERE id = :id" ),
99104 parameters = {"id" : target_id },
100105 ).scalar ()
106+ session_hash = user_test .execute (
107+ text ("SELECT session_hash FROM users WHERE id = :id" ),
108+ parameters = {"id" : target_id },
109+ ).scalar ()
101110 assert user_count == 1
111+ assert session_hash == ApiKey .DATASET_130_OWNER
102112
103113
104114@pytest .mark .mut
105115@pytest .mark .parametrize (
106- ( "table_name" , "column_name" , " insert_sql") ,
116+ " insert_sql" ,
107117 [
118+ "INSERT INTO dataset (uploader, name, format) VALUES (:id, 'x', 'ARFF')" ,
108119 (
109- "dataset" ,
110- "uploader" ,
111- "INSERT INTO dataset (uploader, name, format) VALUES (:id, 'x', 'ARFF')" ,
112- ),
113- (
114- "implementation" ,
115- "uploader" ,
116120 "INSERT INTO implementation (uploader, fullname, name, version, "
117- "external_version, uploadDate) VALUES (:id, 'x', 'x', 1, '1', '2024-01-01')" ,
118- ),
119- ("run" , "uploader" , "INSERT INTO run (uploader, task_id, setup) VALUES (:id, 1, 1)" ),
120- (
121- "study" ,
122- "creator" ,
123- "INSERT INTO study (creator, name, main_entity_type) VALUES (:id, 'x', 'run')" ,
124- ),
125- (
126- "task_study" ,
127- "uploader" ,
128- "INSERT INTO task_study (uploader, study_id, task_id) VALUES (:id, 14, 1)" ,
129- ),
130- (
131- "run_study" ,
132- "uploader" ,
133- "INSERT INTO run_study (uploader, study_id, run_id) VALUES (:id, 14, 1)" ,
134- ),
135- (
136- "dataset_tag" ,
137- "uploader" ,
138- "INSERT INTO dataset_tag (uploader, id, tag) VALUES (:id, 1, 'x')" ,
121+ "external_version, uploadDate) VALUES (:id, 'x', 'x', 1, '1', '2024-01-01')"
139122 ),
123+ "INSERT INTO run (uploader, task_id, setup) VALUES (:id, 1, 1)" ,
124+ "INSERT INTO study (creator, name, main_entity_type) VALUES (:id, 'x', 'run')" ,
125+ "INSERT INTO task_study (uploader, study_id, task_id) VALUES (:id, 14, 1)" ,
126+ "INSERT INTO run_study (uploader, study_id, run_id) VALUES (:id, 14, 1)" ,
127+ "INSERT INTO dataset_tag (uploader, id, tag) VALUES (:id, 1, 'x')" ,
128+ ],
129+ ids = [
130+ "dataset" ,
131+ "implementation" ,
132+ "run" ,
133+ "study" ,
134+ "task_study" ,
135+ "run_study" ,
136+ "dataset_tag" ,
140137 ],
141138)
142- def test_delete_user_has_resources_parametrized ( # noqa: PLR0913
139+ def test_delete_user_has_resources_parametrized (
143140 py_api : TestClient ,
144141 user_test : Connection ,
145142 expdb_test : Connection ,
146- table_name : str , # noqa: ARG001
147- column_name : str , # noqa: ARG001
148143 insert_sql : str ,
149144) -> None :
150145 """Verify that possessing any tracked resource blocks deletion."""
@@ -156,13 +151,22 @@ def test_delete_user_has_resources_parametrized( # noqa: PLR0913
156151 )
157152 (new_id ,) = user_test .execute (text ("SELECT LAST_INSERT_ID()" )).one ()
158153
159- # Disable constraints temporarily to inject simple orphaned rows for testing 409
160- expdb_test .execute (text ("SET FOREIGN_KEY_CHECKS=0" ))
161- expdb_test .execute (text (insert_sql ), parameters = {"id" : new_id })
162- expdb_test .execute (text ("SET FOREIGN_KEY_CHECKS=1" ))
163- expdb_test .commit ()
154+ # Keep inserts inside rollback-scoped transaction used by the test harness.
155+ with expdb_test .begin_nested ():
156+ expdb_test .execute (text ("SET FOREIGN_KEY_CHECKS=0" ))
157+ try :
158+ expdb_test .execute (text (insert_sql ), parameters = {"id" : new_id })
159+ finally :
160+ expdb_test .execute (text ("SET FOREIGN_KEY_CHECKS=1" ))
164161
165162 response = py_api .delete (f"/users/{ new_id } ?api_key=eeeeffffccccddddaaaabbbbccccdddd" )
166163
167164 assert response .status_code == HTTPStatus .CONFLICT
168165 assert response .json ()["detail" ]["code" ] == "122"
166+ assert "resource(s)" in response .json ()["detail" ]["message" ]
167+
168+ user_count = user_test .execute (
169+ text ("SELECT COUNT(*) FROM users WHERE id = :id" ),
170+ parameters = {"id" : new_id },
171+ ).scalar ()
172+ assert user_count == 1
0 commit comments