// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: GPL-3.0-or-later

import { describe, test, expect, beforeEach, afterEach } from "bun:test";
import { expandHomePath } from "../src/util/path.js";

describe("expandHomePath", () => {
  let savedHome: string | undefined;

  beforeEach(() => {
    savedHome = process.env["HOME"];
  });

  afterEach(() => {
    if (savedHome === undefined) {
      delete process.env["HOME"];
    } else {
      process.env["HOME"] = savedHome;
    }
  });

  test("returns path unchanged when HOME is unset", () => {
    delete process.env["HOME"];
    expect(expandHomePath("~/foo/bar")).toBe("~/foo/bar");
  });

  test("bare ~ returns HOME", () => {
    process.env["HOME"] = "/Users/alice";
    expect(expandHomePath("~")).toBe("/Users/alice");
  });

  test("~/foo/bar expands to $HOME/foo/bar", () => {
    process.env["HOME"] = "/Users/alice";
    expect(expandHomePath("~/foo/bar")).toBe("/Users/alice/foo/bar");
  });

  test("paths without tilde are returned unchanged", () => {
    process.env["HOME"] = "/Users/alice";
    expect(expandHomePath("/absolute/path")).toBe("/absolute/path");
    expect(expandHomePath("relative/path")).toBe("relative/path");
  });

  test("~user/foo is returned unchanged (not our expansion)", () => {
    process.env["HOME"] = "/Users/alice";
    expect(expandHomePath("~user/foo")).toBe("~user/foo");
  });
});
