feat(webui): complete files quick access

This commit is contained in:
2026-08-19 19:48:56 +02:00
parent ad55d47645
commit e1361427b8
9 changed files with 228 additions and 17 deletions
+54 -1
View File
@@ -2,6 +2,7 @@ from __future__ import annotations
import unittest
from datetime import datetime, timedelta, timezone
from unittest.mock import patch
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
@@ -12,7 +13,11 @@ from govoplan_core.core.change_sequence import ChangeSequenceEntry
from govoplan_core.db.base import Base
from govoplan_files.backend.capabilities import FilesAccessService, virtual_folder_resource_id
from govoplan_files.backend.db.models import FileAsset, FileFolder, FileShare
from govoplan_files.backend.storage.files import count_assets_for_user, list_assets_for_user
from govoplan_files.backend.storage.files import (
count_assets_for_user,
list_assets_for_user,
list_recent_assets_for_user,
)
TENANT_ID = "tenant-1"
@@ -22,6 +27,54 @@ GROUP_ID = "group-1"
class FilesAccessProviderTests(unittest.TestCase):
def test_recent_projection_is_bounded_ordered_and_access_filtered(self) -> None:
session = _session()
self.addCleanup(_close_session, session)
_seed_access_subjects(session)
now = datetime.now(timezone.utc)
session.add_all(
[
FileAsset(
id="owned-older",
tenant_id=TENANT_ID,
owner_type="user",
owner_user_id=USER_ID,
display_path="older.pdf",
filename="older.pdf",
updated_at=now - timedelta(hours=2),
),
FileAsset(
id="owned-newer",
tenant_id=TENANT_ID,
owner_type="user",
owner_user_id=USER_ID,
display_path="newer.pdf",
filename="newer.pdf",
updated_at=now - timedelta(hours=1),
),
FileAsset(
id="other-newest",
tenant_id=TENANT_ID,
owner_type="user",
owner_user_id=OTHER_USER_ID,
display_path="private.pdf",
filename="private.pdf",
updated_at=now,
),
]
)
session.commit()
with patch("govoplan_files.backend.storage.files.user_group_ids", return_value=[]):
recent = list_recent_assets_for_user(
session,
tenant_id=TENANT_ID,
user_id=USER_ID,
limit=1,
)
self.assertEqual(["owned-newer"], [asset.id for asset in recent])
def test_file_access_provider_explains_owner_share_admin_and_missing_resources(self) -> None:
session = _session()
self.addCleanup(_close_session, session)
+38
View File
@@ -0,0 +1,38 @@
from __future__ import annotations
from pathlib import Path
import unittest
from govoplan_files.backend.manifest import manifest
REPOSITORY_ROOT = Path(__file__).resolve().parents[1]
class FilesQuickAccessContractTests(unittest.TestCase):
def test_manifest_declares_exact_version_result_and_fallback(self) -> None:
tool = manifest.frontend.quick_access_tools[0]
self.assertEqual("files.recent", tool.id)
self.assertEqual(("files.file-version",), tool.returned_reference_kinds)
self.assertEqual("files.quick_access.files", tool.help_context_id)
self.assertEqual("/files", tool.full_page_path)
def test_renderer_and_page_keep_recent_selection_and_upload_bounded(self) -> None:
renderer = (
REPOSITORY_ROOT / "webui/src/features/files/FileQuickAccess.tsx"
).read_text(encoding="utf-8")
page = (
REPOSITORY_ROOT / "webui/src/features/files/FilesPage.tsx"
).read_text(encoding="utf-8")
self.assertIn('sort: "recent", page_size: 7', renderer)
self.assertIn('kind: "file-version"', renderer)
self.assertIn("quickAccessLaunchState(launchContext)", renderer)
self.assertIn('to="/files?quickAction=upload"', renderer)
self.assertIn('parameters.get("quickAction") !== "upload"', page)
self.assertIn('openDialog("upload"', page)
if __name__ == "__main__":
unittest.main()
+1
View File
@@ -127,6 +127,7 @@ class FilesRouterContractTests(unittest.TestCase):
self.assertIn("campaign_usage", parameters)
self.assertIn("audit_relevant", parameters)
self.assertIn("sort", parameters)
self.assertIn("total", route.response_model.model_fields)