🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
136 lines
4.3 KiB
C#
136 lines
4.3 KiB
C#
using FluentAssertions;
|
|
using Xunit;
|
|
|
|
namespace ColaFlow.Domain.Tests.Aggregates;
|
|
|
|
/// <summary>
|
|
/// Example Domain Unit Test for Project Aggregate
|
|
/// Based on M1-Architecture-Design.md Section 8.2
|
|
/// </summary>
|
|
public class ProjectTests
|
|
{
|
|
[Fact]
|
|
public void Create_ValidData_ShouldCreateProject()
|
|
{
|
|
// Arrange
|
|
var name = "Test Project";
|
|
var description = "Test Description";
|
|
var key = "TEST";
|
|
var ownerId = Guid.NewGuid(); // UserId.Create(Guid.NewGuid());
|
|
|
|
// Act
|
|
// var project = Project.Create(name, description, key, ownerId);
|
|
|
|
// Assert
|
|
// TODO: Uncomment after Project aggregate is implemented
|
|
// project.Should().NotBeNull();
|
|
// project.Name.Should().Be(name);
|
|
// project.Key.Value.Should().Be(key);
|
|
// project.Status.Should().Be(ProjectStatus.Active);
|
|
// project.DomainEvents.Should().ContainSingle(e => e is ProjectCreatedEvent);
|
|
|
|
// Placeholder assertion for template
|
|
true.Should().BeTrue("This is a placeholder test");
|
|
}
|
|
|
|
[Fact]
|
|
public void Create_EmptyName_ShouldThrowException()
|
|
{
|
|
// Arrange
|
|
var name = "";
|
|
var key = "TEST";
|
|
var ownerId = Guid.NewGuid(); // UserId.Create(Guid.NewGuid());
|
|
|
|
// Act
|
|
// Action act = () => Project.Create(name, "", key, ownerId);
|
|
|
|
// Assert
|
|
// TODO: Uncomment after Project aggregate is implemented
|
|
// act.Should().Throw<DomainException>()
|
|
// .WithMessage("Project name cannot be empty");
|
|
|
|
// Placeholder assertion for template
|
|
true.Should().BeTrue("This is a placeholder test");
|
|
}
|
|
|
|
[Fact]
|
|
public void Create_KeyTooLong_ShouldThrowException()
|
|
{
|
|
// Arrange
|
|
var name = "Test Project";
|
|
var key = "VERYLONGKEY"; // > 10 characters
|
|
var ownerId = Guid.NewGuid();
|
|
|
|
// Act
|
|
// Action act = () => Project.Create(name, "", key, ownerId);
|
|
|
|
// Assert
|
|
// TODO: Uncomment after Project aggregate is implemented
|
|
// act.Should().Throw<DomainException>()
|
|
// .WithMessage("Project key cannot exceed 10 characters");
|
|
|
|
// Placeholder assertion for template
|
|
true.Should().BeTrue("This is a placeholder test");
|
|
}
|
|
|
|
[Fact]
|
|
public void UpdateDetails_ValidData_ShouldUpdateProject()
|
|
{
|
|
// Arrange
|
|
// var project = Project.Create("Original", "Description", "TEST", UserId.Create(Guid.NewGuid()));
|
|
var newName = "Updated Project";
|
|
var newDescription = "Updated Description";
|
|
|
|
// Act
|
|
// project.UpdateDetails(newName, newDescription);
|
|
|
|
// Assert
|
|
// TODO: Uncomment after Project aggregate is implemented
|
|
// project.Name.Should().Be(newName);
|
|
// project.Description.Should().Be(newDescription);
|
|
// project.UpdatedAt.Should().NotBeNull();
|
|
// project.DomainEvents.Should().Contain(e => e is ProjectUpdatedEvent);
|
|
|
|
// Placeholder assertion for template
|
|
true.Should().BeTrue("This is a placeholder test");
|
|
}
|
|
|
|
[Fact]
|
|
public void Archive_ActiveProject_ShouldArchiveSuccessfully()
|
|
{
|
|
// Arrange
|
|
// var project = Project.Create("Test", "Description", "TEST", UserId.Create(Guid.NewGuid()));
|
|
|
|
// Act
|
|
// project.Archive();
|
|
|
|
// Assert
|
|
// TODO: Uncomment after Project aggregate is implemented
|
|
// project.Status.Should().Be(ProjectStatus.Archived);
|
|
// project.UpdatedAt.Should().NotBeNull();
|
|
// project.DomainEvents.Should().Contain(e => e is ProjectArchivedEvent);
|
|
|
|
// Placeholder assertion for template
|
|
true.Should().BeTrue("This is a placeholder test");
|
|
}
|
|
|
|
[Fact]
|
|
public void Archive_AlreadyArchived_ShouldThrowException()
|
|
{
|
|
// Arrange
|
|
// var project = Project.Create("Test", "Description", "TEST", UserId.Create(Guid.NewGuid()));
|
|
// project.Archive();
|
|
|
|
// Act
|
|
// Action act = () => project.Archive();
|
|
|
|
// Assert
|
|
// TODO: Uncomment after Project aggregate is implemented
|
|
// act.Should().Throw<DomainException>()
|
|
// .WithMessage("Project is already archived");
|
|
|
|
// Placeholder assertion for template
|
|
true.Should().BeTrue("This is a placeholder test");
|
|
}
|
|
}
|