51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import type { CliDeps } from "../cli/deps.js";
|
|
import type { RuntimeEnv } from "../runtime.js";
|
|
import { statusCommand } from "./status.js";
|
|
|
|
vi.mock("../twilio/messages.js", () => ({
|
|
formatMessageLine: (m: { sid: string }) => `LINE:${m.sid}`,
|
|
}));
|
|
|
|
const runtime: RuntimeEnv = {
|
|
log: vi.fn(),
|
|
error: vi.fn(),
|
|
exit: vi.fn(() => {
|
|
throw new Error("exit");
|
|
}),
|
|
};
|
|
|
|
const deps: CliDeps = {
|
|
listRecentMessages: vi.fn(),
|
|
} as unknown as CliDeps;
|
|
|
|
describe("statusCommand", () => {
|
|
it("validates limit and lookback", async () => {
|
|
await expect(
|
|
statusCommand({ limit: "0", lookback: "10" }, deps, runtime),
|
|
).rejects.toThrow("limit must be between 1 and 200");
|
|
await expect(
|
|
statusCommand({ limit: "10", lookback: "0" }, deps, runtime),
|
|
).rejects.toThrow("lookback must be > 0 minutes");
|
|
});
|
|
|
|
it("prints JSON when requested", async () => {
|
|
(deps.listRecentMessages as jest.Mock).mockResolvedValue([{ sid: "1" }]);
|
|
await statusCommand(
|
|
{ limit: "5", lookback: "10", json: true },
|
|
deps,
|
|
runtime,
|
|
);
|
|
expect(runtime.log).toHaveBeenCalledWith(
|
|
JSON.stringify([{ sid: "1" }], null, 2),
|
|
);
|
|
});
|
|
|
|
it("prints formatted lines otherwise", async () => {
|
|
(deps.listRecentMessages as jest.Mock).mockResolvedValue([{ sid: "123" }]);
|
|
await statusCommand({ limit: "1", lookback: "5" }, deps, runtime);
|
|
expect(runtime.log).toHaveBeenCalledWith("LINE:123");
|
|
});
|
|
});
|