test: adopt macOS-safe real-Obsidian sessions

This commit is contained in:
vorotamoroz
2026-07-20 08:54:20 +00:00
parent 0c3c5db6c1
commit e79686d275
11 changed files with 124 additions and 12 deletions
@@ -0,0 +1,30 @@
import { readdir } from "node:fs/promises";
import { basename, dirname, join } from "node:path";
import { hasExactCaseOnlyRename } from "./pathEntries.ts";
export async function waitForExactCaseOnlyRename(
vaultPath: string,
oldPath: string,
newPath: string,
timeoutMs = Number(process.env.E2E_OBSIDIAN_FILE_TIMEOUT_MS ?? 10000)
): Promise<void> {
const oldDirectory = dirname(oldPath);
const newDirectory = dirname(newPath);
if (oldDirectory !== newDirectory) {
throw new Error(`Case-only rename paths must share one parent directory: ${oldPath} -> ${newPath}`);
}
const oldName = basename(oldPath);
const newName = basename(newPath);
const directoryPath = join(vaultPath, newDirectory);
const deadline = Date.now() + timeoutMs;
let lastEntries: string[] = [];
while (Date.now() < deadline) {
lastEntries = await readdir(directoryPath);
if (hasExactCaseOnlyRename(lastEntries, oldName, newName)) return;
await new Promise((resolve) => setTimeout(resolve, 250));
}
throw new Error(
`Timed out waiting for exact case-only rename: ${oldPath} -> ${newPath}. Directory entries: ${JSON.stringify(lastEntries)}`
);
}