public async Task CreateTodo_ValidData_ReturnsCreatedAtActionResult()
        {
            // Arrange
            var createdTodoDTO  = new CreatedTodoDTO();
            var expectedTodoDTO = new TodoDTO()
            {
                Id = 1, Name = "Some Todo", IsComplete = true
            };
            var mockService = new Mock <ITodosService>();

            mockService.Setup(ts => ts.CreateTodoAsync(createdTodoDTO)).ReturnsAsync(expectedTodoDTO);

            var controller = new TodosController(mockService.Object);

            // Action
            var result = await controller.CreateTodo(createdTodoDTO);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <CreatedAtActionResult>(result.Result);
            Assert.IsType <TodoDTO>(((CreatedAtActionResult)result.Result).Value);

            var returnedResultTodo = (TodoDTO)((CreatedAtActionResult)result.Result).Value;

            Assert.Equal(expectedTodoDTO.Id, returnedResultTodo.Id);
            Assert.Equal(expectedTodoDTO.Name, returnedResultTodo.Name);
            Assert.Equal(expectedTodoDTO.IsComplete, returnedResultTodo.IsComplete);
        }
        public async Task CreateTodo_PayloadMissing_ReturnsBadRequest()
        {
            // Arrange
            var mockService = new Mock <ITodosService>();

            var controller = new TodosController(mockService.Object);

            // Action
            var result = await controller.CreateTodo(null);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <BadRequestObjectResult>(result.Result);
        }
        public async Task CreateTodo_ModelStateError_ReturnsBadRequest()
        {
            // Arrange
            var createdTodoDTO = new CreatedTodoDTO()
            {
                IsComplete = true
            };
            var mockService = new Mock <ITodosService>();

            var controller = new TodosController(mockService.Object);

            // Action
            controller.ModelState.AddModelError("createdTodoDTO.Name", "ModelState error");
            var result = await controller.CreateTodo(createdTodoDTO);

            // Assert
            Assert.NotNull(result);
            Assert.IsType <BadRequestObjectResult>(result.Result);
        }