Files
sciagent/be0/tests/test_application_backup.py
T
Thinh Lam 688fac73e9
CI/CD / backend (push) Failing after 2m8s
CI/CD / frontend (push) Failing after 1m40s
CI/CD / deploy (push) Has been skipped
sciagent code + Gitea Actions CI/CD
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 09:38:30 +07:00

100 lines
3.3 KiB
Python

"""Unit tests for backup ZIP helpers (no database)."""
import unittest
from src.initiative_db.backup_naming import backup_zip_attachment_filename, official_form_pdf_backup_zip_path
from src.initiative_db.application_storage import (
EVIDENCE_ROLE_RESEARCH,
STORAGE_FILESYSTEM,
STORAGE_MINIO_ATTACHMENTS,
STORAGE_MINIO_EXPORTS,
effective_storage_kind,
)
class OfficialFormPdfZipPathTests(unittest.TestCase):
def test_trang_bia_fields(self) -> None:
obm = {
"TRANG BÌA": {
"Tên sáng kiến (Tiếng Việt)": " Khảo sát thảo dược ",
"Tác giả/nhóm tác giả sáng kiến": "Lê Thị A",
"Thông tin liên hệ (Điện thoại, Email)": "0909, a.b@ump.edu.vn",
}
}
p = official_form_pdf_backup_zip_path(obm)
self.assertEqual(p, "submitted/Khảo_sát_thảo_dược_Lê_Thị_A_a.b@ump.edu.vn.pdf")
def test_no_trang_bia_returns_none(self) -> None:
self.assertIsNone(official_form_pdf_backup_zip_path({}))
self.assertIsNone(official_form_pdf_backup_zip_path({"OTHER": {}}))
def test_empty_cover_returns_none(self) -> None:
self.assertIsNone(
official_form_pdf_backup_zip_path({"TRANG BÌA": {"Tên sáng kiến (Tiếng Việt)": " "}})
)
class BackupZipFilenameTests(unittest.TestCase):
def test_email_local_part_and_sub_id(self) -> None:
self.assertEqual(
backup_zip_attachment_filename(
owner_email=" nguyen.van.a@ump.edu.vn ",
owner_full_name="Nguyễn Văn A",
public_application_id="sub-deadbeef",
),
"nguyen.van.a_sub-deadbeef.zip",
)
def test_fallback_name_when_no_email(self) -> None:
fn = backup_zip_attachment_filename(
owner_email=None,
owner_full_name=" Lê Thị B ",
public_application_id="sub-001",
)
self.assertTrue(fn.endswith("_sub-001.zip"))
self.assertIn("Lê", fn)
def test_applicant_fallback(self) -> None:
self.assertEqual(
backup_zip_attachment_filename(
owner_email="",
owner_full_name="",
public_application_id="sub-x",
),
"applicant_sub-x.zip",
)
class EffectiveStorageKindTests(unittest.TestCase):
def test_full_pdf_minio_key(self) -> None:
self.assertEqual(
effective_storage_kind("full_pdf", "initiatives/abcd/2025/01/x-file.pdf", None),
STORAGE_MINIO_EXPORTS,
)
def test_full_pdf_filesystem(self) -> None:
self.assertEqual(
effective_storage_kind("full_pdf", "/submitted-initiatives/sub-abc.pdf", None),
STORAGE_FILESYSTEM,
)
def test_evidence_attachments(self) -> None:
self.assertEqual(
effective_storage_kind(
EVIDENCE_ROLE_RESEARCH,
"initiatives/abcd/2025/01/x-file.pdf",
None,
),
STORAGE_MINIO_ATTACHMENTS,
)
def test_respects_declared(self) -> None:
self.assertEqual(
effective_storage_kind("full_pdf", "/any", STORAGE_MINIO_EXPORTS),
STORAGE_MINIO_EXPORTS,
)
if __name__ == "__main__":
unittest.main()