@@ -481,6 +481,69 @@ def test_delete_leaderboard(database, submit_leaderboard):
481481 assert db .get_leaderboard_names () == []
482482
483483
484+ def test_delete_submissions_for_user (database , submit_leaderboard ):
485+ with database as db :
486+ target_a = db .create_submission (
487+ "submit-leaderboard" ,
488+ "submission.py" ,
489+ 5 ,
490+ "pass" ,
491+ datetime .datetime .now (),
492+ user_name = "target-user" ,
493+ )
494+ target_b = db .create_submission (
495+ "submit-leaderboard" ,
496+ "submission.py" ,
497+ 5 ,
498+ "pass 2" ,
499+ datetime .datetime .now (),
500+ user_name = "target-user" ,
501+ )
502+ other = db .create_submission (
503+ "submit-leaderboard" ,
504+ "submission.py" ,
505+ 7 ,
506+ "different" ,
507+ datetime .datetime .now (),
508+ user_name = "other-user" ,
509+ )
510+
511+ _create_submission_run (db , target_a , mode = "leaderboard" , secret = False , runner = "A100" , score = 5 )
512+ _create_submission_run (db , target_b , mode = "test" , secret = False , runner = "A100" , score = None )
513+ _create_submission_run (db , other , mode = "leaderboard" , secret = False , runner = "A100" , score = 7 )
514+ db .upsert_submission_job_status (target_a , "running" , None )
515+ db .upsert_submission_job_status (target_b , "pending" , None )
516+
517+ deleted = db .delete_submissions_for_user (db .get_leaderboard_id ("submit-leaderboard" ), "target-user" )
518+
519+ assert deleted == {
520+ "deleted_job_status" : 2 ,
521+ "deleted_runs" : 2 ,
522+ "deleted_submissions" : 2 ,
523+ }
524+ assert db .get_submission_by_id (target_a ) is None
525+ assert db .get_submission_by_id (target_b ) is None
526+ assert db .get_submission_by_id (other ) is not None
527+
528+ db .cursor .execute ("SELECT COUNT(*) FROM leaderboard.runs" )
529+ assert db .cursor .fetchone ()[0 ] == 1
530+
531+ db .cursor .execute ("SELECT COUNT(*) FROM leaderboard.submission_job_status" )
532+ assert db .cursor .fetchone ()[0 ] == 0
533+
534+ db .cursor .execute ("SELECT COUNT(*) FROM leaderboard.submission" )
535+ assert db .cursor .fetchone ()[0 ] == 1
536+
537+
538+ def test_delete_submissions_for_user_missing_leaderboard (database ):
539+ with database as db :
540+ with pytest .raises (
541+ leaderboard_db .LeaderboardDoesNotExist ,
542+ match = "Leaderboard `999999` does not exist." ,
543+ ):
544+ db .delete_submissions_for_user (999999 , "target-user" )
545+
546+
484547def test_delete_leaderboard_with_runs (database , submit_leaderboard ):
485548 with database as db :
486549 db .create_submission (
@@ -1135,4 +1198,3 @@ def test_check_rate_limit_categories_independent(database, submit_leaderboard):
11351198 # Test should be blocked
11361199 result = db .check_rate_limit ("submit-leaderboard" , "123" , "test" )
11371200 assert result ["allowed" ] is False
1138-
0 commit comments