diff --git a/TickAPI/TickAPI.Tests/Events/Controllers/EventsControllerTests.cs b/TickAPI/TickAPI.Tests/Events/Controllers/EventsControllerTests.cs index 60e6cc7..69b4f4e 100644 --- a/TickAPI/TickAPI.Tests/Events/Controllers/EventsControllerTests.cs +++ b/TickAPI/TickAPI.Tests/Events/Controllers/EventsControllerTests.cs @@ -20,7 +20,7 @@ namespace TickAPI.Tests.Events.Controllers; public class EventsControllerTests { - private readonly EventFiltersDto _emptyFilters = new EventFiltersDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); + private readonly EventFiltersDto _emptyFilters = new EventFiltersDto(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null); [Fact] public async Task CreateEvent_WhenDataIsValid_ShouldReturnSuccess() diff --git a/TickAPI/TickAPI.Tests/Events/Filters/EventFilterApplierTests.cs b/TickAPI/TickAPI.Tests/Events/Filters/EventFilterApplierTests.cs index 7657c21..b836508 100644 --- a/TickAPI/TickAPI.Tests/Events/Filters/EventFilterApplierTests.cs +++ b/TickAPI/TickAPI.Tests/Events/Filters/EventFilterApplierTests.cs @@ -40,7 +40,9 @@ public void ApplyFilters_WithName_ShouldCallFilterByName() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -72,7 +74,9 @@ public void ApplyFilters_WithDescription_ShouldCallFilterByDescription() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -105,7 +109,9 @@ public void ApplyFilters_WithStartDate_ShouldCallFilterByStartDate() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -138,7 +144,9 @@ public void ApplyFilters_WithMinStartDate_ShouldCallFilterByMinStartDate() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -171,7 +179,9 @@ public void ApplyFilters_WithMaxStartDate_ShouldCallFilterByMaxStartDate() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -204,7 +214,9 @@ public void ApplyFilters_WithEndDate_ShouldCallFilterByEndDate() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -237,7 +249,9 @@ public void ApplyFilters_WithMinEndDate_ShouldCallFilterByMinEndDate() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -270,7 +284,9 @@ public void ApplyFilters_WithMaxEndDate_ShouldCallFilterByMaxEndDate() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -303,7 +319,9 @@ public void ApplyFilters_WithMinPrice_ShouldCallFilterByMinPrice() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -336,7 +354,9 @@ public void ApplyFilters_WithMaxPrice_ShouldCallFilterByMaxPrice() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -369,7 +389,9 @@ public void ApplyFilters_WithMinAge_ShouldCallFilterByMinAge() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -402,7 +424,9 @@ public void ApplyFilters_WithMaxMinimumAge_ShouldCallFilterByMaxMinimumAge() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -434,7 +458,9 @@ public void ApplyFilters_WithAddressCountry_ShouldCallFilterByAddressCountry() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -466,7 +492,9 @@ public void ApplyFilters_WithAddressCity_ShouldCallFilterByAddressCity() AddressCity: "Warsaw", AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -498,7 +526,9 @@ public void ApplyFilters_WithAddressStreetOnly_ShouldCallFilterByAddressStreet() AddressCity: null, AddressStreet: "Marszałkowska", HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -531,7 +561,9 @@ public void ApplyFilters_WithAddressStreetAndHouseNumber_ShouldCallFilterByAddre AddressCity: null, AddressStreet: "Marszałkowska", HouseNumber: houseNumber, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -565,7 +597,9 @@ public void ApplyFilters_WithCompleteAddress_ShouldCallFilterByAddressStreet() AddressCity: null, AddressStreet: "Marszałkowska", HouseNumber: houseNumber, - FlatNumber: flatNumber + FlatNumber: flatNumber, + PostalCode: null, + CategoriesNames: null ); // Act @@ -575,6 +609,75 @@ public void ApplyFilters_WithCompleteAddress_ShouldCallFilterByAddressStreet() _mockEventFilter.Verify(ef => ef.FilterByAddressStreet(filters.AddressStreet!, filters.HouseNumber, filters.FlatNumber), Times.Once); _mockEventFilter.Verify(ef => ef.GetEvents(), Times.Once); } + + [Fact] + public void ApplyFilters_WithPostalCode_ShouldCallFilterByAddressPostalCode() + { + // Arrange + var filters = new EventFiltersDto( + Name: null, + Descritpion: null, + StartDate: null, + MinStartDate: null, + MaxStartDate: null, + EndDate: null, + MinEndDate: null, + MaxEndDate: null, + MinPrice: null, + MaxPrice: null, + MinAge: null, + MaxMinimumAge: null, + AddressCountry: null, + AddressCity: null, + AddressStreet: null, + HouseNumber: null, + FlatNumber: null, + PostalCode: "00-001", + CategoriesNames: null + ); + + // Act + _eventFilterApplier.ApplyFilters(filters); + + // Assert + _mockEventFilter.Verify(ef => ef.FilterByAddressPostalCode(filters.PostalCode!), Times.Once); + _mockEventFilter.Verify(ef => ef.GetEvents(), Times.Once); + } + + [Fact] + public void ApplyFilters_WithCategoriesNames_ShouldCallFilterByCategoriesNames() + { + // Arrange + var categoriesNames = new List { "Concert", "Festival", "Exhibition" }; + var filters = new EventFiltersDto( + Name: null, + Descritpion: null, + StartDate: null, + MinStartDate: null, + MaxStartDate: null, + EndDate: null, + MinEndDate: null, + MaxEndDate: null, + MinPrice: null, + MaxPrice: null, + MinAge: null, + MaxMinimumAge: null, + AddressCountry: null, + AddressCity: null, + AddressStreet: null, + HouseNumber: null, + FlatNumber: null, + PostalCode: null, + CategoriesNames: categoriesNames + ); + + // Act + _eventFilterApplier.ApplyFilters(filters); + + // Assert + _mockEventFilter.Verify(ef => ef.FilterByCategoriesNames(filters.CategoriesNames!), Times.Once); + _mockEventFilter.Verify(ef => ef.GetEvents(), Times.Once); + } [Fact] public void ApplyFilters_WithMultipleFilters_ShouldCallAllRelevantFilters() @@ -600,7 +703,9 @@ public void ApplyFilters_WithMultipleFilters_ShouldCallAllRelevantFilters() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act @@ -641,7 +746,9 @@ public void ApplyFilters_WithNoFilters_ShouldOnlyCallGetEvents() AddressCity: null, AddressStreet: null, HouseNumber: null, - FlatNumber: null + FlatNumber: null, + PostalCode: null, + CategoriesNames: null ); // Act diff --git a/TickAPI/TickAPI/Events/DTOs/Request/EventFiltersDto.cs b/TickAPI/TickAPI/Events/DTOs/Request/EventFiltersDto.cs index 91e52cc..7eba343 100644 --- a/TickAPI/TickAPI/Events/DTOs/Request/EventFiltersDto.cs +++ b/TickAPI/TickAPI/Events/DTOs/Request/EventFiltersDto.cs @@ -17,5 +17,7 @@ public record EventFiltersDto( string? AddressCity, string? AddressStreet, uint? HouseNumber, - uint? FlatNumber + uint? FlatNumber, + string? PostalCode, + List? CategoriesNames ); diff --git a/TickAPI/TickAPI/Events/Filters/EventFilterApplier.cs b/TickAPI/TickAPI/Events/Filters/EventFilterApplier.cs index 7347465..a9f890b 100644 --- a/TickAPI/TickAPI/Events/Filters/EventFilterApplier.cs +++ b/TickAPI/TickAPI/Events/Filters/EventFilterApplier.cs @@ -31,7 +31,9 @@ public EventFilterApplier(IEventFilter eventFilter) { f => !string.IsNullOrEmpty(f.AddressStreet), f => _eventFilter.FilterByAddressStreet( f.AddressStreet!, f.HouseNumber, - f.FlatNumber) } + f.FlatNumber) }, + {f => !string.IsNullOrEmpty(f.PostalCode), f => _eventFilter.FilterByAddressPostalCode(f.PostalCode!)}, + {f => f.CategoriesNames is { Count: > 0 }, f => _eventFilter.FilterByCategoriesNames(f.CategoriesNames!)} }; }