public async Task GetListAsync_Success <TKey>(
            TKey defaultKey,
            Collection <FakeDto <TKey> > list,
            Collection <FakeDto <TKey> > expectedResult)
        {
            // Arrange
            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            mockRepository
            .Setup(
                x => x.GetListAsync <FakeDto <TKey> >(null)
                )
            .ReturnsAsync(list);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act
            var result = await businessService.GetListAsync();

            // Assert
            Assert.NotNull(defaultKey);

            mockRepository
            .Verify(
                x => x.GetListAsync <FakeDto <TKey> >(null),
                Times.Once
                );

            Assert.Equal(expectedResult, result, new FakeDtoEqualityComparer <TKey>());
        }
Ejemplo n.º 2
0
        public async Task GetAsync_Success <TKey>(
            TKey defaultKey,
            FakeDto <TKey> item,
            FakeDto <TKey> expectedResult)
        {
            // Arrange
            var filterExpression = FilterExpressionExtensions.CreateIdFilterExpression <FakeEntity <TKey>, TKey>(defaultKey);

            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            mockRepository
            .Setup(
                x => x.GetAsync <FakeDto <TKey> >(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    )
                )
            .ReturnsAsync(item);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act
            var result = await businessService.GetAsync(defaultKey);

            // Assert
            mockRepository
            .Verify(
                x => x.GetAsync <FakeDto <TKey> >(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    ),
                Times.Once
                );

            Assert.Equal(expectedResult, result, new FakeDtoEqualityComparer <TKey>());
        }
        public async Task AddAsync_ThrowsArgumentNullException <TKey>(
            TKey defaultKey)
        {
            // Arrange
            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act & Assert
            Assert.NotNull(defaultKey);

            var exception = await Assert.ThrowsAsync <ArgumentNullException>(
                () => businessService.AddAsync(null)
                );

            Assert.Equal("item", exception.ParamName);
        }
        public async Task AddAsync_Success <TKey>(
            TKey defaultKey,
            FakeAddDto item,
            FakeEntity <TKey> entity,
            FakeDto <TKey> expectedResult)
        {
            // Arrange
            Expression <Action <ILogger> > loggerExpressionAdd = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     $"Add item: {item}"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger.Setup(loggerExpressionAdd);

            _mockBusinessMapper
            .Setup(
                x => x.Map <FakeAddDto, FakeEntity <TKey> >(item)
                )
            .Returns(entity);

            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            mockRepository
            .Setup(
                x => x.InsertAsync(entity)
                )
            .ReturnsAsync(entity);

            Expression <Action <ILogger> > loggerExpressionSave = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     "Save changes"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger
            .Setup(x => x.IsEnabled(LogLevel.Information))
            .Returns(true);
            _mockLogger.Setup(loggerExpressionSave);

            _mockUnitOfWork
            .Setup(
                x => x.CommitAsync()
                )
            .ReturnsAsync(1);

            _mockBusinessMapper
            .Setup(
                x => x.Map <FakeEntity <TKey>, FakeDto <TKey> >(entity)
                )
            .Returns(expectedResult);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act
            var result = await businessService.AddAsync(item);

            // Assert
            Assert.NotNull(defaultKey);

            _mockLogger.Verify(loggerExpressionAdd, Times.Once);

            _mockBusinessMapper
            .Verify(
                x => x.Map <FakeAddDto, FakeEntity <TKey> >(item),
                Times.Once
                );

            mockRepository
            .Verify(
                x => x.InsertAsync(entity),
                Times.Once
                );

            _mockLogger.Verify(loggerExpressionSave, Times.Once);

            _mockUnitOfWork
            .Verify(
                x => x.CommitAsync(),
                Times.Once
                );

            _mockBusinessMapper
            .Verify(
                x => x.Map <FakeEntity <TKey>, FakeDto <TKey> >(entity),
                Times.Once
                );

            Assert.Equal(expectedResult, result, new FakeDtoEqualityComparer <TKey>());
        }
