import { describe, it, expect } from 'vitest'; import { acceptMatchRequest, type AcceptMatchRequestInput, type MatchRequestStatus } from '../accept-match-request.js'; function validInput(overrides: Partial = {}): AcceptMatchRequestInput { return { currentStatus: 'OPEN', actorUserId: 'operator-1', ...overrides, }; } describe('acceptMatchRequest', () => { // U013: 매칭 요청 수락 it('U013-1: OPEN 상태에서 수락 가능', () => { const result = acceptMatchRequest(validInput({ currentStatus: 'OPEN' })); expect(result.ok).toBe(true); if (result.ok) { expect(result.value.status).toBe('ACCEPTED'); } }); it('U013-2: REVIEWING 상태에서 수락 가능', () => { const result = acceptMatchRequest(validInput({ currentStatus: 'REVIEWING' })); expect(result.ok).toBe(true); if (result.ok) { expect(result.value.status).toBe('ACCEPTED'); } }); // U013: 수락 불가능한 상태들 const nonAcceptableStatuses: MatchRequestStatus[] = [ 'ACCEPTED', 'REJECTED', 'CONTRACTING', 'EXPIRED', 'CANCELLED', 'COMPLETED', ]; nonAcceptableStatuses.forEach((status) => { it(`U013-3: ${status} 상태에서는 수락 불가`, () => { const result = acceptMatchRequest(validInput({ currentStatus: status })); expect(result.ok).toBe(false); if (!result.ok) { expect(result.error.code).toBe('INVALID_STATUS_TRANSITION'); expect(result.error.details?.currentStatus).toBe(status); } }); }); });