mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-07-18 09:54:55 +00:00
feat(tasks): extend and harden the task system redesign
- TaskType: add EMPTY_TRASH, CHECK_WORKFLOWS, CLEANUP_SHARE_LINKS; remove INDEX_REBUILD (no backing task — beat schedule uses index_optimize) - TRACKED_TASKS: wire up all nine task types including the three new ones and llmindex_index / process_mail_accounts - Add task_revoked_handler so cancelled/expired tasks are marked REVOKED - Fix double-write: task_postrun_handler no longer overwrites result_data when status is already FAILURE (task_failure_handler owns that write) - v9 serialiser: map EMAIL_CONSUME and FOLDER_CONSUME to AUTO_TASK - views: scope task list to owner for regular users, admins see all; validate ?days= query param and return 400 on bad input - tests: add test_list_admin_sees_all_tasks; rename/fix test_parses_duplicate_string (duplicates produce SUCCESS, not FAILURE); use PaperlessTaskFactory in modified tests Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
979d8a67f0
commit
e86c37f717
@@ -163,12 +163,12 @@ class TestGetTasksV10:
|
||||
ids = [t["task_id"] for t in response.data]
|
||||
assert ids == [t3.task_id, t2.task_id, t1.task_id]
|
||||
|
||||
def test_list_is_owner_aware(
|
||||
def test_list_scoped_to_own_tasks_for_regular_user(
|
||||
self,
|
||||
admin_user: User,
|
||||
regular_user: User,
|
||||
) -> None:
|
||||
"""The task list only shows tasks the user owns or that are unowned."""
|
||||
"""Regular users see only tasks they own; tasks owned by others or unowned are hidden."""
|
||||
regular_user.user_permissions.add(
|
||||
Permission.objects.get(codename="view_paperlesstask"),
|
||||
)
|
||||
@@ -177,17 +177,31 @@ class TestGetTasksV10:
|
||||
client.force_authenticate(user=regular_user)
|
||||
client.credentials(HTTP_ACCEPT=ACCEPT_V10)
|
||||
|
||||
PaperlessTaskFactory(owner=admin_user)
|
||||
shared_task = PaperlessTaskFactory()
|
||||
PaperlessTaskFactory(owner=admin_user) # other user — not visible
|
||||
PaperlessTaskFactory() # unowned (system task) — not visible
|
||||
own_task = PaperlessTaskFactory(owner=regular_user)
|
||||
|
||||
response = client.get(ENDPOINT)
|
||||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
assert len(response.data) == 2
|
||||
returned_task_ids = {t["task_id"] for t in response.data}
|
||||
assert shared_task.task_id in returned_task_ids
|
||||
assert own_task.task_id in returned_task_ids
|
||||
assert len(response.data) == 1
|
||||
assert response.data[0]["task_id"] == own_task.task_id
|
||||
|
||||
def test_list_admin_sees_all_tasks(
|
||||
self,
|
||||
admin_client: APIClient,
|
||||
admin_user: User,
|
||||
regular_user: User,
|
||||
) -> None:
|
||||
"""Admin users see all tasks regardless of owner."""
|
||||
PaperlessTaskFactory(owner=admin_user)
|
||||
PaperlessTaskFactory() # unowned system task
|
||||
PaperlessTaskFactory(owner=regular_user)
|
||||
|
||||
response = admin_client.get(ENDPOINT)
|
||||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
assert len(response.data) == 3
|
||||
|
||||
|
||||
@pytest.mark.django_db()
|
||||
|
||||
Reference in New Issue
Block a user