@pagopa/dx-cli
Version:
A CLI useful to manage DX tools.
60 lines (59 loc) • 2.29 kB
JavaScript
import { ok } from "neverthrow";
import { describe, expect, it, vi } from "vitest";
import { LocalCodemodRegistry } from "../registry.js";
describe("LocalCodemodRegistry", () => {
const makeCodemod = (id, description = id) => ({
apply: vi.fn().mockResolvedValue(undefined),
description,
id,
});
it("returns empty list when no codemods are registered", async () => {
const registry = new LocalCodemodRegistry();
const result = await registry.getAll();
expect(result).toStrictEqual(ok([]));
});
it("adds codemods and lists them via getAll", async () => {
const registry = new LocalCodemodRegistry();
const a = makeCodemod("a", "A");
const b = makeCodemod("b", "B");
registry.add(a);
registry.add(b);
const result = await registry.getAll();
expect(result.isOk()).toBe(true);
if (result.isOk()) {
expect(result.value).toHaveLength(2);
expect(result.value).toEqual(expect.arrayContaining([
expect.objectContaining({ id: "a" }),
expect.objectContaining({ id: "b" }),
]));
}
});
it("retrieves a codemod by id and returns undefined when missing", async () => {
const registry = new LocalCodemodRegistry();
const a = makeCodemod("a", "A");
registry.add(a);
const found = await registry.getById("a");
expect(found.isOk()).toBe(true);
if (found.isOk()) {
expect(found.value).toBe(a);
}
const missing = await registry.getById("nope");
expect(missing.isOk()).toBe(true);
if (missing.isOk()) {
expect(missing.value).toBeUndefined();
}
});
it("overwrites an existing codemod when adding with the same id", async () => {
const registry = new LocalCodemodRegistry();
const first = makeCodemod("a", "first");
const second = makeCodemod("a", "second");
registry.add(first);
registry.add(second);
const byId = await registry.getById("a");
expect(byId.isOk()).toBe(true);
if (byId.isOk()) {
expect(byId.value).toBe(second);
expect(byId.value).not.toBe(first);
}
});
});