UNPKG

@pagopa/dx-cli

Version:

A CLI useful to manage DX tools.

78 lines (77 loc) 4.67 kB
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, }); }); });