using LiteCharms.Features.MidrandBooks.Customers; using LiteCharms.Features.MidrandBooks.Customers.Models; using LiteCharms.Features.Tests.Common; namespace LiteCharms.Features.MidrandBooks.Tests; public class CustomerServiceFeatureTests(Fixture fixture) : IClassFixture { private readonly CustomerService customerService = fixture.Services.GetRequiredService(); [IntegrationFact] public async Task CreateCustomerAsync_ShouldReturn_ResultWithCustomerId() { var request = new CreateCustomer { Company = "Book Lovers", Email = "hank@booklovers.com", Phone = "555 1245 8577", Website = "https://www.booklovers.com" }; var result = await customerService.CreateCustomerAsync(request, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.True(result.Value > 0); } [IntegrationFact] public async Task CreateCustomerContactAsync_ShouldReturn_ResultWithCustomerContactId() { var request = new CreateCustomerContact { Name = "Sipho", LastName = "Madlanga", Phone = "0710857365", Email = "sipho@madlanga.africa", Type = ContactTypes.Business }; var result = await customerService.CreateCustomerContactAsync(1, request, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.True(result.Value > 0); } [IntegrationFact] public async Task CreateCustomerAddressAsync_ShouldReturn_ResultWithCustomerAddressId() { var request = new CreateCustomerAddress { Name = "Business", BuildingType = AddressBuildingTypes.MixedUse, Type = AddressType.Shipping, Street = "123 Building 4, XYZ Suburb, Some Region", City = "Johannesburg", State = "Gauteng", Country = "South Africa", IsPrimary = true, Enabled = true, PostalCode = "12345" }; var result = await customerService.CreateCustomerAddressAsync(1, request, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.True(result.Value > 0); } [IntegrationFact] public async Task UpdateCustomerAsync_ShouldReturn_ResultWithSuccess() { var request = new UpdateCustomer { Company = "Book Lovers", Email = "hank@booklovers.com", Phone = "555 1245 8578", Website = "https://www.booklovers.com" }; var result = await customerService.UpdateCustomerAsync(1, request, fixture.CancellationToken); Assert.True(result.IsSuccess); } [IntegrationFact] public async Task UpdateCustomerContactAsync_ShouldReturn_ResultWithSuccess() { var request = new UpdateCustomerContact { Name = "Sipho", LastName = "Madlanga", Phone = "0710857366", Email = "sipho@madlanga.africa", Type = ContactTypes.Business }; var result = await customerService.UpdateCustomerContactAsync(1, request, fixture.CancellationToken); Assert.True(result.IsSuccess); } [IntegrationFact] public async Task UpdateCustomerAddressAsync_ShouldReturn_ResultWithSuccess() { var request = new UpdateCustomerAddress { Name = "Business", BuildingType = AddressBuildingTypes.MixedUse, Type = AddressType.Shipping, Street = "123 Building 4, XYZ Suburb, Some Region", City = "Johannesburg", State = "Gauteng", Country = "South Africa", IsPrimary = true, Enabled = true, PostalCode = "12346" }; var result = await customerService.UpdateCustomerAddressAsync(1, request, fixture.CancellationToken); Assert.True(result.IsSuccess); } [IntegrationFact] public async Task UpdateCustomerStatusAsync_ShouldReturn_ResultWithSuccess() { var result = await customerService.UpdateCustomerStatusAsync(1, true, fixture.CancellationToken); Assert.True(result.IsSuccess); } [IntegrationFact] public async Task UpdateCustomerContactStatusAsync_ShouldReturn_ResultWithSuccess() { var result = await customerService.UpdateCustomerContactStatusAsync(1, true, true, fixture.CancellationToken); Assert.True(result.IsSuccess); } [IntegrationFact] public async Task UpdateCustomerAddressStatusAsync_ShouldReturn_ResultWithSuccess() { var result = await customerService.UpdateCustomerAddressStatusAsync(1, true, true, fixture.CancellationToken); Assert.True(result.IsSuccess); } [IntegrationFact] public async Task GetCustomersAsync_ShouldReturn_ResultWithCustomerList() { var result = await customerService.GetCustomersAsync(fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.NotEmpty(result.Value); } [IntegrationFact] public async Task GetCustomerContactsAsync_ShouldReturn_ResultWithCustomerContactList() { var result = await customerService.GetCustomerContactsAsync(1, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.NotEmpty(result.Value); } [IntegrationFact] public async Task GetCustomerAddressesAsync_ShouldReturn_ResultWithCustomerAddressList() { var result = await customerService.GetCustomerAddressesAsync(1, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.NotEmpty(result.Value); } [IntegrationFact] public async Task GetCustomerAsync_ShouldReturn_ResultWithCustomer() { var result = await customerService.GetCustomerAsync(1, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.NotNull(result.Value); } [IntegrationFact] public async Task GetCustomerContactAsync_ShouldReturn_ResultWithCustomerContact() { var result = await customerService.GetCustomerContactsAsync(1, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.NotNull(result.Value); } [IntegrationFact] public async Task GetCustomerAddressAsync_ShouldReturn_ResultWithCustomerAddress() { var result = await customerService.GetCustomerAddressAsync(1, fixture.CancellationToken); Assert.True(result.IsSuccess); Assert.NotNull(result.Value); } }