mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
103 lines
3.7 KiB
TypeScript
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');
|
|
});
|
|
});
|
|
});
|