Add admin issue deletion workflow
This commit is contained in:
@@ -1682,6 +1682,76 @@ class PortalWorkflowTests(TempDatabaseMixin, unittest.TestCase):
|
||||
self.assertEqual(pending_count, 1)
|
||||
|
||||
|
||||
class PortalIssueDeletionTests(TempDatabaseMixin, unittest.IsolatedAsyncioTestCase):
|
||||
def _create_issue(self) -> dict:
|
||||
issue = db.create_portal_item(
|
||||
kind="issue",
|
||||
title="Delete this issue",
|
||||
description="No longer required",
|
||||
created_by_username="reporter",
|
||||
created_by_id=None,
|
||||
issue_type="playback",
|
||||
)
|
||||
db.add_portal_comment(
|
||||
int(issue["id"]),
|
||||
author_username="reporter",
|
||||
author_role="user",
|
||||
message="Issue detail",
|
||||
)
|
||||
db.add_portal_item_activity(
|
||||
int(issue["id"]),
|
||||
event_type="item_created",
|
||||
actor_username="reporter",
|
||||
actor_role="user",
|
||||
message="Issue created",
|
||||
)
|
||||
return issue
|
||||
|
||||
async def test_only_admin_can_delete_an_issue(self) -> None:
|
||||
issue = self._create_issue()
|
||||
|
||||
with self.assertRaises(HTTPException) as context:
|
||||
await portal_router.portal_delete_item(
|
||||
int(issue["id"]),
|
||||
current_user={"username": "reporter", "role": "user"},
|
||||
)
|
||||
|
||||
self.assertEqual(context.exception.status_code, 403)
|
||||
self.assertIsNotNone(db.get_portal_item(int(issue["id"])))
|
||||
|
||||
async def test_delete_issue_removes_its_comments_and_activity(self) -> None:
|
||||
issue = self._create_issue()
|
||||
issue_id = int(issue["id"])
|
||||
|
||||
result = await portal_router.portal_delete_item(
|
||||
issue_id,
|
||||
current_user={"username": "admin", "role": "admin"},
|
||||
)
|
||||
|
||||
self.assertEqual(result, {"status": "deleted", "item_id": issue_id})
|
||||
self.assertIsNone(db.get_portal_item(issue_id))
|
||||
self.assertEqual(db.list_portal_comments(issue_id), [])
|
||||
self.assertEqual(db.list_portal_item_activity(issue_id), [])
|
||||
|
||||
async def test_delete_endpoint_will_not_delete_a_request(self) -> None:
|
||||
request_item = db.create_portal_item(
|
||||
kind="request",
|
||||
title="Keep this request",
|
||||
description="The media workflow must remain intact",
|
||||
created_by_username="reporter",
|
||||
created_by_id=None,
|
||||
)
|
||||
|
||||
with self.assertRaises(HTTPException) as context:
|
||||
await portal_router.portal_delete_item(
|
||||
int(request_item["id"]),
|
||||
current_user={"username": "admin", "role": "admin"},
|
||||
)
|
||||
|
||||
self.assertEqual(context.exception.status_code, 400)
|
||||
self.assertIsNotNone(db.get_portal_item(int(request_item["id"])))
|
||||
|
||||
|
||||
class IssueResolutionWorkflowTests(TempDatabaseMixin, unittest.IsolatedAsyncioTestCase):
|
||||
def _create_issue(self, *, status: str = "in_progress") -> dict:
|
||||
return db.create_portal_item(
|
||||
|
||||
Reference in New Issue
Block a user