Files
automaker/apps/server/tests/unit/routes/app-spec/common.test.ts
Cody Seibert 063224966c refactor: update unit tests for setRunningState to use new state management
- Replaced direct access to state variables with calls to the new getSpecRegenerationStatus function in unit tests for setRunningState.
- This change improves encapsulation and ensures that tests reflect the updated state management logic.
2025-12-14 18:24:29 -05:00

109 lines
3.7 KiB
TypeScript

import { describe, it, expect, beforeEach } from "vitest";
import {
setRunningState,
getErrorMessage,
getSpecRegenerationStatus,
} from "@/routes/app-spec/common.js";
describe("app-spec/common.ts", () => {
beforeEach(() => {
// Reset state before each test
setRunningState(false, null);
});
describe("setRunningState", () => {
it("should set isRunning to true when running is true", () => {
setRunningState(true);
expect(getSpecRegenerationStatus().isRunning).toBe(true);
});
it("should set isRunning to false when running is false", () => {
setRunningState(true);
setRunningState(false);
expect(getSpecRegenerationStatus().isRunning).toBe(false);
});
it("should set currentAbortController when provided", () => {
const controller = new AbortController();
setRunningState(true, controller);
expect(getSpecRegenerationStatus().currentAbortController).toBe(
controller
);
});
it("should set currentAbortController to null when not provided", () => {
const controller = new AbortController();
setRunningState(true, controller);
setRunningState(false);
expect(getSpecRegenerationStatus().currentAbortController).toBe(null);
});
it("should set currentAbortController to null when explicitly passed null", () => {
const controller = new AbortController();
setRunningState(true, controller);
setRunningState(true, null);
expect(getSpecRegenerationStatus().currentAbortController).toBe(null);
});
it("should update state multiple times correctly", () => {
const controller1 = new AbortController();
const controller2 = new AbortController();
setRunningState(true, controller1);
expect(getSpecRegenerationStatus().isRunning).toBe(true);
expect(getSpecRegenerationStatus().currentAbortController).toBe(
controller1
);
setRunningState(true, controller2);
expect(getSpecRegenerationStatus().isRunning).toBe(true);
expect(getSpecRegenerationStatus().currentAbortController).toBe(
controller2
);
setRunningState(false, null);
expect(getSpecRegenerationStatus().isRunning).toBe(false);
expect(getSpecRegenerationStatus().currentAbortController).toBe(null);
});
});
describe("getErrorMessage", () => {
it("should return message from Error instance", () => {
const error = new Error("Test error message");
expect(getErrorMessage(error)).toBe("Test error message");
});
it("should return 'Unknown error' for non-Error objects", () => {
expect(getErrorMessage("string error")).toBe("Unknown error");
expect(getErrorMessage(123)).toBe("Unknown error");
expect(getErrorMessage(null)).toBe("Unknown error");
expect(getErrorMessage(undefined)).toBe("Unknown error");
expect(getErrorMessage({})).toBe("Unknown error");
expect(getErrorMessage([])).toBe("Unknown error");
});
it("should return message from Error with empty message", () => {
const error = new Error("");
expect(getErrorMessage(error)).toBe("");
});
it("should handle Error objects with custom properties", () => {
const error = new Error("Base message");
(error as any).customProp = "custom value";
expect(getErrorMessage(error)).toBe("Base message");
});
it("should handle Error objects created with different constructors", () => {
class CustomError extends Error {
constructor(message: string) {
super(message);
this.name = "CustomError";
}
}
const customError = new CustomError("Custom error message");
expect(getErrorMessage(customError)).toBe("Custom error message");
});
});
});