public async Task UpdateTodo_PayloadMissing_ReturnsBadRequest()
        {
            // Arrange
            var todoId      = 1;
            var mockService = new Mock <ITodosService>();

            var controller = new TodosController(mockService.Object);

            // Action
            var result = await controller.UpdateTodo(todoId, null);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <BadRequestObjectResult>(result);
        }
        public async Task UpdateTodo_IdOnRouteDoesNotMatchPayload_ReturnsBadRequest()
        {
            // Arrange
            var todoId         = 1;
            var updatedTodoDTO = new UpdatedTodoDTO()
            {
                Id = 2, Name = "Todo 1", IsComplete = true
            };
            var mockService = new Mock <ITodosService>();

            var controller = new TodosController(mockService.Object);

            // Action
            var result = await controller.UpdateTodo(todoId, updatedTodoDTO);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <BadRequestObjectResult>(result);
        }
        public async Task UpdateTodo_ModelStateError_ReturnsBadRequest()
        {
            // Arrange
            var todoId         = 1;
            var updatedTodoDTO = new UpdatedTodoDTO()
            {
                Name = "Todo 1", IsComplete = true
            };
            var mockService = new Mock <ITodosService>();

            var controller = new TodosController(mockService.Object);

            // Action
            controller.ModelState.AddModelError("updatedTodoDTO.Id", "ModelState error");
            var result = await controller.UpdateTodo(todoId, updatedTodoDTO);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <BadRequestObjectResult>(result);
        }
        public async Task UpdateTodo_ValidTodoToUpdate_ReturnsNoContentResult()
        {
            // Arrange
            var todoId         = 1;
            var updatedTodoDTO = new UpdatedTodoDTO()
            {
                Id = todoId, Name = "Todo 1", IsComplete = true
            };
            var mockService = new Mock <ITodosService>();

            mockService.Setup(ts => ts.UpdateTodoAsync(updatedTodoDTO));

            var controller = new TodosController(mockService.Object);

            // Action
            var result = await controller.UpdateTodo(todoId, updatedTodoDTO);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <NoContentResult>(result);
            mockService.Verify(ts => ts.UpdateTodoAsync(updatedTodoDTO), Times.Once());
        }