import * as pathUtil from "path";
import { expect } from "chai";
import * as jetpack from "..";

describe("cwd", () => {
  it("returns the same path as process.cwd for main instance of jetpack", () => {
    expect(jetpack.cwd()).to.equal(process.cwd());
  });

  it("can create new context with different cwd", () => {
    let jetCwd = jetpack.cwd("/"); // absolute path
    expect(jetCwd.cwd()).to.equal(pathUtil.resolve(process.cwd(), "/"));

    jetCwd = jetpack.cwd("../.."); // relative path
    expect(jetCwd.cwd()).to.equal(pathUtil.resolve(process.cwd(), "../.."));

    expect(jetpack.cwd()).to.equal(process.cwd()); // cwd of main lib should be intact
  });

  it("cwd contexts can be created recursively", () => {
    const jetCwd1 = jetpack.cwd("..");
    expect(jetCwd1.cwd()).to.equal(pathUtil.resolve(process.cwd(), ".."));

    const jetCwd2 = jetCwd1.cwd("..");
    expect(jetCwd2.cwd()).to.equal(pathUtil.resolve(process.cwd(), "../.."));
  });

  it("cwd can join path parts", () => {
    const jetCwd = jetpack.cwd("a", "b", "c");
    expect(jetCwd.cwd()).to.equal(
      pathUtil.resolve(process.cwd(), "a", "b", "c")
    );
  });
});
