feat(etl): add WithCommandTimeout to EtlPipelineBuilder with validation

This commit is contained in:
Joseph Doherty
2026-01-03 11:09:28 -05:00
parent 3145fca371
commit fcd8b660fa
2 changed files with 79 additions and 0 deletions
@@ -0,0 +1,69 @@
using JdeScoping.DataSync.Etl.Pipeline;
namespace JdeScoping.DataSync.Tests.Etl.Pipeline;
public class EtlPipelineBuilderTests
{
[Fact]
public void WithCommandTimeout_ValidTimeout_SetsTimeoutAndReturnsBuilder()
{
// Arrange
var builder = new EtlPipelineBuilder();
// Act
var result = builder.WithCommandTimeout(TimeSpan.FromMinutes(30));
// Assert
Assert.Same(builder, result);
}
[Fact]
public void WithCommandTimeout_NegativeTimeout_ThrowsArgumentOutOfRangeException()
{
// Arrange
var builder = new EtlPipelineBuilder();
// Act & Assert
var ex = Assert.Throws<ArgumentOutOfRangeException>(() =>
builder.WithCommandTimeout(TimeSpan.FromSeconds(-1)));
Assert.Equal("timeout", ex.ParamName);
}
[Fact]
public void WithCommandTimeout_Over24Hours_ThrowsArgumentOutOfRangeException()
{
// Arrange
var builder = new EtlPipelineBuilder();
// Act & Assert
var ex = Assert.Throws<ArgumentOutOfRangeException>(() =>
builder.WithCommandTimeout(TimeSpan.FromHours(25)));
Assert.Equal("timeout", ex.ParamName);
}
[Fact]
public void WithCommandTimeout_ExactlyZero_DoesNotThrow()
{
// Arrange
var builder = new EtlPipelineBuilder();
// Act
var result = builder.WithCommandTimeout(TimeSpan.Zero);
// Assert
Assert.Same(builder, result);
}
[Fact]
public void WithCommandTimeout_Exactly24Hours_DoesNotThrow()
{
// Arrange
var builder = new EtlPipelineBuilder();
// Act
var result = builder.WithCommandTimeout(TimeSpan.FromHours(24));
// Assert
Assert.Same(builder, result);
}
}