Files
talkscore-asr/tests/test_build.py
T
Vladimir BryzgalovandClaude Opus 5 febec7f124 Логика запуска и Caddyfile переехали внутрь app
Файлы вне папки app обновление не доставляло: чтобы изменить порядок
запуска или конфигурацию Caddy, требовалась переустановка. Теперь .bat -
заглушка из трёх строк, вызывающая app/launcher.py, а Caddyfile создаётся
из настроек [https] в config.toml. Отредактированный вручную Caddyfile
не затирается: новая версия откладывается рядом как Caddyfile.new.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-16 17:23:47 +05:00

83 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Тесты сборки Windows-пакета.
Регрессия на реальный баг: .bat, записанный с переводами строк LF, cmd.exe
читает криво и теряет первый символ строки - `set TALKSCORE_ASR_HOME`
превращался в `ALKSCORE_ASR_HOME is not recognized`.
"""
import importlib.util
import sys
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parent.parent
@pytest.fixture(scope="module")
def build_mod():
spec = importlib.util.spec_from_file_location(
"make_windows_zip", ROOT / "build" / "make_windows_zip.py")
mod = importlib.util.module_from_spec(spec)
sys.modules["make_windows_zip"] = mod
spec.loader.exec_module(mod)
return mod
class TestBatFiles:
def test_written_with_crlf(self, build_mod, tmp_path):
target = tmp_path / "t.bat"
build_mod.write_bat(target, "@echo off\nset \"X=1\"\n")
raw = target.read_bytes()
assert b"\r\n" in raw
assert b"\n" not in raw.replace(b"\r\n", b"")
def test_bat_templates_are_ascii_only(self, build_mod):
"""Кириллица в .bat ломается: кодировка консоли заранее неизвестна."""
for name, text in (("start", build_mod.START_BAT),
("download", build_mod.DOWNLOAD_BAT)):
text.encode("ascii") # бросит UnicodeEncodeError, если появится кириллица
def test_start_bat_sets_home_variable(self, build_mod):
assert 'set "TALKSCORE_ASR_HOME=%~dp0"' in build_mod.START_BAT
def test_bat_switches_console_to_utf8(self, build_mod):
"""Python печатает в UTF-8, консоль должна быть переведена в неё же."""
for text in (build_mod.START_BAT, build_mod.DOWNLOAD_BAT):
assert "chcp 65001" in text
def test_quoted_paths_survive_spaces(self, build_mod):
"""Путь установки может содержать пробелы."""
for text in (build_mod.START_BAT, build_mod.DOWNLOAD_BAT):
assert '"%~dp0python\\python.exe"' in text
def test_written_file_has_no_bom(self, build_mod, tmp_path):
target = tmp_path / "t.bat"
build_mod.write_bat(target, "@echo off\n")
assert not target.read_bytes().startswith(b"\xef\xbb\xbf")
class TestDownloadScript:
def test_uses_requests_not_urllib(self):
"""У встраиваемого Python нет сертификатов, urllib падает на HTTPS."""
src = (ROOT / "build" / "download_models.py").read_text(encoding="utf-8")
assert "import requests" in src
assert "urllib.request.urlopen" not in src
def test_downloads_to_temp_then_renames(self):
"""Прерванная закачка не должна оставлять битый файл как готовый."""
src = (ROOT / "build" / "download_models.py").read_text(encoding="utf-8")
assert ".part" in src and "replace(dst)" in src
class TestUpdateInStartup:
def test_bat_only_delegates_to_launcher(self, build_mod):
"""Логика запуска живёт в app, иначе её не доставить обновлением.
Сам порядок «обновиться, потом запуститься» проверяется в
tests/test_launcher.py - здесь важно лишь, что .bat ничего не решает.
"""
for text in (build_mod.START_BAT, build_mod.HTTPS_BAT):
assert "-m app.launcher" in text
assert "-m app.main" not in text
assert "caddy" not in text.lower()