using ItWorx.KnowledgeHub.Domain.Sources; namespace ItWorx.KnowledgeHub.Domain.Tests.Sources; public sealed class DataSourceTests { private static readonly DateTimeOffset Now = new(2026, 10, 2, 0, 0, 0, TimeSpan.Zero); [Fact] public void A_registered_source_is_unknown_until_it_has_observed_evidence() { var source = DataSource.Create(Guid.NewGuid(), "inventory:test", "Inventory", DataSourceKind.Inventory, 24, Now); Assert.Equal("Unknown", source.GetState(Now)); Assert.Null(source.LastSuccessAt); Assert.Null(source.RecordCount); } [Fact] public void Newer_failure_outweighs_earlier_success_and_stale_success_is_not_current() { var source = DataSource.Create(Guid.NewGuid(), "inventory:test", "Inventory", DataSourceKind.Inventory, 24, Now); source.Observe(true, 12, null, "run1", Now); Assert.Equal("Current", source.GetState(Now)); Assert.Equal("Stale", source.GetState(Now.AddHours(25))); source.Observe(false, null, "connectivity", "run2", Now.AddHours(1)); Assert.Equal("Failed", source.GetState(Now.AddHours(1))); Assert.Equal(12, source.RecordCount); Assert.Throws(() => source.Observe(true, 99, null, "older", Now.AddMinutes(-1))); } [Fact] public void Importing_old_data_does_not_refresh_its_freshness() { var source = DataSource.Create(Guid.NewGuid(), "inventory:test", "Inventory", DataSourceKind.Inventory, 24, Now); source.Observe(true, 12, null, "import", Now, Now.AddDays(-2)); Assert.Equal("Stale", source.GetState(Now)); Assert.Equal(Now, source.LastSuccessAt); } [Fact] public void Disabling_preserves_prior_evidence_and_observations_require_safe_error_codes() { var source = DataSource.Create(Guid.NewGuid(), "inventory:test", "Inventory", DataSourceKind.Inventory, 24, Now); source.Observe(true, 12, null, "run1", Now); source.Configure("Inventory", false, 24); Assert.Equal("Disabled", source.GetState(Now)); Assert.Equal(Now, source.LastSuccessAt); Assert.Throws(() => source.Observe(false, null, "secret connection string", "run2", Now)); } }