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(); }