test(backend): Fix all compilation errors in Domain.Tests after Day 15 multi-tenant changes

Fixed 73 compilation errors caused by Epic/Story/WorkTask.Create() now requiring TenantId parameter.

Changes:
- Created TestDataBuilder helper class for test data creation
- Updated EpicTests.cs: Added TenantId to all Epic.Create() calls (10 tests)
- Updated StoryTests.cs: Added TenantId to all Story.Create() calls (26 tests)
- Updated WorkTaskTests.cs: Added TenantId to all WorkTask.Create() calls (37 tests)
- Added using ColaFlow.Domain.Tests.Builders to all test files

Test Results:
- Build: 0 errors, 9 warnings (xUnit analyzer warnings only)
- Tests: 192/192 passed in ColaFlow.Domain.Tests
- Full Suite: 427/431 passed (4 skipped as expected)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Yaojia Wang
2025-11-04 17:25:00 +01:00
parent d2ed21873e
commit 0854faccc1
4 changed files with 193 additions and 73 deletions

View File

@@ -1,6 +1,7 @@
using ColaFlow.Modules.ProjectManagement.Domain.Aggregates.ProjectAggregate;
using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects;
using ColaFlow.Modules.ProjectManagement.Domain.Exceptions;
using ColaFlow.Domain.Tests.Builders;
using FluentAssertions;
namespace ColaFlow.Domain.Tests.Aggregates;
@@ -16,16 +17,18 @@ public class EpicTests
public void Create_WithValidData_ShouldCreateEpic()
{
// Arrange
var tenantId = TestDataBuilder.CreateTestTenantId();
var name = "Epic 1";
var description = "Epic Description";
var projectId = ProjectId.Create();
var createdBy = UserId.Create();
// Act
var epic = Epic.Create(name, description, projectId, createdBy);
var epic = Epic.Create(tenantId, name, description, projectId, createdBy);
// Assert
epic.Should().NotBeNull();
epic.TenantId.Should().Be(tenantId);
epic.Name.Should().Be(name);
epic.Description.Should().Be(description);
epic.ProjectId.Should().Be(projectId);
@@ -41,13 +44,14 @@ public class EpicTests
public void Create_WithNullDescription_ShouldCreateEpicWithEmptyDescription()
{
// Arrange
var tenantId = TestDataBuilder.CreateTestTenantId();
var name = "Epic 1";
string? description = null;
var projectId = ProjectId.Create();
var createdBy = UserId.Create();
// Act
var epic = Epic.Create(name, description!, projectId, createdBy);
var epic = Epic.Create(tenantId, name, description!, projectId, createdBy);
// Assert
epic.Should().NotBeNull();
@@ -61,11 +65,12 @@ public class EpicTests
public void Create_WithEmptyName_ShouldThrowDomainException(string invalidName)
{
// Arrange
var tenantId = TestDataBuilder.CreateTestTenantId();
var projectId = ProjectId.Create();
var createdBy = UserId.Create();
// Act
Action act = () => Epic.Create(invalidName, "Description", projectId, createdBy);
Action act = () => Epic.Create(tenantId, invalidName, "Description", projectId, createdBy);
// Assert
act.Should().Throw<DomainException>()
@@ -76,12 +81,13 @@ public class EpicTests
public void Create_WithNameExceeding200Characters_ShouldThrowDomainException()
{
// Arrange
var tenantId = TestDataBuilder.CreateTestTenantId();
var name = new string('A', 201);
var projectId = ProjectId.Create();
var createdBy = UserId.Create();
// Act
Action act = () => Epic.Create(name, "Description", projectId, createdBy);
Action act = () => Epic.Create(tenantId, name, "Description", projectId, createdBy);
// Assert
act.Should().Throw<DomainException>()
@@ -92,12 +98,13 @@ public class EpicTests
public void Create_WithNameExactly200Characters_ShouldSucceed()
{
// Arrange
var tenantId = TestDataBuilder.CreateTestTenantId();
var name = new string('A', 200);
var projectId = ProjectId.Create();
var createdBy = UserId.Create();
// Act
var epic = Epic.Create(name, "Description", projectId, createdBy);
var epic = Epic.Create(tenantId, name, "Description", projectId, createdBy);
// Assert
epic.Should().NotBeNull();
@@ -112,7 +119,8 @@ public class EpicTests
public void CreateStory_WithValidData_ShouldCreateStory()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
var storyTitle = "Story 1";
var storyDescription = "Story Description";
var priority = TaskPriority.High;
@@ -136,7 +144,8 @@ public class EpicTests
public void CreateStory_MultipleStories_ShouldAddToCollection()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
var createdBy = UserId.Create();
// Act
@@ -157,7 +166,8 @@ public class EpicTests
public void UpdateDetails_WithValidData_ShouldUpdateEpic()
{
// Arrange
var epic = Epic.Create("Original Name", "Original Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Original Name", "Original Description", ProjectId.Create(), UserId.Create());
var originalCreatedAt = epic.CreatedAt;
var newName = "Updated Name";
var newDescription = "Updated Description";
@@ -177,7 +187,8 @@ public class EpicTests
public void UpdateDetails_WithNullDescription_ShouldSetEmptyDescription()
{
// Arrange
var epic = Epic.Create("Original Name", "Original Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Original Name", "Original Description", ProjectId.Create(), UserId.Create());
// Act
epic.UpdateDetails("Updated Name", null!);
@@ -193,7 +204,8 @@ public class EpicTests
public void UpdateDetails_WithEmptyName_ShouldThrowDomainException(string invalidName)
{
// Arrange
var epic = Epic.Create("Original Name", "Original Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Original Name", "Original Description", ProjectId.Create(), UserId.Create());
// Act
Action act = () => epic.UpdateDetails(invalidName, "Updated Description");
@@ -207,7 +219,8 @@ public class EpicTests
public void UpdateDetails_WithNameExceeding200Characters_ShouldThrowDomainException()
{
// Arrange
var epic = Epic.Create("Original Name", "Original Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Original Name", "Original Description", ProjectId.Create(), UserId.Create());
var name = new string('A', 201);
// Act
@@ -226,7 +239,8 @@ public class EpicTests
public void UpdateStatus_WithValidStatus_ShouldUpdateStatus()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
var newStatus = WorkItemStatus.InProgress;
// Act
@@ -242,7 +256,8 @@ public class EpicTests
public void UpdateStatus_ToAllStatuses_ShouldSucceed()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
// Act & Assert
epic.UpdateStatus(WorkItemStatus.InProgress);
@@ -269,7 +284,8 @@ public class EpicTests
public void UpdatePriority_WithValidPriority_ShouldUpdatePriority()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
var newPriority = TaskPriority.Urgent;
// Act
@@ -285,7 +301,8 @@ public class EpicTests
public void UpdatePriority_ToAllPriorities_ShouldSucceed()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
// Act & Assert
epic.UpdatePriority(TaskPriority.Low);
@@ -309,7 +326,8 @@ public class EpicTests
public void Stories_Collection_ShouldBeReadOnly()
{
// Arrange
var epic = Epic.Create("Epic 1", "Description", ProjectId.Create(), UserId.Create());
var tenantId = TestDataBuilder.CreateTestTenantId();
var epic = Epic.Create(tenantId, "Epic 1", "Description", ProjectId.Create(), UserId.Create());
// Act & Assert
epic.Stories.Should().BeAssignableTo<IReadOnlyCollection<Story>>();
@@ -319,10 +337,11 @@ public class EpicTests
public void Epic_ShouldHaveUniqueId()
{
// Arrange & Act
var tenantId = TestDataBuilder.CreateTestTenantId();
var projectId = ProjectId.Create();
var createdBy = UserId.Create();
var epic1 = Epic.Create("Epic 1", "Description", projectId, createdBy);
var epic2 = Epic.Create("Epic 2", "Description", projectId, createdBy);
var epic1 = Epic.Create(tenantId, "Epic 1", "Description", projectId, createdBy);
var epic2 = Epic.Create(tenantId, "Epic 2", "Description", projectId, createdBy);
// Assert
epic1.Id.Should().NotBe(epic2.Id);

View File

@@ -1,6 +1,7 @@
using ColaFlow.Modules.ProjectManagement.Domain.Aggregates.ProjectAggregate;
using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects;
using ColaFlow.Modules.ProjectManagement.Domain.Exceptions;
using ColaFlow.Domain.Tests.Builders;
using FluentAssertions;
namespace ColaFlow.Domain.Tests.Aggregates;
@@ -23,7 +24,7 @@ public class StoryTests
var createdBy = UserId.Create();
// Act
var story = Story.Create(title, description, epicId, priority, createdBy);
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), title, description, epicId, priority, createdBy);
// Assert
story.Should().NotBeNull();
@@ -52,7 +53,7 @@ public class StoryTests
var createdBy = UserId.Create();
// Act
var story = Story.Create(title, description!, epicId, priority, createdBy);
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), title, description!, epicId, priority, createdBy);
// Assert
story.Should().NotBeNull();
@@ -71,7 +72,7 @@ public class StoryTests
var createdBy = UserId.Create();
// Act
Action act = () => Story.Create(invalidTitle, "Description", epicId, priority, createdBy);
Action act = () => Story.Create(TestDataBuilder.CreateTestTenantId(), invalidTitle, "Description", epicId, priority, createdBy);
// Assert
act.Should().Throw<DomainException>()
@@ -88,7 +89,7 @@ public class StoryTests
var createdBy = UserId.Create();
// Act
Action act = () => Story.Create(title, "Description", epicId, priority, createdBy);
Action act = () => Story.Create(TestDataBuilder.CreateTestTenantId(), title, "Description", epicId, priority, createdBy);
// Assert
act.Should().Throw<DomainException>()
@@ -105,7 +106,7 @@ public class StoryTests
var createdBy = UserId.Create();
// Act
var story = Story.Create(title, "Description", epicId, priority, createdBy);
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), title, "Description", epicId, priority, createdBy);
// Assert
story.Should().NotBeNull();
@@ -120,7 +121,7 @@ public class StoryTests
public void CreateTask_WithValidData_ShouldCreateTask()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var taskTitle = "Task 1";
var taskDescription = "Task Description";
var priority = TaskPriority.Urgent;
@@ -144,7 +145,7 @@ public class StoryTests
public void CreateTask_MultipleTasks_ShouldAddToCollection()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var createdBy = UserId.Create();
// Act
@@ -165,7 +166,7 @@ public class StoryTests
public void UpdateDetails_WithValidData_ShouldUpdateStory()
{
// Arrange
var story = Story.Create("Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var originalCreatedAt = story.CreatedAt;
var newTitle = "Updated Title";
var newDescription = "Updated Description";
@@ -185,7 +186,7 @@ public class StoryTests
public void UpdateDetails_WithNullDescription_ShouldSetEmptyDescription()
{
// Arrange
var story = Story.Create("Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
story.UpdateDetails("Updated Title", null!);
@@ -201,7 +202,7 @@ public class StoryTests
public void UpdateDetails_WithEmptyTitle_ShouldThrowDomainException(string invalidTitle)
{
// Arrange
var story = Story.Create("Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
Action act = () => story.UpdateDetails(invalidTitle, "Updated Description");
@@ -215,7 +216,7 @@ public class StoryTests
public void UpdateDetails_WithTitleExceeding200Characters_ShouldThrowDomainException()
{
// Arrange
var story = Story.Create("Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var title = new string('A', 201);
// Act
@@ -234,7 +235,7 @@ public class StoryTests
public void UpdateStatus_WithValidStatus_ShouldUpdateStatus()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var newStatus = WorkItemStatus.InProgress;
// Act
@@ -250,7 +251,7 @@ public class StoryTests
public void UpdateStatus_ToAllStatuses_ShouldSucceed()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act & Assert
story.UpdateStatus(WorkItemStatus.InProgress);
@@ -277,7 +278,7 @@ public class StoryTests
public void AssignTo_WithValidUserId_ShouldAssignStory()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var assigneeId = UserId.Create();
// Act
@@ -293,7 +294,7 @@ public class StoryTests
public void AssignTo_ReassignToDifferentUser_ShouldUpdateAssignee()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var firstAssignee = UserId.Create();
var secondAssignee = UserId.Create();
@@ -313,7 +314,7 @@ public class StoryTests
public void UpdateEstimate_WithValidHours_ShouldUpdateEstimate()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var hours = 8.5m;
// Act
@@ -329,7 +330,7 @@ public class StoryTests
public void UpdateEstimate_WithZeroHours_ShouldSucceed()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
story.UpdateEstimate(0);
@@ -342,7 +343,7 @@ public class StoryTests
public void UpdateEstimate_WithNegativeHours_ShouldThrowDomainException()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
Action act = () => story.UpdateEstimate(-1);
@@ -356,7 +357,7 @@ public class StoryTests
public void UpdateEstimate_MultipleUpdates_ShouldOverwritePreviousValue()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
story.UpdateEstimate(8);
@@ -374,7 +375,7 @@ public class StoryTests
public void LogActualHours_WithValidHours_ShouldLogHours()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var hours = 10.5m;
// Act
@@ -390,7 +391,7 @@ public class StoryTests
public void LogActualHours_WithZeroHours_ShouldSucceed()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
story.LogActualHours(0);
@@ -403,7 +404,7 @@ public class StoryTests
public void LogActualHours_WithNegativeHours_ShouldThrowDomainException()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
Action act = () => story.LogActualHours(-1);
@@ -417,7 +418,7 @@ public class StoryTests
public void LogActualHours_MultipleUpdates_ShouldOverwritePreviousValue()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act
story.LogActualHours(8);
@@ -435,7 +436,7 @@ public class StoryTests
public void Tasks_Collection_ShouldBeReadOnly()
{
// Arrange
var story = Story.Create("Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
var story = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", EpicId.Create(), TaskPriority.Medium, UserId.Create());
// Act & Assert
story.Tasks.Should().BeAssignableTo<IReadOnlyCollection<WorkTask>>();
@@ -447,8 +448,8 @@ public class StoryTests
// Arrange & Act
var epicId = EpicId.Create();
var createdBy = UserId.Create();
var story1 = Story.Create("Story 1", "Description", epicId, TaskPriority.Medium, createdBy);
var story2 = Story.Create("Story 2", "Description", epicId, TaskPriority.Medium, createdBy);
var story1 = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 1", "Description", epicId, TaskPriority.Medium, createdBy);
var story2 = Story.Create(TestDataBuilder.CreateTestTenantId(), "Story 2", "Description", epicId, TaskPriority.Medium, createdBy);
// Assert
story1.Id.Should().NotBe(story2.Id);

View File

@@ -1,6 +1,7 @@
using ColaFlow.Modules.ProjectManagement.Domain.Aggregates.ProjectAggregate;
using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects;
using ColaFlow.Modules.ProjectManagement.Domain.Exceptions;
using ColaFlow.Domain.Tests.Builders;
using FluentAssertions;
namespace ColaFlow.Domain.Tests.Aggregates;
@@ -23,7 +24,7 @@ public class WorkTaskTests
var createdBy = UserId.Create();
// Act
var task = WorkTask.Create(title, description, storyId, priority, createdBy);
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), title, description, storyId, priority, createdBy);
// Assert
task.Should().NotBeNull();
@@ -51,7 +52,7 @@ public class WorkTaskTests
var createdBy = UserId.Create();
// Act
var task = WorkTask.Create(title, description!, storyId, priority, createdBy);
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), title, description!, storyId, priority, createdBy);
// Assert
task.Should().NotBeNull();
@@ -70,7 +71,7 @@ public class WorkTaskTests
var createdBy = UserId.Create();
// Act
Action act = () => WorkTask.Create(invalidTitle, "Description", storyId, priority, createdBy);
Action act = () => WorkTask.Create(TestDataBuilder.CreateTestTenantId(), invalidTitle, "Description", storyId, priority, createdBy);
// Assert
act.Should().Throw<DomainException>()
@@ -87,7 +88,7 @@ public class WorkTaskTests
var createdBy = UserId.Create();
// Act
Action act = () => WorkTask.Create(title, "Description", storyId, priority, createdBy);
Action act = () => WorkTask.Create(TestDataBuilder.CreateTestTenantId(), title, "Description", storyId, priority, createdBy);
// Assert
act.Should().Throw<DomainException>()
@@ -104,7 +105,7 @@ public class WorkTaskTests
var createdBy = UserId.Create();
// Act
var task = WorkTask.Create(title, "Description", storyId, priority, createdBy);
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), title, "Description", storyId, priority, createdBy);
// Assert
task.Should().NotBeNull();
@@ -119,10 +120,10 @@ public class WorkTaskTests
var createdBy = UserId.Create();
// Act
var taskLow = WorkTask.Create("Task Low", "Desc", storyId, TaskPriority.Low, createdBy);
var taskMedium = WorkTask.Create("Task Medium", "Desc", storyId, TaskPriority.Medium, createdBy);
var taskHigh = WorkTask.Create("Task High", "Desc", storyId, TaskPriority.High, createdBy);
var taskUrgent = WorkTask.Create("Task Urgent", "Desc", storyId, TaskPriority.Urgent, createdBy);
var taskLow = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task Low", "Desc", storyId, TaskPriority.Low, createdBy);
var taskMedium = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task Medium", "Desc", storyId, TaskPriority.Medium, createdBy);
var taskHigh = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task High", "Desc", storyId, TaskPriority.High, createdBy);
var taskUrgent = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task Urgent", "Desc", storyId, TaskPriority.Urgent, createdBy);
// Assert
taskLow.Priority.Should().Be(TaskPriority.Low);
@@ -139,7 +140,7 @@ public class WorkTaskTests
public void UpdateDetails_WithValidData_ShouldUpdateTask()
{
// Arrange
var task = WorkTask.Create("Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var originalCreatedAt = task.CreatedAt;
var newTitle = "Updated Title";
var newDescription = "Updated Description";
@@ -159,7 +160,7 @@ public class WorkTaskTests
public void UpdateDetails_WithNullDescription_ShouldSetEmptyDescription()
{
// Arrange
var task = WorkTask.Create("Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
task.UpdateDetails("Updated Title", null!);
@@ -175,7 +176,7 @@ public class WorkTaskTests
public void UpdateDetails_WithEmptyTitle_ShouldThrowDomainException(string invalidTitle)
{
// Arrange
var task = WorkTask.Create("Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
Action act = () => task.UpdateDetails(invalidTitle, "Updated Description");
@@ -189,7 +190,7 @@ public class WorkTaskTests
public void UpdateDetails_WithTitleExceeding200Characters_ShouldThrowDomainException()
{
// Arrange
var task = WorkTask.Create("Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Original Title", "Original Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var title = new string('A', 201);
// Act
@@ -208,7 +209,7 @@ public class WorkTaskTests
public void UpdateStatus_WithValidStatus_ShouldUpdateStatus()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var newStatus = WorkItemStatus.InProgress;
// Act
@@ -224,7 +225,7 @@ public class WorkTaskTests
public void UpdateStatus_ToAllStatuses_ShouldSucceed()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act & Assert
task.UpdateStatus(WorkItemStatus.InProgress);
@@ -251,7 +252,7 @@ public class WorkTaskTests
public void AssignTo_WithValidUserId_ShouldAssignTask()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var assigneeId = UserId.Create();
// Act
@@ -267,7 +268,7 @@ public class WorkTaskTests
public void AssignTo_ReassignToDifferentUser_ShouldUpdateAssignee()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var firstAssignee = UserId.Create();
var secondAssignee = UserId.Create();
@@ -287,7 +288,7 @@ public class WorkTaskTests
public void UpdatePriority_WithValidPriority_ShouldUpdatePriority()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Low, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Low, UserId.Create());
var newPriority = TaskPriority.Urgent;
// Act
@@ -303,7 +304,7 @@ public class WorkTaskTests
public void UpdatePriority_ToAllPriorities_ShouldSucceed()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act & Assert
task.UpdatePriority(TaskPriority.Low);
@@ -327,7 +328,7 @@ public class WorkTaskTests
public void UpdateEstimate_WithValidHours_ShouldUpdateEstimate()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var hours = 4.5m;
// Act
@@ -343,7 +344,7 @@ public class WorkTaskTests
public void UpdateEstimate_WithZeroHours_ShouldSucceed()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
task.UpdateEstimate(0);
@@ -356,7 +357,7 @@ public class WorkTaskTests
public void UpdateEstimate_WithNegativeHours_ShouldThrowDomainException()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
Action act = () => task.UpdateEstimate(-1);
@@ -370,7 +371,7 @@ public class WorkTaskTests
public void UpdateEstimate_MultipleUpdates_ShouldOverwritePreviousValue()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
task.UpdateEstimate(4);
@@ -388,7 +389,7 @@ public class WorkTaskTests
public void LogActualHours_WithValidHours_ShouldLogHours()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var hours = 5.5m;
// Act
@@ -404,7 +405,7 @@ public class WorkTaskTests
public void LogActualHours_WithZeroHours_ShouldSucceed()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
task.LogActualHours(0);
@@ -417,7 +418,7 @@ public class WorkTaskTests
public void LogActualHours_WithNegativeHours_ShouldThrowDomainException()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
Action act = () => task.LogActualHours(-1);
@@ -431,7 +432,7 @@ public class WorkTaskTests
public void LogActualHours_MultipleUpdates_ShouldOverwritePreviousValue()
{
// Arrange
var task = WorkTask.Create("Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
var task = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", StoryId.Create(), TaskPriority.Medium, UserId.Create());
// Act
task.LogActualHours(4);
@@ -451,8 +452,8 @@ public class WorkTaskTests
// Arrange & Act
var storyId = StoryId.Create();
var createdBy = UserId.Create();
var task1 = WorkTask.Create("Task 1", "Description", storyId, TaskPriority.Medium, createdBy);
var task2 = WorkTask.Create("Task 2", "Description", storyId, TaskPriority.Medium, createdBy);
var task1 = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 1", "Description", storyId, TaskPriority.Medium, createdBy);
var task2 = WorkTask.Create(TestDataBuilder.CreateTestTenantId(), "Task 2", "Description", storyId, TaskPriority.Medium, createdBy);
// Assert
task1.Id.Should().NotBe(task2.Id);

View File

@@ -0,0 +1,99 @@
using ColaFlow.Modules.ProjectManagement.Domain.Aggregates.ProjectAggregate;
using ColaFlow.Modules.ProjectManagement.Domain.ValueObjects;
namespace ColaFlow.Domain.Tests.Builders;
/// <summary>
/// Test Data Builder for creating test entities with default values.
/// Simplifies test setup by providing consistent test data.
/// </summary>
public static class TestDataBuilder
{
/// <summary>
/// Creates a test TenantId with a random GUID.
/// </summary>
public static TenantId CreateTestTenantId()
=> TenantId.From(Guid.NewGuid());
/// <summary>
/// Creates a test ProjectId with a random GUID.
/// </summary>
public static ProjectId CreateTestProjectId()
=> ProjectId.From(Guid.NewGuid());
/// <summary>
/// Creates a test UserId with a random GUID.
/// </summary>
public static UserId CreateTestUserId()
=> UserId.From(Guid.NewGuid());
/// <summary>
/// Creates a test EpicId with a random GUID.
/// </summary>
public static EpicId CreateTestEpicId()
=> EpicId.Create();
/// <summary>
/// Creates a test StoryId with a random GUID.
/// </summary>
public static StoryId CreateTestStoryId()
=> StoryId.Create();
/// <summary>
/// Creates a test Epic with default or provided values.
/// </summary>
public static Epic CreateTestEpic(
TenantId? tenantId = null,
string name = "Test Epic",
string description = "Test Epic Description",
ProjectId? projectId = null,
UserId? createdBy = null)
{
return Epic.Create(
tenantId ?? CreateTestTenantId(),
name,
description,
projectId ?? CreateTestProjectId(),
createdBy ?? CreateTestUserId());
}
/// <summary>
/// Creates a test Story with default or provided values.
/// </summary>
public static Story CreateTestStory(
TenantId? tenantId = null,
string title = "Test Story",
string description = "Test Story Description",
EpicId? epicId = null,
TaskPriority? priority = null,
UserId? createdBy = null)
{
return Story.Create(
tenantId ?? CreateTestTenantId(),
title,
description,
epicId ?? CreateTestEpicId(),
priority ?? TaskPriority.Medium,
createdBy ?? CreateTestUserId());
}
/// <summary>
/// Creates a test WorkTask with default or provided values.
/// </summary>
public static WorkTask CreateTestTask(
TenantId? tenantId = null,
string title = "Test Task",
string description = "Test Task Description",
StoryId? storyId = null,
TaskPriority? priority = null,
UserId? createdBy = null)
{
return WorkTask.Create(
tenantId ?? CreateTestTenantId(),
title,
description,
storyId ?? CreateTestStoryId(),
priority ?? TaskPriority.Medium,
createdBy ?? CreateTestUserId());
}
}