import { describe, expect, test } from "vitest";
import { findCommonAncestor } from "@zerobyte/core/utils";

describe("findCommonAncestor", () => {
	test("returns root for empty path lists", () => {
		expect(findCommonAncestor([])).toBe("/");
	});

	test("returns the original path for single-item lists", () => {
		expect(findCommonAncestor(["/var/lib/zerobyte/volumes/vol123/_data"])).toBe(
			"/var/lib/zerobyte/volumes/vol123/_data",
		);
	});

	test("returns the deepest shared ancestor for multiple absolute paths", () => {
		expect(
			findCommonAncestor([
				"/var/lib/zerobyte/volumes/vol123/_data/Documents/report.pdf",
				"/var/lib/zerobyte/volumes/vol123/_data/Photos/summer.jpg",
				"/var/lib/zerobyte/volumes/vol123/_data/Music/track.mp3",
			]),
		).toBe("/var/lib/zerobyte/volumes/vol123/_data");
	});

	test("returns root when absolute paths only share the filesystem root", () => {
		expect(findCommonAncestor(["/etc/hosts", "/usr/local/bin"])).toBe("/");
	});

	test("throws when any path is relative", () => {
		expect(() => findCommonAncestor(["/var/lib/zerobyte", "relative/path"])).toThrow(
			'Path "relative/path" is not absolute.',
		);
	});
});
