Files
Joseph Doherty 1fc7792cd1 refactor(configmanager): rename UI project and split test projects
Rename ConfigManager to ConfigManager.Ui to match the Core/CLI/UI project
structure, and split the monolithic test project into Core.Tests,
Cli.Tests, and Ui.Tests to align with the source project organization.
2026-01-28 10:24:36 -05:00

174 lines
4.7 KiB
C#

using JdeScoping.ConfigManager.Core.Services;
namespace JdeScoping.ConfigManager.Core.Tests.Services;
public class DiffServiceTests
{
private readonly DiffService _sut;
public DiffServiceTests()
{
_sut = new DiffService();
}
[Fact]
public void GenerateDiff_WithNoChanges_ReturnsEmptyDiff()
{
// Arrange
var original = "line1\nline2\nline3";
var modified = "line1\nline2\nline3";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeFalse();
}
[Fact]
public void GenerateDiff_WithChanges_ReturnsDiffLines()
{
// Arrange
var original = "line1\nline2\nline3";
var modified = "line1\nmodified\nline3";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeTrue();
result.Lines.ShouldNotBeEmpty();
}
[Fact]
public void GenerateDiff_WithAddedLine_ReportsInsertion()
{
// Arrange
var original = "line1\nline2";
var modified = "line1\nline2\nline3";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeTrue();
result.Insertions.ShouldBe(1);
result.Deletions.ShouldBe(0);
result.Lines.ShouldContain(l => l.Type == DiffLineType.Added && l.Text == "line3");
}
[Fact]
public void GenerateDiff_WithRemovedLine_ReportsDeletion()
{
// Arrange
var original = "line1\nline2\nline3";
var modified = "line1\nline3";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeTrue();
result.Deletions.ShouldBe(1);
result.Lines.ShouldContain(l => l.Type == DiffLineType.Removed && l.Text == "line2");
}
[Fact]
public void GenerateDiff_WithModifiedLine_ReportsAdditionAndDeletion()
{
// Arrange
var original = "line1\noriginal\nline3";
var modified = "line1\nchanged\nline3";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeTrue();
result.Insertions.ShouldBeGreaterThan(0);
result.Deletions.ShouldBeGreaterThan(0);
}
[Fact]
public void GenerateDiff_WithEmptyOriginal_ReportsAllAsInsertions()
{
// Arrange
var original = "";
var modified = "line1\nline2";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeTrue();
result.Insertions.ShouldBeGreaterThan(0);
result.Deletions.ShouldBe(0);
}
[Fact]
public void GenerateDiff_WithEmptyModified_ReportsAllAsDeletions()
{
// Arrange
var original = "line1\nline2";
var modified = "";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
result.HasChanges.ShouldBeTrue();
result.Insertions.ShouldBe(0);
result.Deletions.ShouldBeGreaterThan(0);
}
[Fact]
public void GenerateDiff_LineNumbers_AreCorrectForUnchangedLines()
{
// Arrange
var original = "line1\nline2\nline3";
var modified = "line1\nline2\nline3";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
var firstLine = result.Lines.First();
firstLine.OldLineNumber.ShouldBe(1);
firstLine.NewLineNumber.ShouldBe(1);
}
[Fact]
public void GenerateDiff_AddedLine_HasNullOldLineNumber()
{
// Arrange
var original = "line1";
var modified = "line1\nline2";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
var addedLine = result.Lines.FirstOrDefault(l => l.Type == DiffLineType.Added);
addedLine.ShouldNotBeNull();
addedLine.OldLineNumber.ShouldBeNull();
addedLine.NewLineNumber.ShouldNotBeNull();
}
[Fact]
public void GenerateDiff_RemovedLine_HasNullNewLineNumber()
{
// Arrange
var original = "line1\nline2";
var modified = "line1";
// Act
var result = _sut.GenerateDiff(original, modified);
// Assert
var removedLine = result.Lines.FirstOrDefault(l => l.Type == DiffLineType.Removed);
removedLine.ShouldNotBeNull();
removedLine.OldLineNumber.ShouldNotBeNull();
removedLine.NewLineNumber.ShouldBeNull();
}
}