feat(FN-2610): merge fusion/fn-2610 (auto-resolved)

- fix(FN-2610): add changeset for health version fix
- test(FN-2610): verify health endpoint returns real package version
- fix(FN-2610): read version from package.json in health endpoint
This commit is contained in:
Fusion
2026-04-26 13:34:28 -07:00
committed by gsxdsm
parent 73a2f1b6ec
commit 7f54e86ce8
3 changed files with 51 additions and 2 deletions

View File

@@ -3,6 +3,9 @@
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import http from "node:http";
import { createHmac } from "node:crypto";
import { readFileSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";
import express from "express";
import { createServer, setupTerminalWebSocket } from "../server.js";
import { toSessionTag } from "../terminal-websocket-diagnostics.js";
@@ -32,6 +35,15 @@ vi.mock("../terminal-service.js", () => {
// Access the mock terminal service
const { __mockTerminalService: mockTerminalService } = await import("../terminal-service.js") as any;
const __dirname = dirname(fileURLToPath(import.meta.url));
const DASHBOARD_PACKAGE_VERSION = (() => {
const packageJsonPath = join(__dirname, "..", "..", "package.json");
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8")) as {
version?: unknown;
};
return typeof packageJson.version === "string" ? packageJson.version : "";
})();
function createMockStore(overrides: Partial<TaskStore> = {}): TaskStore {
return {
getTask: vi.fn(),
@@ -293,11 +305,26 @@ describe("createServer health and headless mode", () => {
expect(res.status).toBe(200);
expect(res.body).toEqual({
status: "ok",
version: expect.any(String),
version: DASHBOARD_PACKAGE_VERSION,
uptime: expect.any(Number),
});
});
it("does not return stale hardcoded 0.4.0 unless package version is 0.4.0", async () => {
const store = createMockStore();
const app = createServer(store);
const res = await GET(app, "/api/health");
expect(res.status).toBe(200);
if (DASHBOARD_PACKAGE_VERSION === "0.4.0") {
expect(res.body.version).toBe("0.4.0");
return;
}
expect(res.body.version).not.toBe("0.4.0");
});
it("serves API routes but no frontend when headless=true", async () => {
const store = createMockStore();
const app = createServer(store, { headless: true });