Files
itworx-knowledge-hub-Public/tests/backend/ItWorx.KnowledgeHub.Domain.Tests/Sources/DataSourceTests.cs
T

51 lines
2.2 KiB
C#

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<ArgumentException>(() => 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<ArgumentException>(() => source.Observe(false, null, "secret connection string", "run2", Now));
}
}