using FluentAssertions; using Moq; using ColaFlow.Modules.ProjectManagement.Application.Queries.GetTaskById; using ColaFlow.Modules.ProjectManagement.Domain.Aggregates.ProjectAggregate; using ColaFlow.Modules.ProjectManagement.Domain.Repositories; using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects; using ColaFlow.Modules.ProjectManagement.Domain.Exceptions; namespace ColaFlow.Application.Tests.Queries.GetTaskById; public class GetTaskByIdQueryHandlerTests { private readonly Mock _projectRepositoryMock; private readonly GetTaskByIdQueryHandler _handler; public GetTaskByIdQueryHandlerTests() { _projectRepositoryMock = new Mock(); _handler = new GetTaskByIdQueryHandler(_projectRepositoryMock.Object); } [Fact] public async Task Should_Return_Task_Details() { // Arrange var userId = UserId.Create(); var project = Project.Create("Test Project", "Description", "TST", userId); var epic = project.CreateEpic("Test Epic", "Epic Description", userId); var story = epic.CreateStory("Test Story", "Story Description", TaskPriority.Medium, userId); var task = story.CreateTask("Test Task", "Task Description", TaskPriority.High, userId); _projectRepositoryMock .Setup(x => x.GetProjectWithTaskAsync(task.Id, It.IsAny())) .ReturnsAsync(project); var query = new GetTaskByIdQuery(task.Id.Value); // Act var result = await _handler.Handle(query, CancellationToken.None); // Assert result.Should().NotBeNull(); result.Id.Should().Be(task.Id.Value); result.Title.Should().Be("Test Task"); result.Description.Should().Be("Task Description"); result.StoryId.Should().Be(story.Id.Value); result.Status.Should().Be("To Do"); result.Priority.Should().Be("High"); } [Fact] public async Task Should_Fail_When_Task_Not_Found() { // Arrange var taskId = TaskId.Create(); _projectRepositoryMock .Setup(x => x.GetProjectWithTaskAsync(taskId, It.IsAny())) .ReturnsAsync((Project?)null); var query = new GetTaskByIdQuery(taskId.Value); // Act Func act = async () => await _handler.Handle(query, CancellationToken.None); // Assert await act.Should().ThrowAsync() .WithMessage("*Task*"); } }