from pathlib import Path def test_restore_postgres_plan_is_non_destructive(): script = Path("scripts/restore_postgres_plan.sh").read_text(encoding="utf-8") executable_prefix = script.split("cat <.tar" in docs assert "禁止在生产机上构建 API/Worker 镜像" in docs assert "不是构建机" in docs assert "缺少 tar 时 `infra/docker/deploy-production.sh` 必须失败" in docs def test_runtime_image_release_scripts_keep_builds_off_production(): build_script = Path("scripts/build_release_images.sh").read_text(encoding="utf-8") deploy_script = Path("scripts/deploy_release_images_production.sh").read_text(encoding="utf-8") assert "docker build --pull=false -f infra/docker/api.Dockerfile" in build_script assert "docker build --pull=false -f infra/docker/worker.Dockerfile" in build_script assert "docker save" in build_script assert "Refusing to build runtime images on a host that is running production services." in build_script assert "ALLOW_SHARED_PRODUCTION_BUILD_HOST=true" in build_script assert "docker load -i" in deploy_script assert "API_IMAGE=\"xiaoxia-saas-api:$VERSION\"" in deploy_script assert "WORKER_IMAGE=\"xiaoxia-saas-worker:$VERSION\"" in deploy_script assert "ALLOW_PRODUCTION_BUILDS=false" in deploy_script assert "docker compose --env-file \"$ENV_FILE\" build --pull=false web" in deploy_script assert "docker compose --env-file \"$ENV_FILE\" build --pull=false api" not in deploy_script assert "docker compose --env-file \"$ENV_FILE\" build --pull=false worker" not in deploy_script def test_backup_postgres_writes_manifest_and_version(): script = Path("scripts/backup_postgres.sh").read_text(encoding="utf-8") assert "pg_dump" in script assert "alembic_version.txt" in script assert "manifest.txt" in script assert "test -s" not in script assert 'if [ ! -s "$DUMP_PATH" ]' in script