using MeterVault.Core.Domain;
namespace MeterVault.Core.Tests;
///
/// Which connector serves which source. The source dialog and the connector page's way back both lean
/// on it, and a wrong answer produces a source that saves cleanly and never ingests.
///
public sealed class SourceRoutingTests
{
[Theory]
[InlineData(SourceType.HomeAssistant, EndpointType.HomeAssistant)]
[InlineData(SourceType.Mqtt, EndpointType.MqttBroker)]
[InlineData(SourceType.Tasmota, EndpointType.MqttBroker)]
public void Live_sources_need_a_connector(SourceType source, EndpointType endpoint)
{
Assert.Equal(endpoint, SourceRouting.RequiredEndpoint(source));
Assert.True(SourceRouting.Serves(endpoint, source));
}
[Theory]
[InlineData(SourceType.Manual)]
[InlineData(SourceType.Import)]
[InlineData(SourceType.Virtual)]
public void Other_sources_need_none(SourceType source)
{
Assert.Null(SourceRouting.RequiredEndpoint(source));
Assert.All(Enum.GetValues(), endpoint => Assert.False(SourceRouting.Serves(endpoint, source)));
}
[Fact]
public void A_connector_never_serves_the_other_kind()
{
Assert.False(SourceRouting.Serves(EndpointType.HomeAssistant, SourceType.Tasmota));
Assert.False(SourceRouting.Serves(EndpointType.MqttBroker, SourceType.HomeAssistant));
}
[Fact]
public void Every_connector_kind_defaults_to_a_source_it_serves()
{
foreach (var endpoint in Enum.GetValues())
{
Assert.True(SourceRouting.Serves(endpoint, SourceRouting.DefaultSourceFor(endpoint)));
}
}
}