using JdeScoping.DataAccess.Interfaces; using JdeScoping.DataSync.Etl.Scripts; using NSubstitute; namespace JdeScoping.DataSync.Tests.Etl.Scripts; public class CommonScriptsTests { private readonly IDbConnectionFactory _factory = Substitute.For(); [Theory] [InlineData("WorkOrder", "dbo", "WorkOrder")] [InlineData("dbo.WorkOrder", "dbo", "WorkOrder")] [InlineData("[dbo].[WorkOrder]", "dbo", "WorkOrder")] [InlineData("Config.Settings", "Config", "Settings")] [InlineData("[Config].[Settings]", "Config", "Settings")] [InlineData("myschema.MyTable", "myschema", "MyTable")] [InlineData("[other].[table.with.dots]", "other", "table.with.dots")] public void ParseTableName_VariousFormats_ParsesCorrectly(string input, string expectedSchema, string expectedTable) { // Act var (schema, table) = CommonScripts.ParseTableName(input); // Assert Assert.Equal(expectedSchema, schema); Assert.Equal(expectedTable, table); } [Fact] public void DisableIndexes_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.DisableIndexes(_factory, "WorkOrder"); Assert.Equal("DisableIndexes:dbo.WorkOrder", runner.ScriptName); } [Fact] public void DisableIndexes_WithSchema_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.DisableIndexes(_factory, "Config.Settings"); Assert.Equal("DisableIndexes:Config.Settings", runner.ScriptName); } [Fact] public void DisableIndexes_WithBracketedSchema_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.DisableIndexes(_factory, "[dbo].[WorkOrder]"); Assert.Equal("DisableIndexes:dbo.WorkOrder", runner.ScriptName); } [Fact] public void RebuildIndexes_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.RebuildIndexes(_factory, "WorkOrder"); Assert.Equal("RebuildIndexes:dbo.WorkOrder", runner.ScriptName); } [Fact] public void RebuildIndexes_WithSchema_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.RebuildIndexes(_factory, "Config.Settings"); Assert.Equal("RebuildIndexes:Config.Settings", runner.ScriptName); } [Fact] public void UpdateStatistics_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.UpdateStatistics(_factory, "WorkOrder"); Assert.Equal("UpdateStats:dbo.WorkOrder", runner.ScriptName); } [Fact] public void UpdateStatistics_WithSchema_ReturnsRunnerWithCorrectName() { var runner = CommonScripts.UpdateStatistics(_factory, "Config.Settings"); Assert.Equal("UpdateStats:Config.Settings", runner.ScriptName); } [Fact] public void CustomSql_ReturnsRunnerWithProvidedName() { var runner = CommonScripts.CustomSql(_factory, "SELECT 1", "MyCustomScript"); Assert.Equal("MyCustomScript", runner.ScriptName); } [Fact] public void CustomSql_WithParameters_ReturnsRunner() { var parameters = new { value = 42 }; var runner = CommonScripts.CustomSql(_factory, "SELECT @value", "ParameterizedScript", parameters); Assert.Equal("ParameterizedScript", runner.ScriptName); Assert.NotNull(runner); } [Fact] public void CustomSql_WithTimeout_ReturnsRunner() { var runner = CommonScripts.CustomSql(_factory, "SELECT 1", "TimeoutScript", timeoutSeconds: 120); Assert.Equal("TimeoutScript", runner.ScriptName); Assert.NotNull(runner); } [Theory] [InlineData("WorkOrder", "[dbo].[WorkOrder]")] [InlineData("dbo.WorkOrder", "[dbo].[WorkOrder]")] [InlineData("[dbo].[WorkOrder]", "[dbo].[WorkOrder]")] [InlineData("Config.Settings", "[Config].[Settings]")] [InlineData("[Config].[Settings]", "[Config].[Settings]")] [InlineData("myschema.MyTable", "[myschema].[MyTable]")] public void FormatQualifiedTableName_VariousFormats_FormatsCorrectly(string input, string expected) { // Act var result = CommonScripts.FormatQualifiedTableName(input); // Assert Assert.Equal(expected, result); } }