1+ from django .test import override_settings
12from django .urls import reverse
23
4+ from hypha .apply .funds .models .submissions import ApplicationSubmissionSkeleton
35from hypha .apply .funds .tests .factories .models import ApplicationSubmissionFactory
46from hypha .apply .funds .workflows import DRAFT_STATE
57from hypha .apply .users .tests .factories import AdminFactory , ApplicantFactory
@@ -26,8 +28,9 @@ def test_submission_delete_by_admin(db, client):
2628 assert res .status_code == 200
2729 assert "<form" in res .content .decode ()
2830 assert f'action="{ delete_url } "' in res .content .decode ()
31+ assert "id_anon_or_delete" not in res .content .decode ()
2932
30- res = client .post (delete_url , data = {"delete" : "delete" })
33+ res = client .post (delete_url , data = {"delete" : "delete" , "anon_or_delete" : "DELETE" })
3134 assert res .status_code == 302
3235 assert res .url == "/apply/submissions/all/"
3336
@@ -36,6 +39,61 @@ def test_submission_delete_by_admin(db, client):
3639 assert res .status_code == 404
3740
3841
42+ @override_settings (SUBMISSION_SKELETONING_ENABLED = True )
43+ def test_submission_delete_by_admin_skeleton_enabled (db , client ):
44+ # Check admin can delete submission
45+ user = AdminFactory ()
46+ submission = ApplicationSubmissionFactory ()
47+
48+ client .force_login (user )
49+ delete_url = reverse ("apply:submissions:delete" , kwargs = {"pk" : submission .pk })
50+ res = client .get (delete_url )
51+ assert res .status_code == 200
52+ assert "<form" in res .content .decode ()
53+ assert f'action="{ delete_url } "' in res .content .decode ()
54+
55+ res = client .post (delete_url , data = {"delete" : "delete" , "anon_or_delete" : "DELETE" })
56+ assert res .status_code == 302
57+ assert res .url == "/apply/submissions/all/"
58+
59+ # Check submission is deleted
60+ res = client .get (delete_url )
61+ assert res .status_code == 404
62+
63+ # Ensure no skeleton submission was created
64+ assert ApplicationSubmissionSkeleton .objects .all ().count () == 0
65+
66+
67+ @override_settings (SUBMISSION_SKELETONING_ENABLED = True )
68+ def test_submission_skeleton_by_admin_skeleton_enabled (db , client ):
69+ user = AdminFactory ()
70+ submission = ApplicationSubmissionFactory ()
71+
72+ client .force_login (user )
73+ delete_url = reverse ("apply:submissions:delete" , kwargs = {"pk" : submission .pk })
74+ res = client .get (delete_url )
75+ assert res .status_code == 200
76+ assert "<form" in res .content .decode ()
77+ assert f'action="{ delete_url } "' in res .content .decode ()
78+
79+ # Add the skeleton option to the delete form
80+ res = client .post (
81+ delete_url , data = {"delete" : "delete" , "anon_or_delete" : "ANONYMIZE" }
82+ )
83+ assert res .status_code == 302
84+ assert res .url == "/apply/submissions/all/"
85+
86+ # Check submission is deleted
87+ res = client .get (delete_url )
88+ assert res .status_code == 404
89+
90+ # Ensure a new skeleton submission was created
91+ assert ApplicationSubmissionSkeleton .objects .all ().count () == 1
92+
93+ last_skeleton = ApplicationSubmissionSkeleton .objects .last ()
94+ assert last_skeleton .value == submission .form_data ["value" ]
95+
96+
3997def test_submission_delete_by_applicant (db , client ):
4098 user = ApplicantFactory ()
4199 submission = ApplicationSubmissionFactory (user = user , status = DRAFT_STATE )
0 commit comments