isSuccess())->toBeTrue(); expect($result->isFailure())->toBeFalse(); expect($result->getMessageId())->toBe($messageId); // Cannot call getError() on success result - it throws exception expect($result->getMetadata())->toBeEmpty(); }); it('creates successful result with metadata', function () { $messageId = 'msg_123'; $metadata = ['server' => 'smtp.example.com', 'time' => 1.23]; $result = TransportResult::success($messageId, $metadata); expect($result->isSuccess())->toBeTrue(); expect($result->getMessageId())->toBe($messageId); expect($result->getMetadata())->toBe($metadata); }); it('creates failure result', function () { $error = 'SMTP connection failed'; $result = TransportResult::failure($error); expect($result->isFailure())->toBeTrue(); expect($result->isSuccess())->toBeFalse(); expect($result->getError())->toBe($error); // Cannot call getMessageId() on failure result - it throws exception expect($result->getMetadata())->toBeEmpty(); }); it('creates failure result with metadata', function () { $error = 'Authentication failed'; $metadata = ['smtp_code' => 535, 'server_response' => 'Invalid credentials']; $result = TransportResult::failure($error, $metadata); expect($result->isFailure())->toBeTrue(); expect($result->getError())->toBe($error); expect($result->getMetadata())->toBe($metadata); }); it('handles empty message ID in success result', function () { $result = TransportResult::success(''); expect($result->isSuccess())->toBeTrue(); expect($result->getMessageId())->toBe(''); }); it('handles empty error in failure result', function () { $result = TransportResult::failure(''); expect($result->isFailure())->toBeTrue(); expect($result->getError())->toBe(''); }); it('success and failure are mutually exclusive', function () { $successResult = TransportResult::success('msg_123'); $failureResult = TransportResult::failure('error'); expect($successResult->isSuccess())->toBeTrue(); expect($successResult->isFailure())->toBeFalse(); expect($failureResult->isSuccess())->toBeFalse(); expect($failureResult->isFailure())->toBeTrue(); }); it('preserves metadata correctly', function () { $metadata = [ 'server' => 'smtp.gmail.com', 'port' => 587, 'encryption' => 'tls', 'auth_method' => 'login', 'response_time' => 0.456, ]; $successResult = TransportResult::success('msg_123', $metadata); $failureResult = TransportResult::failure('connection failed', $metadata); expect($successResult->getMetadata())->toBe($metadata); expect($failureResult->getMetadata())->toBe($metadata); }); });