/** * Issue Constants Tests * * Tests for issue-related constants and helper functions. */ import { STATUS_CONFIG, PRIORITY_CONFIG, STATUS_TRANSITIONS, STATUS_ORDER, PRIORITY_ORDER, SYNC_STATUS_CONFIG, DEFAULT_PAGE_SIZE, MAX_BULK_SELECTION, getAvailableTransitions, getPrimaryTransition, } from '@/features/issues/constants'; import type { IssueStatus } from '@/features/issues/types'; describe('Issue Constants', () => { describe('STATUS_CONFIG', () => { it('has configuration for all statuses', () => { expect(STATUS_CONFIG.open).toBeDefined(); expect(STATUS_CONFIG.in_progress).toBeDefined(); expect(STATUS_CONFIG.in_review).toBeDefined(); expect(STATUS_CONFIG.blocked).toBeDefined(); expect(STATUS_CONFIG.closed).toBeDefined(); }); it('each status has label and color', () => { Object.values(STATUS_CONFIG).forEach((config) => { expect(config.label).toBeDefined(); expect(config.color).toBeDefined(); }); }); }); describe('PRIORITY_CONFIG', () => { it('has configuration for all priorities', () => { expect(PRIORITY_CONFIG.critical).toBeDefined(); expect(PRIORITY_CONFIG.high).toBeDefined(); expect(PRIORITY_CONFIG.medium).toBeDefined(); expect(PRIORITY_CONFIG.low).toBeDefined(); }); it('each priority has label and color', () => { Object.values(PRIORITY_CONFIG).forEach((config) => { expect(config.label).toBeDefined(); expect(config.color).toBeDefined(); }); }); }); describe('STATUS_TRANSITIONS', () => { it('contains expected transitions', () => { expect(STATUS_TRANSITIONS.length).toBeGreaterThan(0); }); it('each transition has from, to, and label', () => { STATUS_TRANSITIONS.forEach((transition) => { expect(transition.from).toBeDefined(); expect(transition.to).toBeDefined(); expect(transition.label).toBeDefined(); }); }); }); describe('getAvailableTransitions', () => { it('returns transitions for open status', () => { const transitions = getAvailableTransitions('open'); expect(transitions.length).toBeGreaterThan(0); expect(transitions.every((t) => t.from === 'open')).toBe(true); }); it('returns transitions for in_progress status', () => { const transitions = getAvailableTransitions('in_progress'); expect(transitions.length).toBeGreaterThan(0); expect(transitions.every((t) => t.from === 'in_progress')).toBe(true); }); it('returns transitions for in_review status', () => { const transitions = getAvailableTransitions('in_review'); expect(transitions.length).toBeGreaterThan(0); expect(transitions.every((t) => t.from === 'in_review')).toBe(true); }); it('returns transitions for blocked status', () => { const transitions = getAvailableTransitions('blocked'); expect(transitions.length).toBeGreaterThan(0); expect(transitions.every((t) => t.from === 'blocked')).toBe(true); }); it('returns transitions for closed status', () => { const transitions = getAvailableTransitions('closed'); expect(transitions.length).toBeGreaterThan(0); expect(transitions.every((t) => t.from === 'closed')).toBe(true); }); it('returns empty array for unknown status', () => { const transitions = getAvailableTransitions('unknown' as IssueStatus); expect(transitions).toEqual([]); }); }); describe('getPrimaryTransition', () => { it('returns first transition for open status', () => { const transition = getPrimaryTransition('open'); expect(transition).toBeDefined(); expect(transition?.from).toBe('open'); }); it('returns first transition for in_progress status', () => { const transition = getPrimaryTransition('in_progress'); expect(transition).toBeDefined(); expect(transition?.from).toBe('in_progress'); }); it('returns first transition for in_review status', () => { const transition = getPrimaryTransition('in_review'); expect(transition).toBeDefined(); expect(transition?.from).toBe('in_review'); }); it('returns first transition for blocked status', () => { const transition = getPrimaryTransition('blocked'); expect(transition).toBeDefined(); expect(transition?.from).toBe('blocked'); }); it('returns first transition for closed status', () => { const transition = getPrimaryTransition('closed'); expect(transition).toBeDefined(); expect(transition?.from).toBe('closed'); }); it('returns undefined for unknown status', () => { const transition = getPrimaryTransition('unknown' as IssueStatus); expect(transition).toBeUndefined(); }); }); describe('STATUS_ORDER', () => { it('contains all statuses in order', () => { expect(STATUS_ORDER).toContain('open'); expect(STATUS_ORDER).toContain('in_progress'); expect(STATUS_ORDER).toContain('in_review'); expect(STATUS_ORDER).toContain('blocked'); expect(STATUS_ORDER).toContain('closed'); }); it('has correct length', () => { expect(STATUS_ORDER.length).toBe(5); }); }); describe('PRIORITY_ORDER', () => { it('contains all priorities in order', () => { expect(PRIORITY_ORDER).toContain('critical'); expect(PRIORITY_ORDER).toContain('high'); expect(PRIORITY_ORDER).toContain('medium'); expect(PRIORITY_ORDER).toContain('low'); }); it('has correct length', () => { expect(PRIORITY_ORDER.length).toBe(4); }); it('has correct order (critical first, low last)', () => { expect(PRIORITY_ORDER[0]).toBe('critical'); expect(PRIORITY_ORDER[PRIORITY_ORDER.length - 1]).toBe('low'); }); }); describe('SYNC_STATUS_CONFIG', () => { it('has configuration for all sync statuses', () => { expect(SYNC_STATUS_CONFIG.synced).toBeDefined(); expect(SYNC_STATUS_CONFIG.pending).toBeDefined(); expect(SYNC_STATUS_CONFIG.conflict).toBeDefined(); expect(SYNC_STATUS_CONFIG.error).toBeDefined(); }); }); describe('Pagination and Bulk Constants', () => { it('DEFAULT_PAGE_SIZE is a positive number', () => { expect(DEFAULT_PAGE_SIZE).toBeGreaterThan(0); }); it('MAX_BULK_SELECTION is a positive number', () => { expect(MAX_BULK_SELECTION).toBeGreaterThan(0); }); }); });