using JdeScoping.DataAccess.Interfaces; using JdeScoping.DataSync.Etl.Scripts; using NSubstitute; namespace JdeScoping.DataSync.Tests.Etl.Scripts; public class SqlScriptRunnerTests { [Fact] public void Constructor_SetsScriptName() { var factory = Substitute.For(); var runner = new SqlScriptRunner(factory, "SELECT 1", "TestScript"); Assert.Equal("TestScript", runner.ScriptName); } [Fact] public void Constructor_WithNullName_DefaultsToSqlScript() { var factory = Substitute.For(); var runner = new SqlScriptRunner(factory, "SELECT 1"); Assert.Equal("SqlScript", runner.ScriptName); } [Fact] public void Constructor_NullFactory_ThrowsArgumentNullException() { Assert.Throws(() => new SqlScriptRunner(null!, "SELECT 1")); } [Fact] public void Constructor_NullSql_ThrowsArgumentNullException() { var factory = Substitute.For(); Assert.Throws(() => new SqlScriptRunner(factory, null!)); } [Fact] public void Constructor_EmptySql_ThrowsArgumentException() { var factory = Substitute.For(); Assert.Throws(() => new SqlScriptRunner(factory, "")); } [Fact] public void Constructor_WithParameters_AcceptsParameters() { // Arrange var factory = Substitute.For(); var parameters = new { tableName = "WorkOrder", schemaName = "dbo" }; // Act var runner = new SqlScriptRunner( factory, "SELECT @tableName, @schemaName", "Test", parameters: parameters); // Assert - constructor should accept parameters without error Assert.NotNull(runner); Assert.Equal("Test", runner.ScriptName); } }