using Hutopy.Application.Common.Exceptions; using Hutopy.Application.TodoLists.Commands.CreateTodoList; using Hutopy.Application.TodoLists.Commands.UpdateTodoList; using Hutopy.Domain.Entities; namespace Hutopy.Application.FunctionalTests.TodoLists.Commands; using static Testing; public class UpdateTodoListTests : BaseTestFixture { [Test] public async Task ShouldRequireValidTodoListId() { var command = new UpdateTodoListCommand { Id = 99, Title = "New Title" }; await FluentActions.Invoking(() => SendAsync(command)).Should().ThrowAsync(); } [Test] public async Task ShouldRequireUniqueTitle() { var listId = await SendAsync(new CreateTodoListCommand { Title = "New List" }); await SendAsync(new CreateTodoListCommand { Title = "Other List" }); var command = new UpdateTodoListCommand { Id = listId, Title = "Other List" }; (await FluentActions.Invoking(() => SendAsync(command)) .Should().ThrowAsync().Where(ex => ex.Errors.ContainsKey("Title"))) .And.Errors["Title"].Should().Contain("'Title' must be unique."); } [Test] public async Task ShouldUpdateTodoList() { var userId = await RunAsDefaultUserAsync(); var listId = await SendAsync(new CreateTodoListCommand { Title = "New List" }); var command = new UpdateTodoListCommand { Id = listId, Title = "Updated List Title" }; await SendAsync(command); var list = await FindAsync(listId); list.Should().NotBeNull(); list!.Title.Should().Be(command.Title); list.LastModifiedBy.Should().NotBeNull(); list.LastModifiedBy.Should().Be(userId); list.LastModified.Should().BeCloseTo(DateTime.Now, TimeSpan.FromMilliseconds(10000)); } }