51 lines
2.2 KiB
C#
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));
|
|
}
|
|
}
|