예제 #1
0
        public void CreateAsync_NullInputModel_ThrowsArgumentNullException()
        {
            var repositoryFactoryMock = new Mock <IProductRepositoryFactory>();

            var handler = new ProductCommandsHandler(repositoryFactoryMock.Object);

            Assert.ThrowsAsync <ArgumentNullException>(async() => await handler.CreateAsync(null));
        }
예제 #2
0
        public async Task CreateAsync_DuplicatedCode_ReturnsFalse()
        {
            var product = GetNewProduct();

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(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.CreateAsync(product);

            Assert.IsFalse(result);
        }
예제 #3
0
        public async Task CreateAsync_ValidInputData_ReturnsTrue()
        {
            var product = GetNewProduct();

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(product.Code)).ReturnsAsync(true);
            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.CreateAsync(product);

            Assert.IsTrue(result);
        }
예제 #4
0
        public void CreateAsync_OnRepositoryException_ThrowSameException()
        {
            var product   = GetNewProduct();
            var exception = new Exception();

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(product.Code)).ReturnsAsync(true);
            repositoryMock.Setup(repository => repository.Add(It.IsAny <Product>())).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.CreateAsync(product));

            Assert.AreSame(exception, result);
        }
예제 #5
0
        public void CreateAsync_NotValidInputData_ReturnsFalse(string code, string name, double price, string photo)
        {
            var product = new ProductInputModel
            {
                Code  = code,
                Name  = name,
                Price = price,
                Photo = photo
            };

            var repositoryMock = new Mock <IProductRepository>();

            repositoryMock.Setup(repository => repository.CheckIfProductCodeUniqueAsync(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.CreateAsync(product));
        }