public void DeleteFromExistingPlan()
        {
            var testProduct = new Product()
            {
                ProductName = "Product1", Energy = 50, ProductId = 1
            };
            var dietPlan = new DietPlan()
            {
                Id = 1
            };
            var productInDietPlan = new ProductInDietPlan()
            {
                Product = testProduct, Id = testProduct.ProductId
            };
            var productListForDay = new List <ProductInDietPlan>();

            productListForDay.Add(productInDietPlan);
            var dailyDietPlan = new DailyDietPlan()
            {
                ProductListForDay = productListForDay
            };
            var dailyDietPlanList = new List <DailyDietPlan>()
            {
                dailyDietPlan
            };

            dietPlan.DailyDietPlanList = dailyDietPlanList;
            var listOfDietPlans = new List <DietPlan>()
            {
                dietPlan
            };
            var productFromDB = new ProductInDietPlanDb()
            {
                DailyDietPlanId = dietPlan.Id, ProductId = testProduct.ProductId
            };
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProductById(1)).Returns(testProduct);
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();

            dietPlanRepositoryMock.Setup(repository => repository.ListAllDietPlans("DummyId"))
            .Returns(listOfDietPlans);
            dietPlanRepositoryMock.Setup(repository => repository.ListDailyDietPlans(1)).Returns(dailyDietPlanList);
            dietPlanRepositoryMock.Setup(repository => repository.ListDbProductsInDailyDietPlan(dailyDietPlan)).Returns(new List <ProductInDietPlanDb>()
            {
                productFromDB
            });

            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            sut.DeleteById(testProduct.ProductId, "DummyId");

            dietPlanRepositoryMock.Verify(repository => repository.DeleteProductInPlan(productFromDB));
        }
        public void LoadProducts_GetProductsCalledInRepositoryAndReturnsListOfProducts()
        {
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProducts("DummyId")).Returns(new List <Product>());
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var _sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            _sut.GetAll("DummyId").Should().BeOfType(typeof(List <Product>));
        }
        public void GetProductById_GetProductByIdCalledInRepositoryAndReturnsProduct(int id)
        {
            // arrange
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProductById(id)).Returns(new Product {
                ProductId = id
            });
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            sut.GetById(id).Should().BeOfType(typeof(Product));
        }
        public void CreateProduct_InsertProductCalledInRepository_NewObjectTypeOfProductCreated()
        {
            var product = new Product();
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProducts("DummyId")).Returns(new List <Product> {
                new Product()
            });
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            sut.Create(product, "DummyId");

            productRepositoryMock.Verify(repository => repository.InsertProduct(product));
            sut.Create(product, "DummyId").Should().BeOfType(typeof(Product));
        }
        public void Update_UpdateProductCalledInRepository(int id)
        {
            var product = new Product {
                ProductId = id
            };
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProductById(id)).Returns(product);
            var dietPlanRepositoryMock = new Mock <IDietPlanRepository>();

            dietPlanRepositoryMock.Setup(repo => repo.ListAllDietPlans("DummyId")).Returns(new List <DietPlan>());
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            sut.Update(id, product, "DummyId");

            productRepositoryMock.Verify(repository => repository.UpdateProduct(product));
        }
        public void AddtoFavorites_ProductIsFavouriteIsSetToTrue_UpdateProductCalledInRepository_SaveCalledInRepositor(int id)
        {
            var product = new Product {
                ProductId = id
            };
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProductById(id)).Returns(product);
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            sut.AddToFavorites(product);

            product.IsFavorite.Should().BeTrue();
            productRepositoryMock.Verify(repository => repository.UpdateProduct(product));
            productRepositoryMock.Verify(repository => repository.Save());
        }
        public void SearchByName_ProductIsReturned(string name)
        {
            var ExpectedProduct = new Product {
                ProductName = name
            };
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProducts("DummyId"))
            .Returns(new List <Product> {
                ExpectedProduct
            });
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);

            var actual = sut.SearchByName(name, "DummyId");

            productRepositoryMock.Verify(repository => repository.GetProducts("DummyId"));
            actual.Should().Equal(ExpectedProduct);
        }
        public void SearchByProteins_OneProductInRange_ProductIsReturned(double minprotein, double maxprotein)
        {
            var ExpectedProduct = new Product {
                Protein = 15
            };
            var productRepositoryMock = new Mock <IProductRepository>();

            productRepositoryMock.Setup(repository => repository.GetProducts("DummyId"))
            .Returns(new List <Product> {
                ExpectedProduct
            });
            var dietPlanRepositoryMock   = new Mock <IDietPlanRepository>();
            var productInPlanServiceMock = new Mock <IProductInPlanService>();
            var sut = new ProductService(productRepositoryMock.Object, dietPlanRepositoryMock.Object, productInPlanServiceMock.Object);


            var actual = sut.SearchByProteins(minprotein, maxprotein, "DummyId");

            productRepositoryMock.Verify(repository => repository.GetProducts("DummyId"));
            actual.Should().Equal(ExpectedProduct);
        }