52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import { describe, it, expect, vi } from "vitest";
|
|
import { runQrCodeGenerator } from "./run";
|
|
import type { ToolContext } from "../../core/plugins/plugin-types";
|
|
|
|
describe("QR Code Generator Plugin", () => {
|
|
const mockContext: ToolContext = {
|
|
signal: new AbortController().signal,
|
|
reportProgress: vi.fn(),
|
|
logger: {
|
|
info: vi.fn(),
|
|
warn: vi.fn(),
|
|
error: vi.fn(),
|
|
},
|
|
};
|
|
|
|
it("should generate SVG QR Code successfully", async () => {
|
|
const result = await runQrCodeGenerator(
|
|
{ text: "https://plimi.app" },
|
|
{ size: 256, margin: 4, errorCorrection: "M", format: "svg" },
|
|
mockContext
|
|
);
|
|
expect(result.type).toBe("files");
|
|
if (result.type === "files") {
|
|
expect(result.files).toHaveLength(1);
|
|
expect(result.files[0].name).toBe("qrcode.svg");
|
|
expect(result.files[0].mimeType).toBe("image/svg+xml");
|
|
expect(result.files[0].blob).toBeInstanceOf(Blob);
|
|
}
|
|
});
|
|
|
|
it("should generate PNG QR Code successfully", async () => {
|
|
const result = await runQrCodeGenerator(
|
|
{ text: "https://plimi.app" },
|
|
{ size: 256, margin: 4, errorCorrection: "M", format: "png" },
|
|
mockContext
|
|
);
|
|
expect(result.type).toBe("files");
|
|
if (result.type === "files") {
|
|
expect(result.files).toHaveLength(1);
|
|
expect(result.files[0].name).toBe("qrcode.png");
|
|
expect(result.files[0].mimeType).toBe("image/png");
|
|
expect(result.files[0].blob).toBeInstanceOf(Blob);
|
|
}
|
|
});
|
|
|
|
it("should throw error for empty input text", async () => {
|
|
await expect(
|
|
runQrCodeGenerator({ text: "" }, { size: 256, margin: 4, errorCorrection: "M", format: "svg" }, mockContext)
|
|
).rejects.toThrow("Please enter text or a URL to encode in the QR Code.");
|
|
});
|
|
});
|