From 2d5b40379fd5a35f09c141ee6229bf61ecd79430 Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Tue, 9 Jun 2026 15:12:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9B=E5=BB=BA=E5=8F=AF=E5=A4=8D?= =?UTF-8?q?=E7=94=A8=E6=96=AD=E8=A8=80=E5=B7=A5=E5=85=B7=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/agent/validators.ts | 64 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 tests/agent/validators.ts diff --git a/tests/agent/validators.ts b/tests/agent/validators.ts new file mode 100644 index 0000000..94f391c --- /dev/null +++ b/tests/agent/validators.ts @@ -0,0 +1,64 @@ +import { expect } from "bun:test"; +import { existsSync, readFileSync } from "node:fs"; +import { join } from "node:path"; +import type { ChangeStatus } from "../../src/types.ts"; +import { validateConfig } from "../../src/core/config.ts"; +import type { RuneConfig } from "../../src/types.ts"; + +export function assertFileExists(projectDir: string, relativePath: string): void { + expect(existsSync(join(projectDir, relativePath))).toBe(true); +} + +export function assertNoFile(projectDir: string, relativePath: string): void { + expect(existsSync(join(projectDir, relativePath))).toBe(false); +} + +export function assertDirExists(projectDir: string, relativePath: string): void { + expect(existsSync(join(projectDir, relativePath))).toBe(true); +} + +export function assertFileContains( + projectDir: string, + relativePath: string, + expected: string, +): void { + const content = readFileSync(join(projectDir, relativePath), "utf-8"); + expect(content).toContain(expected); +} + +export function assertDocCreated(projectDir: string, changeName: string, docName: string): void { + assertFileExists(projectDir, `.rune/changes/${changeName}/${docName}.md`); + const content = readFileSync( + join(projectDir, `.rune/changes/${changeName}/${docName}.md`), + "utf-8", + ); + expect(content.length).toBeGreaterThan(0); +} + +export function assertDocContains( + projectDir: string, + changeName: string, + docName: string, + expected: string, +): void { + assertFileContains(projectDir, `.rune/changes/${changeName}/${docName}.md`, expected); +} + +export function assertAllTasksDone(change: ChangeStatus): void { + expect(change.taskProgress).not.toBeNull(); + if (change.taskProgress) { + expect(change.taskProgress.completed).toBe(change.taskProgress.total); + } +} + +export function assertTaskProgress(change: ChangeStatus, completed: number, total: number): void { + expect(change.taskProgress).toEqual({ completed, total }); +} + +export function assertConfigValid(config: RuneConfig): void { + expect(() => validateConfig(config)).not.toThrow(); +} + +export function assertConfigInvalid(config: RuneConfig): void { + expect(() => validateConfig(config)).toThrow(); +}