1318dce18a
Add configuration models for the new schedule-based pipeline configuration: - ScheduleConfig: Per-schedule configuration (Enabled, IntervalMinutes, PrePurge, ReIndex, UpdateWhen) - ScheduleDefaults: Default configurations for Mass (weekly), Daily, and Hourly schedules - PipelineSchedules: Per-pipeline schedule overrides - MergeWith method for merging pipeline overrides with defaults Part of Task 1 from pipeline-schedule-alignment implementation plan.
177 lines
5.2 KiB
C#
177 lines
5.2 KiB
C#
using JdeScoping.DataSync.Configuration;
|
|
using Shouldly;
|
|
|
|
namespace JdeScoping.DataSync.Tests.Configuration;
|
|
|
|
public class ScheduleConfigTests
|
|
{
|
|
[Fact]
|
|
public void ScheduleConfig_DefaultValues_AreCorrect()
|
|
{
|
|
var config = new ScheduleConfig();
|
|
|
|
config.Enabled.ShouldBeTrue();
|
|
config.IntervalMinutes.ShouldBe(0);
|
|
config.PrePurge.ShouldBeFalse();
|
|
config.ReIndex.ShouldBeFalse();
|
|
config.UpdateWhen.ShouldBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void ScheduleConfig_WithValues_StoresCorrectly()
|
|
{
|
|
var config = new ScheduleConfig
|
|
{
|
|
Enabled = false,
|
|
IntervalMinutes = 60,
|
|
PrePurge = true,
|
|
ReIndex = true,
|
|
UpdateWhen = "src.LastUpdateDt > tgt.LastUpdateDt"
|
|
};
|
|
|
|
config.Enabled.ShouldBeFalse();
|
|
config.IntervalMinutes.ShouldBe(60);
|
|
config.PrePurge.ShouldBeTrue();
|
|
config.ReIndex.ShouldBeTrue();
|
|
config.UpdateWhen.ShouldBe("src.LastUpdateDt > tgt.LastUpdateDt");
|
|
}
|
|
|
|
[Fact]
|
|
public void ScheduleDefaults_HasCorrectDefaultValues()
|
|
{
|
|
var defaults = new ScheduleDefaults();
|
|
|
|
defaults.Mass.ShouldNotBeNull();
|
|
defaults.Daily.ShouldNotBeNull();
|
|
defaults.Hourly.ShouldNotBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void ScheduleDefaults_Mass_HasCorrectValues()
|
|
{
|
|
var defaults = new ScheduleDefaults();
|
|
|
|
defaults.Mass.Enabled.ShouldBeTrue();
|
|
defaults.Mass.IntervalMinutes.ShouldBe(10080); // Weekly
|
|
defaults.Mass.PrePurge.ShouldBeTrue();
|
|
defaults.Mass.ReIndex.ShouldBeTrue();
|
|
defaults.Mass.UpdateWhen.ShouldBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void ScheduleDefaults_Daily_HasCorrectValues()
|
|
{
|
|
var defaults = new ScheduleDefaults();
|
|
|
|
defaults.Daily.Enabled.ShouldBeTrue();
|
|
defaults.Daily.IntervalMinutes.ShouldBe(1440); // Daily
|
|
defaults.Daily.PrePurge.ShouldBeFalse();
|
|
defaults.Daily.ReIndex.ShouldBeFalse();
|
|
defaults.Daily.UpdateWhen.ShouldBe("src.LastUpdateDt > tgt.LastUpdateDt");
|
|
}
|
|
|
|
[Fact]
|
|
public void ScheduleDefaults_Hourly_HasCorrectValues()
|
|
{
|
|
var defaults = new ScheduleDefaults();
|
|
|
|
defaults.Hourly.Enabled.ShouldBeTrue();
|
|
defaults.Hourly.IntervalMinutes.ShouldBe(60); // Hourly
|
|
defaults.Hourly.PrePurge.ShouldBeFalse();
|
|
defaults.Hourly.ReIndex.ShouldBeFalse();
|
|
defaults.Hourly.UpdateWhen.ShouldBe("src.LastUpdateDt > tgt.LastUpdateDt");
|
|
}
|
|
|
|
[Fact]
|
|
public void PipelineSchedules_AllPropertiesNullable()
|
|
{
|
|
var schedules = new PipelineSchedules();
|
|
|
|
schedules.Mass.ShouldBeNull();
|
|
schedules.Daily.ShouldBeNull();
|
|
schedules.Hourly.ShouldBeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void PipelineSchedules_WithValues_StoresCorrectly()
|
|
{
|
|
var schedules = new PipelineSchedules
|
|
{
|
|
Mass = new ScheduleConfig { PrePurge = true },
|
|
Daily = new ScheduleConfig { Enabled = true },
|
|
Hourly = new ScheduleConfig { Enabled = false }
|
|
};
|
|
|
|
schedules.Mass.ShouldNotBeNull();
|
|
schedules.Mass!.PrePurge.ShouldBeTrue();
|
|
schedules.Daily.ShouldNotBeNull();
|
|
schedules.Daily!.Enabled.ShouldBeTrue();
|
|
schedules.Hourly.ShouldNotBeNull();
|
|
schedules.Hourly!.Enabled.ShouldBeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void MergeWith_WhenConfigHasNoOverrides_ReturnsDefaultValues()
|
|
{
|
|
var config = new ScheduleConfig();
|
|
var defaults = new ScheduleConfig
|
|
{
|
|
Enabled = true,
|
|
IntervalMinutes = 60,
|
|
PrePurge = false,
|
|
ReIndex = false,
|
|
UpdateWhen = "src.LastUpdateDt > tgt.LastUpdateDt"
|
|
};
|
|
|
|
var merged = config.MergeWith(defaults);
|
|
|
|
merged.IntervalMinutes.ShouldBe(60);
|
|
merged.UpdateWhen.ShouldBe("src.LastUpdateDt > tgt.LastUpdateDt");
|
|
}
|
|
|
|
[Fact]
|
|
public void MergeWith_WhenConfigHasOverrides_UsesOverrideValues()
|
|
{
|
|
var config = new ScheduleConfig
|
|
{
|
|
IntervalMinutes = 120,
|
|
PrePurge = true,
|
|
UpdateWhen = "custom condition"
|
|
};
|
|
var defaults = new ScheduleConfig
|
|
{
|
|
IntervalMinutes = 60,
|
|
PrePurge = false,
|
|
UpdateWhen = "default condition"
|
|
};
|
|
|
|
var merged = config.MergeWith(defaults);
|
|
|
|
merged.IntervalMinutes.ShouldBe(120);
|
|
merged.PrePurge.ShouldBeTrue();
|
|
merged.UpdateWhen.ShouldBe("custom condition");
|
|
}
|
|
|
|
[Fact]
|
|
public void MergeWith_PreservesEnabledFromConfig()
|
|
{
|
|
var config = new ScheduleConfig { Enabled = false };
|
|
var defaults = new ScheduleConfig { Enabled = true };
|
|
|
|
var merged = config.MergeWith(defaults);
|
|
|
|
merged.Enabled.ShouldBeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void MergeWith_WhenIntervalZero_UsesDefaultInterval()
|
|
{
|
|
var config = new ScheduleConfig { IntervalMinutes = 0 };
|
|
var defaults = new ScheduleConfig { IntervalMinutes = 1440 };
|
|
|
|
var merged = config.MergeWith(defaults);
|
|
|
|
merged.IntervalMinutes.ShouldBe(1440);
|
|
}
|
|
}
|