예제 #1
0
        public void UpdateAsync_NotValidInputData_ReturnsSuccess(string id, string code, string name, double price, string photo)
        {
            var product = new ProductInputModel
            {
                Code  = code,
                Name  = name,
                Price = price,
                Photo = photo
            };

            var productEntity = GetProductEntity(id, GetExistProduct());

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.GetAsync(id)).ReturnsAsync(productEntity);
            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(id, product.Code)).ReturnsAsync(true);

            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            repositoryFactoryMock.Setup(factory => factory.Get()).Returns(repositoryMock.Object);

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            Assert.ThrowsAsync <ArgumentException>(async() => await handler.UpdateAsync(id, product));
        }
예제 #2
0
        public void UpdateAsync_NullInputModel_ThrowsArgumentNullException()
        {
            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            Assert.ThrowsAsync <ArgumentNullException>(async() => await handler.UpdateAsync("23", null));
        }
예제 #3
0
        public void UpdateAsync_NotValidId_ThrowsArgumentNullException(string id)
        {
            var product = GetExistProduct();

            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            Assert.ThrowsAsync <ArgumentException>(async() => await handler.UpdateAsync(id, product));
        }
예제 #4
0
        public async Task UpdateAsync_ProductNotExists_ReturnsProductNotExists(string id)
        {
            var product = GetExistProduct();

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.GetAsync(id)).ReturnsAsync((Product)null);

            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            repositoryFactoryMock.Setup(factory => factory.Get()).Returns(repositoryMock.Object);

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            var result = await handler.UpdateAsync(id, product);

            Assert.AreEqual(EUpdateProductCommandStatus.ProductNotExists, result);
        }
예제 #5
0
        public async Task UpdateAsync_DuplicatedCode_ReturnsFailsBecauseDuplicatedCode(string id)
        {
            var product       = GetExistProduct();
            var productEntity = GetProductEntity(id, product);

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.GetAsync(id)).ReturnsAsync(productEntity);
            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(id, product.Code)).ReturnsAsync(false);

            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            repositoryFactoryMock.Setup(factory => factory.Get()).Returns(repositoryMock.Object);

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            var result = await handler.UpdateAsync(id, product);

            Assert.AreEqual(EUpdateProductCommandStatus.FailsBecauseDuplicatedCode, result);
        }
예제 #6
0
        public async Task UpdateAsync_ValidInputData_ReturnsSuccess(string id)
        {
            var product       = GetExistProduct();
            var productEntity = GetProductEntity(id, product);

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(id, product.Code)).ReturnsAsync(true);
            repositoryMock.Setup(repository => repository.GetAsync(id)).ReturnsAsync(productEntity);
            repositoryMock.Setup(repository => repository.UnitOfWork).Returns(GetUnitOfWork());

            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            repositoryFactoryMock.Setup(factory => factory.Get()).Returns(repositoryMock.Object);

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            var result = await handler.UpdateAsync(id, product);

            Assert.AreEqual(EUpdateProductCommandStatus.Success, result);
        }
예제 #7
0
        public void UpdateAsync_OnRepositoryException_ThrowSameException(string id)
        {
            var product       = GetExistProduct();
            var productEntity = GetProductEntity(id, product);

            var exception = new Exception();

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(id, product.Code)).ReturnsAsync(true);
            repositoryMock.Setup(repository => repository.GetAsync(id)).ReturnsAsync(productEntity);
            repositoryMock.Setup(repository => repository.UpdateAsync(productEntity)).Throws(exception);

            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            repositoryFactoryMock.Setup(factory => factory.Get()).Returns(repositoryMock.Object);

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            var result = Assert.ThrowsAsync(exception.GetType(), async() => await handler.UpdateAsync(id, product));

            Assert.AreSame(exception, result);
        }