public async Task <IEnumerable <MenuItemDto> > GetAllMenuItemsWithFilters(FilterDto filters) { ISpecification <MenuItem> specification; var mealType = filters.MealType; var allergens = filters.Allergens; if (!(mealType == MealType.Unknown) && allergens != null && allergens.Any()) { var mealTypeSpec = new MenuItemForMealTypeSpecification(mealType); var excludeAllergensSpec = new MenuItemForAllergensSpecification(allergens).Not(); specification = mealTypeSpec.And(excludeAllergensSpec); } else if (allergens != null && allergens.Any()) { specification = new MenuItemForAllergensSpecification(allergens).Not(); } else { specification = new MenuItemForMealTypeSpecification(mealType); } var menuItems = await _menuItemRepository.All(specification); var menuItemDtos = _mapper.Map <IEnumerable <MenuItemDto> >(menuItems); return(menuItemDtos); }
public void IsSatisfiedBy_AppendsToBuilderAndAddsParameters() { var spec = new MenuItemForAllergensSpecification(Allergens); var builder = new StringBuilder(); var parameters = new Dictionary <string, object>(); spec.IsSatisfiedBy(builder, parameters); builder.ToString().Should().Be("[Id] IN (SELECT MenuItemId FROM Allergens WHERE AllergenType IN @allergens)"); parameters["allergens"].Should().BeEquivalentTo(Allergens.Select(x => x.ToString())); }
public void IsSatisfiedBy_ReturnsFalse() { var spec = new MenuItemForAllergensSpecification(Allergens); var menuItem = new MenuItem { Allergens = new List <Allergen> { new Allergen { AllergenType = AllergenType.Crustaceans, }, }, }; var result = spec.IsSatisfiedBy(menuItem); result.Should().BeFalse(); }
public void IsSatisfiedBy_ReturnsTrue() { var spec = new MenuItemForAllergensSpecification(Allergens); var menuItem = new MenuItem { Allergens = new List <Allergen> { new Allergen { AllergenType = AllergenType.Soya, }, new Allergen { AllergenType = AllergenType.Celery, }, }, }; var result = spec.IsSatisfiedBy(menuItem); result.Should().BeTrue(); }