namespace JdeScoping.DataSync.IntegrationTests.Infrastructure;
///
/// Initializes the test database schema.
/// Creates test tables that mirror production schemas.
///
public static class TestDatabaseInitializer
{
///
/// Creates all test tables in the database.
///
public static async Task InitializeAsync(string connectionString)
{
await using var connection = new SqlConnection(connectionString);
await connection.OpenAsync();
// WorkOrder_Test: For MERGE and bulk copy tests (has LastUpdateDT)
await connection.ExecuteAsync(@"
IF OBJECT_ID('WorkOrder_Test', 'U') IS NOT NULL
DROP TABLE WorkOrder_Test;
CREATE TABLE WorkOrder_Test (
OrderNumber INT NOT NULL PRIMARY KEY,
Status VARCHAR(10) NULL,
Description VARCHAR(100) NULL,
Quantity DECIMAL(18,4) NULL,
LastUpdateDT DATETIME2 NOT NULL
);
CREATE NONCLUSTERED INDEX IX_WorkOrder_Test_Status
ON WorkOrder_Test(Status);
");
// Item_Test: For tables WITHOUT LastUpdateDT (unconditional update)
await connection.ExecuteAsync(@"
IF OBJECT_ID('Item_Test', 'U') IS NOT NULL
DROP TABLE Item_Test;
CREATE TABLE Item_Test (
ItemNumber VARCHAR(25) NOT NULL PRIMARY KEY,
Description VARCHAR(100) NULL,
UnitOfMeasure VARCHAR(10) NULL
);
");
// LotUsage_Test: For composite primary key tests
await connection.ExecuteAsync(@"
IF OBJECT_ID('LotUsage_Test', 'U') IS NOT NULL
DROP TABLE LotUsage_Test;
CREATE TABLE LotUsage_Test (
LotNumber VARCHAR(30) NOT NULL,
OrderNumber INT NOT NULL,
Quantity DECIMAL(18,4) NULL,
LastUpdateDT DATETIME2 NOT NULL,
CONSTRAINT PK_LotUsage_Test PRIMARY KEY (LotNumber, OrderNumber)
);
");
// DataUpdate_Test: For update logging tests
await connection.ExecuteAsync(@"
IF OBJECT_ID('DataUpdate_Test', 'U') IS NOT NULL
DROP TABLE DataUpdate_Test;
CREATE TABLE DataUpdate_Test (
Id INT IDENTITY(1,1) PRIMARY KEY,
TableName VARCHAR(50) NOT NULL,
SourceSystem VARCHAR(10) NOT NULL,
SourceData VARCHAR(50) NOT NULL,
UpdateType INT NOT NULL,
StartDT DATETIME2 NOT NULL,
EndDT DATETIME2 NULL,
NumberRecords INT NOT NULL,
WasSuccessful BIT NULL
);
");
// BulkMergeTest: For BulkMergeHelper integration tests
await connection.ExecuteAsync(@"
IF OBJECT_ID('BulkMergeTest', 'U') IS NOT NULL
DROP TABLE BulkMergeTest;
CREATE TABLE BulkMergeTest (
Id INT NOT NULL PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
Amount DECIMAL(18,2) NULL,
LastUpdateDt DATETIME2 NOT NULL
);
");
}
}