Files
zyt/app/tests/test_one_click_entrypoints.py
2026-08-27 14:54:18 +08:00

130 lines
5.5 KiB
Python

from __future__ import annotations
import tomllib
from pathlib import Path
from doctor_workstation import __version__
PROJECT_ROOT = Path(__file__).resolve().parents[1]
def read(relative_path: str) -> str:
return (PROJECT_ROOT / relative_path).read_text(encoding="utf-8")
def test_application_version_has_one_source() -> None:
pyproject = tomllib.loads(read("pyproject.toml"))
project = pyproject["project"]
assert "version" not in project
assert "version" in project["dynamic"]
assert pyproject["tool"]["hatch"]["version"]["path"] == (
"src/doctor_workstation/__init__.py"
)
assert __version__
version_template = read("packaging/windows/version_info.template.txt")
assert "@VERSION_TUPLE@" in version_template
assert "@VERSION_STRING@" in version_template
assert "0.1.0" not in version_template
spec = read("packaging/doctor_workstation.spec")
windows_package_script = read("scripts/package_windows.ps1")
macos_package_script = read("scripts/package_macos.sh")
assert 'VERSION_SOURCE = SOURCE_ROOT / "doctor_workstation" / "__init__.py"' in spec
assert 'src\\doctor_workstation\\__init__.py' in windows_package_script
assert 'src/doctor_workstation/__init__.py' in macos_package_script
def test_windows_one_click_entrypoints_and_release_pipeline() -> None:
for name in (
"Run_DoctorWorkstation.bat",
"Build_DoctorWorkstation.bat",
"一键运行_医生工作站.bat",
"一键打包_医生工作站.bat",
):
assert (PROJECT_ROOT / name).is_file()
run_script = read("scripts/run_windows.ps1")
package_script = read("scripts/package_windows.ps1")
compiler_script = read("scripts/ensure_inno_setup.ps1")
installer_definition = read("packaging/windows/doctor_workstation.iss")
installer_smoke = read("scripts/smoke_windows_installer.ps1")
release_launcher = read("packaging/windows/start_release.bat")
assert run_script.index("$FrozenExecutable") < run_script.index("Find-Uv")
assert "& $Uv sync --frozen" in run_script
assert '"UV_CACHE_DIR"' in run_script
assert "$ProjectUvCache" in run_script
assert "& $Uv sync --frozen --extra build" in package_script
assert '"UV_CACHE_DIR"' in package_script
assert "$ProjectUvCache" in package_script
assert "& $Npm ci --prefix" in package_script
assert "build_windows.ps1" in package_script
assert "DoctorWorkstation-Windows-x64-$ProjectVersion.zip" in package_script
assert "DoctorWorkstation-Setup-Windows-x64-$ProjectVersion" in package_script
assert "Get-FileHash" in package_script
assert "ensure_inno_setup.ps1" in package_script
assert "doctor_workstation.iss" in package_script
assert package_script.index("& $BuildScript") < package_script.index("& $InnoCompiler")
assert "Start_DoctorWorkstation.bat" in package_script
assert "DoctorWorkstation\\DoctorWorkstation.exe" in release_launcher
assert "explorer.exe" in read("Build_DoctorWorkstation.bat")
assert "6.7.3" in compiler_script
assert "Get-FileHash" in compiler_script
assert "Get-AuthenticodeSignature" in compiler_script
assert "9C73C3BAE7ED48D44112A0F48E66742C00090BDB5BEF71D9D3C056C66E97B732" in (
compiler_script
)
assert "E0B0B350E2245F3C5E65586DFE43D574F6E7F06F2261149ABA284954B3FC9A8D" in (
compiler_script
)
assert "AppId=" in installer_definition
assert "MinVersion=10.0.17763" in installer_definition
assert "ArchitecturesAllowed=x64compatible" in installer_definition
assert "PrivilegesRequiredOverridesAllowed=dialog commandline" in installer_definition
assert "UsePreviousAppDir=yes" in installer_definition
assert "UsePreviousPrivileges=yes" in installer_definition
assert "recursesubdirs createallsubdirs" in installer_definition
assert "{autoprograms}" in installer_definition
assert "{autodesktop}" in installer_definition
assert "UninstallDisplayIcon=" in installer_definition
assert "ChineseMessagesFile" in installer_definition
assert '"/CURRENTUSER"' in installer_smoke
assert '-ArgumentList "--smoke-test"' in installer_smoke
assert "unins000.exe" in installer_smoke
assert "-WindowStyle Hidden" in installer_smoke
assert "Uninstaller left the installed executable behind" in installer_smoke
def test_debug_launcher_reuses_an_isolated_persistent_profile() -> None:
debug_script = read("Debug_DoctorWorkstation.bat")
assert "%LOCALAPPDATA%\\ZhenYangTang\\DoctorWorkstation\\Debug" in debug_script
assert "DOCTOR_CONFIG_DIR=%DEBUG_PROFILE%\\config" in debug_script
assert "DOCTOR_LOG_DIR=%DEBUG_PROFILE%\\logs" in debug_script
assert "%RANDOM%" not in debug_script
def test_macos_one_click_entrypoints_and_release_pipeline() -> None:
for name in (
"run_macos.command",
"package_macos.command",
"一键运行.command",
"一键打包.command",
):
assert (PROJECT_ROOT / name).is_file()
run_script = read("scripts/run_macos.sh")
package_script = read("scripts/package_macos.sh")
assert run_script.index('/usr/bin/open "$artifact"') < run_script.index("macos_ensure_uv")
assert "sync --locked" in run_script
assert "sync --locked --extra build" in package_script
assert 'ci --prefix "$project_root/video_companion"' in package_script
assert "/usr/bin/ditto -c -k --sequesterRsrc --keepParent" in package_script
assert "/usr/bin/shasum -a 256" in package_script
assert "DoctorWorkstation-macOS-$release_arch-$project_version.zip" in package_script