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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user