UNPKG

@manypkg/cli

Version:

Manypkg is a linter for `package.json` files in Yarn, npm, Lerna, pnpm or Rush monorepos.

178 lines (155 loc) 6.24 kB
import { describe, expect, it } from "vitest"; import { getFakeString, getFakeWS, getRootWS, getWS } from "./test-helpers.ts"; import check from "../INCORRECT_REPOSITORY_FIELD.ts"; describe("incorrect repository field", () => { describe("github", () => { it("should work", () => { let ws = getWS(); let rootWorkspace = getRootWS(); let defaultBranch = `b${getFakeString(5)}`; (rootWorkspace.packageJson as any).repository = "https://github.com/Thinkmill/manypkg"; let workspace = getFakeWS("no-repository-field"); ws.set("depends-on-one", workspace); ws.set("root", rootWorkspace); let errors = check.validate(workspace, ws, rootWorkspace, { defaultBranch, }); expect(errors.map(({ workspace, ...x }: any) => x)) .toMatchInlineSnapshot(` [ { "correctRepositoryField": "https://github.com/Thinkmill/manypkg/tree/${defaultBranch}/packages/no-repository-field", "currentRepositoryField": undefined, "type": "INCORRECT_REPOSITORY_FIELD", }, ] `); check.fix(errors[0], {}); expect((workspace.packageJson as any).repository).toBe( `https://github.com/Thinkmill/manypkg/tree/${defaultBranch}/packages/no-repository-field` ); }); it("should fix root in a different format", () => { let ws = getWS(); let rootWorkspace = getRootWS(); let defaultBranch = `b${getFakeString(5)}`; (rootWorkspace.packageJson as any).repository = "https://github.com/Thinkmill/manypkg.git"; let workspace = getFakeWS("no-repository-field"); ws.set("depends-on-one", workspace); ws.set("root", rootWorkspace); let errors = check.validate(rootWorkspace, ws, rootWorkspace, { defaultBranch, }); expect(errors.map(({ workspace, ...x }: any) => x)) .toMatchInlineSnapshot(` [ { "correctRepositoryField": "https://github.com/Thinkmill/manypkg", "currentRepositoryField": "https://github.com/Thinkmill/manypkg.git", "type": "INCORRECT_REPOSITORY_FIELD", }, ] `); check.fix(errors[0], {}); expect((rootWorkspace.packageJson as any).repository).toBe( "https://github.com/Thinkmill/manypkg" ); }); it("should do nothing if already in good format", () => { let ws = getWS(); let rootWorkspace = getRootWS(); let defaultBranch = `b${getFakeString(5)}`; (rootWorkspace.packageJson as any).repository = "https://github.com/Thinkmill/manypkg"; let workspace = getFakeWS("no-repository-field"); ws.set("depends-on-one", workspace); ws.set("root", rootWorkspace); let errors = check.validate(rootWorkspace, ws, rootWorkspace, { defaultBranch, }); expect(errors.map(({ workspace, ...x }: any) => x)).toMatchInlineSnapshot( `[]` ); expect((rootWorkspace.packageJson as any).repository).toBe( "https://github.com/Thinkmill/manypkg" ); }); }); describe("azure devops", () => { it("should work", () => { let ws = getWS(); let rootWorkspace = getRootWS(); let defaultBranch = `b${getFakeString(5)}`; (rootWorkspace.packageJson as any).repository = "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg"; let workspace = getFakeWS("no-repository-field"); ws.set("depends-on-one", workspace); ws.set("root", rootWorkspace); let errors = check.validate(workspace, ws, rootWorkspace, { defaultBranch, }); expect(errors.map(({ workspace, ...x }: any) => x)) .toMatchInlineSnapshot(` [ { "correctRepositoryField": "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg?path=packages/no-repository-field&version=GB${defaultBranch}&_a=contents", "currentRepositoryField": undefined, "type": "INCORRECT_REPOSITORY_FIELD", }, ] `); check.fix(errors[0], {}); expect((workspace.packageJson as any).repository).toBe( `https://dev.azure.com/Thinkmill/monorepos/_git/manypkg?path=packages/no-repository-field&version=GB${defaultBranch}&_a=contents` ); }); it("should fix root in a different format", () => { let ws = getWS(); let rootWorkspace = getRootWS(); let defaultBranch = `b${getFakeString(5)}`; (rootWorkspace.packageJson as any).repository = "https://Thinkmill@dev.azure.com/Thinkmill/monorepos/_git/manypkg"; let workspace = getFakeWS("no-repository-field"); ws.set("depends-on-one", workspace); ws.set("root", rootWorkspace); let errors = check.validate(rootWorkspace, ws, rootWorkspace, { defaultBranch, }); expect(errors.map(({ workspace, ...x }: any) => x)) .toMatchInlineSnapshot(` [ { "correctRepositoryField": "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg", "currentRepositoryField": "https://Thinkmill@dev.azure.com/Thinkmill/monorepos/_git/manypkg", "type": "INCORRECT_REPOSITORY_FIELD", }, ] `); check.fix(errors[0], {}); expect((rootWorkspace.packageJson as any).repository).toBe( "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg" ); }); it("should do nothing if already in good format", () => { let ws = getWS(); let rootWorkspace = getRootWS(); let defaultBranch = `b${getFakeString(5)}`; (rootWorkspace.packageJson as any).repository = "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg"; let workspace = getFakeWS("no-repository-field"); ws.set("depends-on-one", workspace); ws.set("root", rootWorkspace); let errors = check.validate(rootWorkspace, ws, rootWorkspace, { defaultBranch, }); expect(errors.map(({ workspace, ...x }: any) => x)).toMatchInlineSnapshot( `[]` ); expect((rootWorkspace.packageJson as any).repository).toBe( "https://dev.azure.com/Thinkmill/monorepos/_git/manypkg" ); }); }); });