import { describe, expect, it } from 'vitest'; import { validateSupportTicketStatusTransition } from './support-ticket'; describe('validateSupportTicketStatusTransition', () => { it('allows DEVELOPING -> TESTING', () => { expect( validateSupportTicketStatusTransition('DEVELOPING', 'TESTING', { linkedTaskCount: 1, isSuperAdmin: true, }).ok, ).toBe(true); }); it('blocks PENDING_REVIEW -> DEVELOPING without tasks', () => { expect( validateSupportTicketStatusTransition('PENDING_REVIEW', 'DEVELOPING', { linkedTaskCount: 0, isSuperAdmin: true, }).ok, ).toBe(false); }); it('blocks rollback PASSED -> DEVELOPING', () => { expect( validateSupportTicketStatusTransition('PASSED', 'DEVELOPING', { linkedTaskCount: 1, isSuperAdmin: true, }).ok, ).toBe(false); }); it('allows PASSED -> PUBLISHED', () => { expect( validateSupportTicketStatusTransition('PASSED', 'PUBLISHED', { linkedTaskCount: 1, isSuperAdmin: true, }).ok, ).toBe(true); }); it('requires super admin and reason for REJECTED', () => { expect( validateSupportTicketStatusTransition('DEVELOPING', 'REJECTED', { linkedTaskCount: 1, isSuperAdmin: false, rejectReason: 'x', }).ok, ).toBe(false); expect( validateSupportTicketStatusTransition('DEVELOPING', 'REJECTED', { linkedTaskCount: 1, isSuperAdmin: true, rejectReason: '', }).ok, ).toBe(false); }); });