Ejemplo n.º 5
0
        public async Task EditAsync_WhenNotFound_ReturnsNull <TKey>(
            TKey defaultKey)
        {
            // Arrange
            var item = new FakeEditDto <TKey>
            {
                Id = defaultKey
            };

            Expression <Action <ILogger> > loggerExpressionEdit = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     $"Edit item: {item}"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger
            .Setup(x => x.IsEnabled(LogLevel.Information))
            .Returns(true);
            _mockLogger
            .Setup(x => x.IsEnabled(LogLevel.Warning))
            .Returns(true);
            _mockLogger.Setup(loggerExpressionEdit);

            var filterExpression = FilterExpressionExtensions.CreateIdFilterExpression <FakeEntity <TKey>, TKey>(defaultKey);

            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            mockRepository
            .Setup(
                x => x.GetAsync(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    )
                )
            .ReturnsAsync(() => null);

            Expression <Action <ILogger> > loggerExpressionNotFound = x => x.Log(
                LogLevel.Warning,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     $"Item not found: {item.Id}"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger.Setup(loggerExpressionNotFound);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act
            var result = await businessService.EditAsync(item);

            // Assert
            _mockLogger.Verify(loggerExpressionEdit, Times.Once);

            mockRepository
            .Verify(
                x => x.GetAsync(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    ),
                Times.Once
                );

            _mockLogger.Verify(loggerExpressionNotFound, Times.Once);

            Assert.Null(result);
        }
Ejemplo n.º 6
0
        public async Task EditAsync_Success <TKey>(
            TKey defaultKey,
            FakeEditDto <TKey> item,
            FakeEntity <TKey> entity,
            FakeDto <TKey> expectedResult)
        {
            // Arrange
            Expression <Action <ILogger> > loggerExpressionEdit = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     $"Edit item: {item}"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger
            .Setup(x => x.IsEnabled(LogLevel.Information))
            .Returns(true);
            _mockLogger.Setup(loggerExpressionEdit);

            var filterExpression = FilterExpressionExtensions.CreateIdFilterExpression <FakeEntity <TKey>, TKey>(defaultKey);

            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            mockRepository
            .Setup(
                x => x.GetAsync(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    )
                )
            .ReturnsAsync(entity);

            _mockBusinessMapper
            .Setup(
                x => x.Map(item, entity)
                )
            .Returns(entity);

            mockRepository
            .Setup(
                x => x.Update(entity, false)
                )
            .Returns(entity);

            Expression <Action <ILogger> > loggerExpressionSave = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     "Save changes"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger.Setup(loggerExpressionSave);

            _mockUnitOfWork
            .Setup(
                x => x.CommitAsync()
                )
            .ReturnsAsync(1);

            _mockBusinessMapper
            .Setup(
                x => x.Map <FakeEntity <TKey>, FakeDto <TKey> >(entity)
                )
            .Returns(expectedResult);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act
            var result = await businessService.EditAsync(item);

            // Assert
            _mockLogger.Verify(loggerExpressionEdit, Times.Once);

            mockRepository
            .Verify(
                x => x.GetAsync(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    ),
                Times.Once
                );

            _mockBusinessMapper
            .Verify(
                x => x.Map(item, entity),
                Times.Once
                );

            mockRepository
            .Verify(
                x => x.Update(entity, false),
                Times.Once
                );

            _mockLogger.Verify(loggerExpressionSave, Times.Once);

            _mockUnitOfWork
            .Verify(
                x => x.CommitAsync(),
                Times.Once
                );

            _mockBusinessMapper
            .Verify(
                x => x.Map <FakeEntity <TKey>, FakeDto <TKey> >(entity),
                Times.Once
                );

            Assert.Equal(expectedResult, result, new FakeDtoEqualityComparer <TKey>());
        }
Ejemplo n.º 7
0
        public async Task DeleteAsync_Success <TKey>(
            TKey defaultKey,
            int numberOfRowsAffected,
            bool expectedResult)
        {
            // Arrange
            Expression <Action <ILogger> > loggerExpressionDelete = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     $"Delete item: {defaultKey}"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger.Setup(loggerExpressionDelete);

            var entity = new FakeEntity <TKey>();

            var filterExpression = FilterExpressionExtensions.CreateIdFilterExpression <FakeEntity <TKey>, TKey>(defaultKey);

            var mockRepository = new Mock <IRepository <FakeEntity <TKey>, TKey> >(MockBehavior.Strict);

            mockRepository
            .Setup(
                x => x.Get(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    )
                )
            .Returns(entity);

            mockRepository
            .Setup(
                x => x.Delete(entity)
                );

            Expression <Action <ILogger> > loggerExpressionSave = x => x.Log(
                LogLevel.Information,
                0,
                It.Is <It.IsAnyType>((v, t) =>
                                     v.ToString() ==
                                     "Save changes"
                                     ),
                null,
                It.Is <Func <It.IsAnyType, Exception, string> >((v, t) => true)
                );

            _mockLogger
            .Setup(x => x.IsEnabled(LogLevel.Information))
            .Returns(true);
            _mockLogger.Setup(loggerExpressionSave);

            _mockUnitOfWork
            .Setup(
                x => x.CommitAsync()
                )
            .ReturnsAsync(numberOfRowsAffected);

            var businessService = new FakeBusinessService <TKey>(
                _mockUnitOfWork.Object,
                _ => mockRepository.Object,
                _mockBusinessMapper.Object,
                _mockLogger.Object
                );

            // Act
            var result = await businessService.DeleteAsync(defaultKey);

            // Assert
            Assert.NotNull(defaultKey);

            _mockLogger.Verify(loggerExpressionDelete, Times.Once);

            mockRepository
            .Verify(
                x => x.Get(
                    It.Is <QueryParameters <FakeEntity <TKey>, TKey> >(
                        y => Lambda.Eq(
                            y.Filter.Expression,
                            filterExpression
                            ) &&
                        y.Sort == null &&
                        y.Page == null
                        )
                    ),
                Times.Once
                );

            mockRepository
            .Verify(
                x => x.Delete(entity),
                Times.Once
                );

            _mockLogger.Verify(loggerExpressionSave, Times.Once);

            _mockUnitOfWork
            .Verify(
                x => x.CommitAsync(),
                Times.Once
                );

            Assert.Equal(expectedResult, result);
        }