feat(reports): add task status settings and tests

This commit is contained in:
2026-07-06 01:22:39 +03:00
parent 99bbdb4398
commit 28cd141e76
9 changed files with 333 additions and 55 deletions

View File

@@ -368,6 +368,69 @@ class TestGetSummary:
# #endregion test_get_summary
# #region test_rbac_filtering [C:3] [TYPE Function] [SEMANTICS test,rbac,task-status-center]
# @BRIEF Rejected-path regression tests for ReportsService RBAC task filtering.
# @TEST_EDGE viewer_sees_only_own_tasks; analyst_sees_own_and_system; admin_sees_all.
class TestRbacFiltering:
def _user(self, user_id: str, role_name: str, is_admin: bool = False):
role = MagicMock()
role.name = role_name
role.is_admin = is_admin
user = MagicMock()
user.id = user_id
user.roles = [role]
return user
def _task_set(self):
return [
_make_task(id="own", user_id="user-1"),
_make_task(id="other", user_id="user-2"),
_make_task(id="system", user_id=None),
]
def test_viewer_sees_only_own_tasks(self):
from src.models.report import ReportQuery
tm = MagicMock()
tm.get_all_tasks.return_value = self._task_set()
service = _make_service(task_manager=tm)
result = service.list_reports(ReportQuery(), current_user=self._user("user-1", "viewer"))
assert {item.task_id for item in result.items} == {"own"}
def test_analyst_sees_own_and_system_tasks(self):
from src.models.report import ReportQuery
tm = MagicMock()
tm.get_all_tasks.return_value = self._task_set()
service = _make_service(task_manager=tm)
result = service.list_reports(ReportQuery(), current_user=self._user("user-1", "analyst"))
assert {item.task_id for item in result.items} == {"own", "system"}
def test_admin_sees_all_tasks(self):
from src.models.report import ReportQuery
tm = MagicMock()
tm.get_all_tasks.return_value = self._task_set()
service = _make_service(task_manager=tm)
result = service.list_reports(ReportQuery(), current_user=self._user("user-1", "Admin", True))
assert {item.task_id for item in result.items} == {"own", "other", "system"}
def test_summary_uses_same_rbac_filter(self):
tm = MagicMock()
tm.get_all_tasks.return_value = self._task_set()
service = _make_service(task_manager=tm)
viewer_summary = service.get_summary(current_user=self._user("user-1", "viewer"))
analyst_summary = service.get_summary(current_user=self._user("user-1", "analyst"))
assert viewer_summary.total_tasks == 1
assert analyst_summary.total_tasks == 2
# #endregion test_rbac_filtering
# #region test_get_report_detail [C:2] [TYPE Function]
# @BRIEF Test get_report_detail.
class TestGetReportDetail: