import path from "node:path";

import { describe, expect, test } from "vitest";

import { recursivelyFindFileInNodeModules } from ".";

describe("recursivelyFindFileInNodeModules", () => {
	test("should find existing file in current node_modules", () => {
		const result = recursivelyFindFileInNodeModules(
			path.join(__dirname, "fixtures/node_modules/bar/node_modules/bar"),
			path.join(__dirname, "fixtures"),
			"bar/bar",
		);
		expect(result).toBe(
			path.join(__dirname, "fixtures/node_modules/bar/node_modules/bar/bar"),
		);
	});

	test("should find existing file in parent node_modules", () => {
		const result = recursivelyFindFileInNodeModules(
			path.join(__dirname, "fixtures/node_modules/bar/node_modules/bar"),
			path.join(__dirname, "fixtures"),
			"foo/foo",
		);
		expect(result).toBe(path.join(__dirname, "fixtures/node_modules/foo/foo"));
	});

	test("should return undefined for non-existing file", () => {
		const result = recursivelyFindFileInNodeModules(
			path.join(__dirname, "fixtures/node_modules/bar/node_modules/foo"),
			path.join(__dirname, "fixtures"),
			"foo/bar",
		);
		expect(result).toBe(undefined);
	});

	test("should return undefined for node_modules outside of root", () => {
		const result = recursivelyFindFileInNodeModules(
			path.join(__dirname, "fixtures/node_modules/bar/node_modules/foo"),
			path.join(__dirname, "fixtures/node_modules/bar"),
			"../foo/foo",
		);
		expect(result).toBe(undefined);
	});
});
