import fs from 'fs' import path from 'path' describe('scripts/smoke-install.ps1', () => { const script = fs.readFileSync( path.join(process.cwd(), 'scripts/smoke-install.ps1'), 'utf8' ) it('首装验收可以选择启动 Compose,但默认也能只做检查', () => { expect(script).toContain('[switch]$Start') expect(script).toContain('[switch]$PreflightOnly') expect(script).toContain('[switch]$PrepareDirectories') expect(script).toContain('"up", "-d"') expect(script).toContain('"config", "--quiet"') expect(script).toContain('@("ps")') }) it('启动前先拦截占位配置、latest 镜像和缺失数据目录', () => { expect(script).toContain('Invoke-InstallPreflight') expect(script).toContain('Test-PlaceholderValue') expect(script).toContain('APP_IMAGE 不能使用 latest') expect(script).toContain('APP_IMAGE 必须写完整镜像站地址') expect(script).toContain('DATABASE_URL 仍是示例地址') expect(script).toContain('缺少 $Name 目录') expect(script).toContain('安装前检查完成,未启动或检查容器。') }) it('验收运行镜像、版本文件、迁移状态和健康接口', () => { expect(script).toContain('Wait-ServiceRunning') expect(script).toContain('docker inspect $appContainerId --format') expect(script).toContain('cat VERSION.txt') expect(script).toContain('[string]$ExpectedVersion = ""') expect(script).toContain('应用版本符合预期') expect(script).toContain('/api/health 正常,版本符合预期') expect(script).toContain('没有返回期望版本') expect(script).toContain('npx", "prisma", "migrate", "status"') expect(script).toContain('/api/health') }) it('验收内置对象存储 bucket,并允许外部对象存储跳过', () => { expect(script).toContain('[switch]$SkipObjectStorageCheck') expect(script).toContain('Test-ExternalObjectStorage') expect(script).toContain('"S3_ENDPOINT", "S3_BUCKET", "S3_ACCESS_KEY_ID", "S3_SECRET_ACCESS_KEY"') expect(script).toContain('"MINIO_ROOT_USER", "MINIO_ROOT_PASSWORD", "S3_BUCKET"') expect(script).toContain('S3_BUCKET') expect(script).toContain('检测到外部对象存储,跳过内置 MinIO bucket 检查') expect(script).toContain('test -d /data/$bucket') }) it('验收失败时会读取应用日志辅助排查', () => { expect(script).toContain('logs --tail 80') expect(script).toContain('读取应用日志失败') }) })