@pagopa/dx-cli
Version:
A CLI useful to manage DX tools.
78 lines (77 loc) • 4.67 kB
JavaScript
import { errAsync, okAsync } from "neverthrow";
import { describe, expect, it } from "vitest";
import { getInfo } from "../info.js";
import { makeMockDependencies, makeMockPackageJson, makeMockRepositoryRoot, } from "./data.js";
describe("getInfo", () => {
describe("packageManager", () => {
it("should return default packageManager (npm) when packageManager is not detected", async () => {
const mockPackageJson = makeMockPackageJson({
packageManager: undefined,
});
const mockDependencies = makeMockDependencies();
const repositoryRoot = makeMockRepositoryRoot();
mockDependencies.repositoryReader.findRepositoryRoot.mockReturnValue(okAsync(repositoryRoot));
mockDependencies.packageJsonReader.readPackageJson.mockReturnValue(okAsync(mockPackageJson));
mockDependencies.repositoryReader.fileExists.mockReturnValue(okAsync(false));
mockDependencies.repositoryReader.readFile.mockReturnValue(okAsync("22.0.0"));
const result = await getInfo(mockDependencies)();
expect(result.packageManager).toStrictEqual("npm");
expect(mockDependencies.repositoryReader.fileExists).nthCalledWith(1, "a/repo/root/pnpm-lock.yaml");
expect(mockDependencies.repositoryReader.fileExists).nthCalledWith(2, "a/repo/root/yarn.lock");
expect(mockDependencies.repositoryReader.fileExists).nthCalledWith(3, "a/repo/root/package-lock.json");
});
it("should return yarn when yarn.lock is present", async () => {
const mockPackageJson = makeMockPackageJson({
packageManager: undefined,
});
const mockDependencies = makeMockDependencies();
mockDependencies.packageJsonReader.readPackageJson.mockReturnValue(okAsync(mockPackageJson));
mockDependencies.repositoryReader.fileExists
.mockReturnValueOnce(okAsync(false))
.mockReturnValueOnce(okAsync(true)); // yarn lock file exists
mockDependencies.repositoryReader.readFile.mockReturnValue(okAsync("22.0.0"));
const repositoryRoot = makeMockRepositoryRoot();
mockDependencies.repositoryReader.findRepositoryRoot.mockReturnValue(okAsync(repositoryRoot));
const result = await getInfo(mockDependencies)();
expect(result.packageManager).toStrictEqual("yarn");
expect(mockDependencies.repositoryReader.fileExists).nthCalledWith(1, "a/repo/root/pnpm-lock.yaml");
expect(mockDependencies.repositoryReader.fileExists).nthCalledWith(2, "a/repo/root/yarn.lock");
expect(mockDependencies.repositoryReader.fileExists).not.toHaveBeenCalledWith("a/repo/root/package-lock.json");
});
});
it("should return all info", async () => {
const mockPackageJson = makeMockPackageJson({
devDependencies: new Map([["turbo", "^2.5.0"]]),
});
const repositoryRoot = makeMockRepositoryRoot();
const mockDependencies = makeMockDependencies();
mockDependencies.repositoryReader.findRepositoryRoot.mockReturnValue(okAsync(repositoryRoot));
mockDependencies.packageJsonReader.readPackageJson.mockReturnValue(okAsync(mockPackageJson));
mockDependencies.repositoryReader.readFile
.mockReturnValueOnce(okAsync("\n22.0.0\n"))
.mockReturnValueOnce(okAsync("1.0.0\n"));
const result = await getInfo(mockDependencies)();
expect(result).toStrictEqual({
node: "22.0.0",
packageManager: "pnpm",
terraform: "1.0.0",
turbo: "^2.5.0",
});
expect(mockDependencies.repositoryReader.readFile).toHaveBeenCalledWith("a/repo/root/.node-version");
expect(mockDependencies.repositoryReader.readFile).toHaveBeenCalledWith("a/repo/root/.terraform-version");
});
it("should only required information", async () => {
const repositoryRoot = makeMockRepositoryRoot();
const mockDependencies = makeMockDependencies();
mockDependencies.repositoryReader.findRepositoryRoot.mockReturnValue(okAsync(repositoryRoot));
mockDependencies.packageJsonReader.readPackageJson.mockReturnValue(okAsync(makeMockPackageJson()));
mockDependencies.repositoryReader.readFile.mockReturnValue(errAsync(new Error("File not found")));
const result = await getInfo(mockDependencies)();
expect(result).toStrictEqual({
node: undefined,
packageManager: "pnpm",
terraform: undefined,
turbo: undefined,
});
});
});