Files
jdescopingtool/NEW/tests/JdeScoping.DataSync.Tests/Configuration/ScheduleConfigTests.cs
T
Joseph Doherty 1318dce18a feat(datasync): add ScheduleConfig and ScheduleDefaults models
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.
2026-01-07 00:18:28 -05:00

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);
}
}