using ColaFlow.Modules.Mcp.Domain.ValueObjects; using Xunit; namespace ColaFlow.Modules.Mcp.Tests.Domain; public class DiffFieldTests { [Fact] public void Create_ValidInput_Success() { // Arrange & Act var diffField = new DiffField( fieldName: "Title", displayName: "Title", oldValue: "Old Title", newValue: "New Title" ); // Assert Assert.Equal("Title", diffField.FieldName); Assert.Equal("Title", diffField.DisplayName); Assert.Equal("Old Title", diffField.OldValue); Assert.Equal("New Title", diffField.NewValue); Assert.Null(diffField.DiffHtml); } [Fact] public void Create_WithDiffHtml_Success() { // Arrange & Act var diffField = new DiffField( fieldName: "Description", displayName: "Description", oldValue: "Old description", newValue: "New description", diffHtml: "OldNew description" ); // Assert Assert.Equal("OldNew description", diffField.DiffHtml); } [Fact] public void Create_EmptyFieldName_ThrowsException() { // Act & Assert Assert.Throws(() => new DiffField( fieldName: "", displayName: "Title", oldValue: "Old", newValue: "New" )); } [Fact] public void Create_EmptyDisplayName_ThrowsException() { // Act & Assert Assert.Throws(() => new DiffField( fieldName: "Title", displayName: "", oldValue: "Old", newValue: "New" )); } [Fact] public void Equality_SameValues_AreEqual() { // Arrange var field1 = new DiffField("Title", "Title", "Old", "New"); var field2 = new DiffField("Title", "Title", "Old", "New"); // Act & Assert Assert.Equal(field1, field2); Assert.True(field1 == field2); Assert.False(field1 != field2); } [Fact] public void Equality_DifferentValues_AreNotEqual() { // Arrange var field1 = new DiffField("Title", "Title", "Old", "New"); var field2 = new DiffField("Title", "Title", "Old", "Different"); // Act & Assert Assert.NotEqual(field1, field2); Assert.False(field1 == field2); Assert.True(field1 != field2); } [Fact] public void HasChanged_DifferentValues_ReturnsTrue() { // Arrange var diffField = new DiffField("Title", "Title", "Old", "New"); // Act & Assert Assert.True(diffField.HasChanged()); } [Fact] public void HasChanged_SameValues_ReturnsFalse() { // Arrange var diffField = new DiffField("Title", "Title", "Same", "Same"); // Act & Assert Assert.False(diffField.HasChanged()); } [Fact] public void HasChanged_BothNull_ReturnsFalse() { // Arrange var diffField = new DiffField("Title", "Title", null, null); // Act & Assert Assert.False(diffField.HasChanged()); } [Fact] public void HasChanged_OldNull_ReturnsTrue() { // Arrange var diffField = new DiffField("Title", "Title", null, "New"); // Act & Assert Assert.True(diffField.HasChanged()); } [Fact] public void HasChanged_NewNull_ReturnsTrue() { // Arrange var diffField = new DiffField("Title", "Title", "Old", null); // Act & Assert Assert.True(diffField.HasChanged()); } [Fact] public void GetChangeDescription_NormalChange_ReturnsFormattedString() { // Arrange var diffField = new DiffField("Title", "Title", "Old Title", "New Title"); // Act var description = diffField.GetChangeDescription(); // Assert Assert.Equal("Title: Old Title → New Title", description); } [Fact] public void GetChangeDescription_OldNull_ReturnsFormattedString() { // Arrange var diffField = new DiffField("Title", "Title", null, "New Title"); // Act var description = diffField.GetChangeDescription(); // Assert Assert.Equal("Title: → New Title", description); } [Fact] public void GetChangeDescription_NewNull_ReturnsFormattedString() { // Arrange var diffField = new DiffField("Title", "Title", "Old Title", null); // Act var description = diffField.GetChangeDescription(); // Assert Assert.Equal("Title: Old Title → (removed)", description); } [Fact] public void GetChangeDescription_BothNull_ReturnsFormattedString() { // Arrange var diffField = new DiffField("Title", "Title", null, null); // Act var description = diffField.GetChangeDescription(); // Assert Assert.Equal("Title: (no change)", description); } }