Files
2026-11-09 16:10:05 +08:00

43 lines
1.7 KiB
C#

using Evergreen.Health.Application.Health.Devices.Environment;
using Evergreen.Health.Application.Health.Integrations.HomeAssistant;
using Evergreen.Health.Application.Health.Services;
using Microsoft.Extensions.Options;
using System.Text.Json;
using Xunit;
namespace Admin.NET.Test.Health;
public sealed class ClimateAdviceBindingTests
{
[Theory]
[InlineData("", "15", "heat", true)]
[InlineData("climate.room", "15", "heat", false)]
[InlineData("climate.room", "28", "cool", false)]
[InlineData("", "24", "off", false)]
public void AdviceUsesBindingNotPowerStateToReportPendingIntegration(
string climate, string temperature, string mode, bool pending)
{
var options = Options.Create(new HomeAssistantOptions
{
Entities = new() { Climate = climate, Temperature = "sensor.room" }
});
var gateway = new FakeHaGateway();
var states = new Dictionary<string, HomeAssistantState>
{
["sensor.room"] = new()
{
EntityId = "sensor.room", State = temperature,
LastReported = DateTimeOffset.UtcNow,
Attributes = JsonSerializer.SerializeToElement(new { unit_of_measurement = "°C" })
}
};
var service = new EnvironmentAdviceService(gateway,
new IndoorEnvironmentReader(options, TimeProvider.System), options);
var output = service.Get(null, states);
Assert.Equal(mode, output.ClimateAdvice.Mode);
Assert.Equal(pending, output.ClimateAdvice.PendingIntegration);
Assert.Null(output.ClimateAdvice.TargetTemperatureCelsius);
Assert.Empty(gateway.Calls);
}
}