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