This commit is contained in:
94
src/utils/webviewer.test.ts
Normal file
94
src/utils/webviewer.test.ts
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
import { describe, it, expect, vi, afterEach } from "vitest";
|
||||||
|
import {
|
||||||
|
isFileMakerEnvironment,
|
||||||
|
performScript,
|
||||||
|
performScriptWithOption,
|
||||||
|
resolveFileMakerCallback,
|
||||||
|
} from "../webviewer";
|
||||||
|
|
||||||
|
function setFileMaker(api: FileMakerAPI | undefined) {
|
||||||
|
Object.defineProperty(globalThis, "FileMaker", {
|
||||||
|
value: api,
|
||||||
|
configurable: true,
|
||||||
|
writable: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
setFileMaker(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("isFileMakerEnvironment", () => {
|
||||||
|
it("returns false when FileMaker is not defined", () => {
|
||||||
|
expect(isFileMakerEnvironment()).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns true when FileMaker is defined", () => {
|
||||||
|
setFileMaker({ PerformScript: vi.fn(), PerformScriptWithOption: vi.fn() });
|
||||||
|
expect(isFileMakerEnvironment()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("performScript", () => {
|
||||||
|
it("returns false when FileMaker is not available", () => {
|
||||||
|
expect(performScript("TestScript")).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("calls FileMaker.PerformScript and returns true when available", () => {
|
||||||
|
const mock = vi.fn();
|
||||||
|
setFileMaker({ PerformScript: mock, PerformScriptWithOption: vi.fn() });
|
||||||
|
expect(performScript("MyScript", "param")).toBe(true);
|
||||||
|
expect(mock).toHaveBeenCalledWith("MyScript", "param");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("performScriptWithOption", () => {
|
||||||
|
it("returns false when FileMaker is not available", () => {
|
||||||
|
expect(performScriptWithOption("TestScript")).toBe(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("calls FileMaker.PerformScriptWithOption with option", () => {
|
||||||
|
const mock = vi.fn();
|
||||||
|
setFileMaker({ PerformScript: vi.fn(), PerformScriptWithOption: mock });
|
||||||
|
expect(performScriptWithOption("MyScript", "param", "3")).toBe(true);
|
||||||
|
expect(mock).toHaveBeenCalledWith("MyScript", "param", "3");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("resolveFileMakerCallback", () => {
|
||||||
|
it("does nothing for an unknown callback ID", () => {
|
||||||
|
expect(() => resolveFileMakerCallback("9999")).not.toThrow();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("resolves a pending promise registered via callFileMakerScript", async () => {
|
||||||
|
const { callFileMakerScript } = await import("../webviewer");
|
||||||
|
|
||||||
|
let capturedId: number | undefined;
|
||||||
|
setFileMaker({
|
||||||
|
PerformScript: (_script, payload) => {
|
||||||
|
capturedId = JSON.parse(payload ?? "").callbackId;
|
||||||
|
},
|
||||||
|
PerformScriptWithOption: vi.fn(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const promise = callFileMakerScript("TestScript", "hello");
|
||||||
|
resolveFileMakerCallback(String(capturedId), "result-data");
|
||||||
|
await expect(promise).resolves.toBe("result-data");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("rejects a pending promise when isError is true", async () => {
|
||||||
|
const { callFileMakerScript } = await import("../webviewer");
|
||||||
|
|
||||||
|
let capturedId: number | undefined;
|
||||||
|
setFileMaker({
|
||||||
|
PerformScript: (_script, payload) => {
|
||||||
|
capturedId = JSON.parse(payload ?? "").callbackId;
|
||||||
|
},
|
||||||
|
PerformScriptWithOption: vi.fn(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const promise = callFileMakerScript("TestScript", "hello");
|
||||||
|
resolveFileMakerCallback(String(capturedId), "error message", true);
|
||||||
|
await expect(promise).rejects.toMatchObject({ message: "error message" });
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user