public void TestTodoService_Archive_ShouldCompleteTodo()
        {
            // Arrange
            var expectedTodos = new TodoModel[] {
                new TodoModel {
                    Id = 1
                }
            };
            var mappedTodoDomainModel = new Mock <Todo>();
            // mock repository
            Mock <IRepository <TodoModel> > todoRepository = new Mock <IRepository <TodoModel> >();

            todoRepository.Setup(repo => repo.Find(It.IsAny <Expression <Func <TodoModel, bool> > >()))
            .Returns(expectedTodos.AsQueryable());
            todoRepository.Setup(repo => repo.Update(It.IsAny <TodoModel>()));
            // mock automapper
            var mapperMock = new Mock <IMapper>();

            mapperMock.Setup(m => m.Map <Todo>(It.IsAny <TodoModel>()))
            .Returns(mappedTodoDomainModel.Object);
            mapperMock.Setup(m => m.Map <Todo, TodoModel>(It.IsAny <Todo>(), It.IsAny <TodoModel>()))
            .Returns(It.IsAny <TodoModel>());
            var cacheMock = new Mock <ICacheProvider>();

            var todoService = new TodoService(todoRepository.Object, mapperMock.Object, cacheMock.Object);

            // Act
            todoService.Archive(1);

            // Assert
            todoRepository.Verify(x => x.Find(It.IsAny <Expression <Func <TodoModel, bool> > >()), Times.Once);
            todoRepository.Verify(x => x.Update(It.IsAny <TodoModel>()), Times.Once);
            mapperMock.Verify(x => x.Map <Todo>(It.IsAny <TodoModel>()), Times.Once);
            mapperMock.Verify(x => x.Map <Todo, TodoModel>(It.IsAny <Todo>(), It.IsAny <TodoModel>()), Times.Once);
            mappedTodoDomainModel.Verify(x => x.Archive(), Times.Once);
        }