import { describe, it, expect } from 'vitest'; import { SessionState } from '../../../../src/packages/domain/value-objects/SessionState'; describe('SessionState Value Object', () => { describe('create', () => { it('should create PENDING state', () => { const state = SessionState.create('PENDING'); expect(state.value).toBe('PENDING'); }); it('should create IN_PROGRESS state', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.value).toBe('IN_PROGRESS'); }); it('should create PAUSED state', () => { const state = SessionState.create('PAUSED'); expect(state.value).toBe('PAUSED'); }); it('should create COMPLETED state', () => { const state = SessionState.create('COMPLETED'); expect(state.value).toBe('COMPLETED'); }); it('should create FAILED state', () => { const state = SessionState.create('FAILED'); expect(state.value).toBe('FAILED'); }); it('should create STOPPED_AT_STEP_18 state', () => { const state = SessionState.create('STOPPED_AT_STEP_18'); expect(state.value).toBe('STOPPED_AT_STEP_18'); }); it('should throw error for invalid state', () => { expect(() => SessionState.create('INVALID' as any)).toThrow('Invalid session state'); }); it('should throw error for empty string', () => { expect(() => SessionState.create('' as any)).toThrow('Invalid session state'); }); }); describe('equals', () => { it('should return true for equal states', () => { const state1 = SessionState.create('PENDING'); const state2 = SessionState.create('PENDING'); expect(state1.equals(state2)).toBe(true); }); it('should return false for different states', () => { const state1 = SessionState.create('PENDING'); const state2 = SessionState.create('IN_PROGRESS'); expect(state1.equals(state2)).toBe(false); }); }); describe('isPending', () => { it('should return true for PENDING state', () => { const state = SessionState.create('PENDING'); expect(state.isPending()).toBe(true); }); it('should return false for IN_PROGRESS state', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.isPending()).toBe(false); }); }); describe('isInProgress', () => { it('should return true for IN_PROGRESS state', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.isInProgress()).toBe(true); }); it('should return false for PENDING state', () => { const state = SessionState.create('PENDING'); expect(state.isInProgress()).toBe(false); }); }); describe('isCompleted', () => { it('should return true for COMPLETED state', () => { const state = SessionState.create('COMPLETED'); expect(state.isCompleted()).toBe(true); }); it('should return false for IN_PROGRESS state', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.isCompleted()).toBe(false); }); }); describe('isFailed', () => { it('should return true for FAILED state', () => { const state = SessionState.create('FAILED'); expect(state.isFailed()).toBe(true); }); it('should return false for COMPLETED state', () => { const state = SessionState.create('COMPLETED'); expect(state.isFailed()).toBe(false); }); }); describe('isStoppedAtStep18', () => { it('should return true for STOPPED_AT_STEP_18 state', () => { const state = SessionState.create('STOPPED_AT_STEP_18'); expect(state.isStoppedAtStep18()).toBe(true); }); it('should return false for COMPLETED state', () => { const state = SessionState.create('COMPLETED'); expect(state.isStoppedAtStep18()).toBe(false); }); }); describe('canTransitionTo', () => { it('should allow transition from PENDING to IN_PROGRESS', () => { const state = SessionState.create('PENDING'); expect(state.canTransitionTo(SessionState.create('IN_PROGRESS'))).toBe(true); }); it('should allow transition from IN_PROGRESS to PAUSED', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.canTransitionTo(SessionState.create('PAUSED'))).toBe(true); }); it('should allow transition from IN_PROGRESS to STOPPED_AT_STEP_18', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.canTransitionTo(SessionState.create('STOPPED_AT_STEP_18'))).toBe(true); }); it('should allow transition from PAUSED to IN_PROGRESS', () => { const state = SessionState.create('PAUSED'); expect(state.canTransitionTo(SessionState.create('IN_PROGRESS'))).toBe(true); }); it('should not allow transition from COMPLETED to IN_PROGRESS', () => { const state = SessionState.create('COMPLETED'); expect(state.canTransitionTo(SessionState.create('IN_PROGRESS'))).toBe(false); }); it('should not allow transition from FAILED to IN_PROGRESS', () => { const state = SessionState.create('FAILED'); expect(state.canTransitionTo(SessionState.create('IN_PROGRESS'))).toBe(false); }); it('should not allow transition from STOPPED_AT_STEP_18 to IN_PROGRESS', () => { const state = SessionState.create('STOPPED_AT_STEP_18'); expect(state.canTransitionTo(SessionState.create('IN_PROGRESS'))).toBe(false); }); }); describe('isTerminal', () => { it('should return true for COMPLETED state', () => { const state = SessionState.create('COMPLETED'); expect(state.isTerminal()).toBe(true); }); it('should return true for FAILED state', () => { const state = SessionState.create('FAILED'); expect(state.isTerminal()).toBe(true); }); it('should return true for STOPPED_AT_STEP_18 state', () => { const state = SessionState.create('STOPPED_AT_STEP_18'); expect(state.isTerminal()).toBe(true); }); it('should return false for PENDING state', () => { const state = SessionState.create('PENDING'); expect(state.isTerminal()).toBe(false); }); it('should return false for IN_PROGRESS state', () => { const state = SessionState.create('IN_PROGRESS'); expect(state.isTerminal()).toBe(false); }); it('should return false for PAUSED state', () => { const state = SessionState.create('PAUSED'); expect(state.isTerminal()).toBe(false); }); }); });