namespace TaxBaik.Application.Tests; using TaxBaik.Application.Services; using TaxBaik.Domain.Entities; using TaxBaik.Domain.Interfaces; using Xunit; public class InquiryServiceTests { [Fact] public async Task UpdateStatusAsync_WhenStatusIsInvalid_ThrowsValidationException() { var service = new InquiryService(new FakeInquiryRepository()); await Assert.ThrowsAsync(() => service.UpdateStatusAsync(1, "invalid")); } [Fact] public async Task SubmitAsync_StoresEmailAndNewStatus() { var repository = new FakeInquiryRepository(); var service = new InquiryService(repository); await service.SubmitAsync("홍길동", "010-1234-5678", "기장", "문의합니다.", "user@example.com"); Assert.Equal("user@example.com", repository.Inquiries.Single().Email); Assert.Equal("new", repository.Inquiries.Single().Status); } private sealed class FakeInquiryRepository : IInquiryRepository { public List Inquiries { get; } = []; public Task CreateAsync(Inquiry inquiry, CancellationToken cancellationToken = default) { inquiry.Id = Inquiries.Count + 1; Inquiries.Add(inquiry); return Task.FromResult(inquiry.Id); } public Task GetByIdAsync(int id, CancellationToken cancellationToken = default) => Task.FromResult(Inquiries.FirstOrDefault(x => x.Id == id)); public Task<(IEnumerable Items, int Total)> GetPagedAsync( int page, int pageSize, string? status = null, CancellationToken cancellationToken = default) { var items = status == null ? Inquiries : Inquiries.Where(x => x.Status == status).ToList(); return Task.FromResult<(IEnumerable, int)>((items, items.Count())); } public Task UpdateStatusAsync(int id, string status, CancellationToken cancellationToken = default) { var inquiry = Inquiries.FirstOrDefault(x => x.Id == id); if (inquiry != null) inquiry.Status = status; return Task.CompletedTask; } } }