import { existsSync } from "node:fs" ;
import path from "node:path" ;
import { pathToFileURL } from "node:url" ;
import { describe, expect, it } from "vitest" ;
import { resolveRepoRoot } from "../../scripts/lib/ts-guard-utils.mjs" ;
/**
* Regression tests for resolveRepoRoot ( ) .
*
* The original implementation went up exactly two levels from the caller ' s
* import . meta . url , which broke for scripts at scripts /*.mjs (one level below
* root ) — it overshot to the repo ' s parent directory .
*/
describe("resolveRepoRoot" , () => {
it("resolves correctly from a scripts/lib/*.mjs path (two levels below root)", () => {
const fakeUrl = pathToFileURL(path.resolve("scripts" , "lib" , "some-guard-utils.mjs" )).href;
const root = resolveRepoRoot(fakeUrl);
expect(existsSync(path.join(root, ".git" ))).toBe(true );
expect(existsSync(path.join(root, "package.json" ))).toBe(true );
});
it("resolves correctly from a scripts/*.mjs path (one level below root)", () => {
const fakeUrl = pathToFileURL(path.resolve("scripts" , "check-no-raw-channel-fetch.mjs" )).href;
const root = resolveRepoRoot(fakeUrl);
expect(existsSync(path.join(root, ".git" ))).toBe(true );
expect(existsSync(path.join(root, "package.json" ))).toBe(true );
});
it("resolves correctly from a deeply nested extension path" , () => {
const fakeUrl = pathToFileURL(
path.resolve("extensions" , "qqbot" , "src" , "utils" , "hypothetical.mjs" ),
).href;
const root = resolveRepoRoot(fakeUrl);
expect(existsSync(path.join(root, ".git" ))).toBe(true );
expect(existsSync(path.join(root, "package.json" ))).toBe(true );
});
it("all caller depths resolve to the same root" , () => {
const fromLib = resolveRepoRoot(pathToFileURL(path.resolve("scripts" , "lib" , "a.mjs" )).href);
const fromScripts = resolveRepoRoot(pathToFileURL(path.resolve("scripts" , "b.mjs" )).href);
const fromExtension = resolveRepoRoot(
pathToFileURL(path.resolve("extensions" , "qqbot" , "c.mjs" )).href,
);
expect(fromLib).toBe(fromScripts);
expect(fromScripts).toBe(fromExtension);
});
});
Messung V0.5 in Prozent C=94 H=85 G=89
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-09-27)
¤
*© Formatika GbR, Deutschland