public async Task CategoriesPerProduct_Called_ReturnsExpectedCategories()
        {
            // Arrange
            Category category1 = new Category()
            {
                CategoryID = 1, Name = "cat1"
            };
            Category category2 = new Category()
            {
                CategoryID = 2, Name = "cat2"
            };
            Category category3 = new Category()
            {
                CategoryID = 3, Name = "cat3"
            };
            Product fakeProduct1 = new Product()
            {
                Categories = new List <Category>()
                {
                    category1, category2
                }
            };
            List <Category> fakeCategoryList = new List <Category>()
            {
                category1, category2, category3
            };

            _productRepository.Setup(p => p.GetByIDAsync(1)).ReturnsAsync(fakeProduct1);
            _categoryRepository.Setup(p => p.GetAllAsync()).ReturnsAsync(fakeCategoryList);

            ProductController controller = new ProductController(_productRepository.Object, _categoryRepository.Object, _orderRepository.Object);
            // Act
            JsonResult result = await controller.CategoriesPerProduct(1) as JsonResult;

            List <ProductCategoryViewModel> resultPCVM = result.Data as List <ProductCategoryViewModel>;

            //Assert
            Assert.IsTrue(resultPCVM.Count == 2);
            Assert.IsTrue(resultPCVM[0].CategoryName == "cat1");
            Assert.IsTrue(resultPCVM[1].CategoryName == "cat2");
        }