Files
Artificial-Sweetener-Simple…/web/tests/refresh.test.ts
T

65 lines
2.1 KiB
TypeScript

// SimpleSyrup - workflow-focused ComfyUI extensions for image generation
// Copyright (C) 2026 Artificial Sweetener and contributors
// SPDX-License-Identifier: AGPL-3.0-or-later
import { describe, expect, it, vi } from "vitest";
import { registerExternalLLMRefreshHook } from "../src/refresh";
import { createFakeComfyApp } from "./testUtils";
describe("external LLM refresh hook", () => {
it("refreshes external models before Comfy refreshes node definitions", async () => {
const app = createFakeComfyApp();
const calls: string[] = [];
app.refreshComboInNodes = vi.fn().mockImplementation(() => {
calls.push("comfy");
return Promise.resolve();
});
const api = {
refreshExternalLLMModels: vi.fn().mockImplementation(() => {
calls.push("external");
return Promise.resolve();
})
};
registerExternalLLMRefreshHook(app, api);
await app.refreshComboInNodes();
expect(calls).toEqual(["external", "comfy"]);
});
it("still runs the original refresh when external refresh fails", async () => {
const app = createFakeComfyApp();
const logger = { warn: vi.fn() };
const originalRefresh = vi.fn().mockResolvedValue(undefined);
app.refreshComboInNodes = originalRefresh;
registerExternalLLMRefreshHook(
app,
{ refreshExternalLLMModels: vi.fn().mockRejectedValue(new Error("offline")) },
logger
);
await app.refreshComboInNodes();
expect(originalRefresh).toHaveBeenCalledOnce();
expect(logger.warn).toHaveBeenCalledWith(
expect.stringContaining("Could not refresh"),
expect.any(Error)
);
});
it("wraps the refresh function only once", async () => {
const app = createFakeComfyApp();
const originalRefresh = vi.fn().mockResolvedValue(undefined);
app.refreshComboInNodes = originalRefresh;
const api = { refreshExternalLLMModels: vi.fn().mockResolvedValue(undefined) };
registerExternalLLMRefreshHook(app, api);
registerExternalLLMRefreshHook(app, api);
await app.refreshComboInNodes();
expect(api.refreshExternalLLMModels).toHaveBeenCalledOnce();
expect(originalRefresh).toHaveBeenCalledOnce();
});
});