Files
automaker/apps/server/tests/unit/routes/app-spec/common.test.ts
SuperComboGamer 8d578558ff style: fix formatting with Prettier
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 20:31:57 -05:00

103 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');
});
});
});