7dcbacd5ca
- Filter MERGE SQL columns to only include columns that exist in destination (allColumns and updateColumns were using unfiltered source columns) - Fix schema-qualified table names to use proper [schema].[table] format instead of wrapping entire name in single brackets - Add empty column mapping validation to throw early if no columns intersect - Add JdeDateTransformer output column collision detection in OnInitialize - Add TODO comment for WithCommandTimeout (stored but not yet passed to destinations) - Add tests for FormatQualifiedTableName and output column collision
118 lines
4.2 KiB
C#
118 lines
4.2 KiB
C#
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<IDbConnectionFactory>();
|
|
|
|
[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);
|
|
}
|
|
}
|