Files
jdescopingtool/NEW/tests/JdeScoping.DataSync.Tests/Etl/Results/PipelineResultTests.cs
T
2026-01-03 08:58:06 -05:00

150 lines
4.6 KiB
C#

using JdeScoping.DataSync.Etl.Results;
using Shouldly;
namespace JdeScoping.DataSync.Tests.Etl.Results;
public class PipelineResultTests
{
[Fact]
public void Succeeded_Creates_Result_With_Success_True()
{
// Arrange
var steps = new List<StepResult>
{
new("ExtractStep", "Extract", 100, TimeSpan.FromSeconds(1)),
new("TransformStep", "Transform", 100, TimeSpan.FromSeconds(2)),
new("LoadStep", "Load", 100, TimeSpan.FromSeconds(3))
};
var elapsed = TimeSpan.FromSeconds(6);
// Act
var result = PipelineResult.Succeeded(100, elapsed, steps);
// Assert
result.Success.ShouldBeTrue();
result.TotalRows.ShouldBe(100);
result.Elapsed.ShouldBe(elapsed);
result.Steps.ShouldBe(steps);
result.Error.ShouldBeNull();
}
[Fact]
public void Succeeded_With_Empty_Steps_Creates_Valid_Result()
{
// Arrange
var steps = Array.Empty<StepResult>();
var elapsed = TimeSpan.Zero;
// Act
var result = PipelineResult.Succeeded(0, elapsed, steps);
// Assert
result.Success.ShouldBeTrue();
result.TotalRows.ShouldBe(0);
result.Elapsed.ShouldBe(TimeSpan.Zero);
result.Steps.ShouldBeEmpty();
result.Error.ShouldBeNull();
}
[Fact]
public void Failed_Creates_Result_With_Success_False()
{
// Arrange
var steps = new List<StepResult>
{
new("ExtractStep", "Extract", 50, TimeSpan.FromSeconds(1))
};
var elapsed = TimeSpan.FromSeconds(1);
var error = new InvalidOperationException("Pipeline failed during transform");
// Act
var result = PipelineResult.Failed(50, elapsed, steps, error);
// Assert
result.Success.ShouldBeFalse();
result.TotalRows.ShouldBe(50);
result.Elapsed.ShouldBe(elapsed);
result.Steps.ShouldBe(steps);
result.Error.ShouldBe(error);
}
[Fact]
public void Failed_Preserves_Error_Details()
{
// Arrange
var innerException = new TimeoutException("Database timeout");
var error = new InvalidOperationException("Pipeline failed", innerException);
var steps = Array.Empty<StepResult>();
// Act
var result = PipelineResult.Failed(0, TimeSpan.FromSeconds(30), steps, error);
// Assert
result.Error.ShouldNotBeNull();
result.Error.Message.ShouldBe("Pipeline failed");
result.Error.InnerException.ShouldBe(innerException);
}
[Fact]
public void StepResult_Stores_All_Properties_Correctly()
{
// Arrange & Act
var stepResult = new StepResult("MyStep", "Transform", 500, TimeSpan.FromMilliseconds(250));
// Assert
stepResult.StepName.ShouldBe("MyStep");
stepResult.StepType.ShouldBe("Transform");
stepResult.RowsAffected.ShouldBe(500);
stepResult.Elapsed.ShouldBe(TimeSpan.FromMilliseconds(250));
}
[Fact]
public void DestinationResult_Stores_All_Properties_Correctly()
{
// Arrange & Act
var destResult = new DestinationResult(1000, 10, TimeSpan.FromSeconds(5));
// Assert
destResult.RowsProcessed.ShouldBe(1000);
destResult.BatchCount.ShouldBe(10);
destResult.Elapsed.ShouldBe(TimeSpan.FromSeconds(5));
}
[Fact]
public void PipelineResult_Records_Are_Equal_When_Properties_Match()
{
// Arrange
var steps = new List<StepResult> { new("Step1", "Extract", 100, TimeSpan.FromSeconds(1)) };
var elapsed = TimeSpan.FromSeconds(1);
// Act
var result1 = PipelineResult.Succeeded(100, elapsed, steps);
var result2 = PipelineResult.Succeeded(100, elapsed, steps);
// Assert
result1.ShouldBe(result2);
}
[Fact]
public void StepResult_Records_Are_Equal_When_Properties_Match()
{
// Arrange & Act
var step1 = new StepResult("Step", "Load", 100, TimeSpan.FromSeconds(1));
var step2 = new StepResult("Step", "Load", 100, TimeSpan.FromSeconds(1));
// Assert
step1.ShouldBe(step2);
}
[Fact]
public void DestinationResult_Records_Are_Equal_When_Properties_Match()
{
// Arrange & Act
var dest1 = new DestinationResult(500, 5, TimeSpan.FromSeconds(2));
var dest2 = new DestinationResult(500, 5, TimeSpan.FromSeconds(2));
// Assert
dest1.ShouldBe(dest2);
}
}