Files
ReLibreHardwareMonitor/LibreHardwareMonitor.Windows.WinUI.Tests/ViewModels/SensorSelectionServiceTests.cs
T
JMR-devandClaude Opus 4.8 6cd0694cd7 Extract SensorSelectionService from MainWindowViewModel
Moves tray/gadget sensor selection (the per-sensor 'tray'/'gadget' settings,
their key convention, and the GadgetSensorsChanged/TraySensorsChanged events)
into a focused, testable collaborator. The view model keeps thin delegating
methods and forwards the events, so its public surface (used by MainWindow) is
unchanged. Behavior is unchanged.

Adds 3 tests (persistence round-trip, event raising, tray filtering).

196 tests pass (was 193).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 10:47:40 -05:00

84 lines
3.1 KiB
C#

// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
// If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// Copyright (C) LibreHardwareMonitor and Contributors.
using System.Linq;
using LibreHardwareMonitor.Hardware;
using LibreHardwareMonitor.Windows.WinUI.Services;
using LibreHardwareMonitor.Windows.WinUI.ViewModels;
using Moq;
using Xunit;
namespace LibreHardwareMonitor.Windows.WinUI.Tests.ViewModels;
public class SensorSelectionServiceTests
{
[Fact]
public void SetSensorInTray_PersistsReadsBack_AndRaisesEvent()
{
(SensorSelectionService service, _, SensorTreeItemViewModel item) = Build();
int raised = 0;
service.TraySensorsChanged += (_, _) => raised++;
service.SetSensorInTray(item, true);
Assert.True(service.IsSensorInTray(item));
service.SetSensorInTray(item, false);
Assert.False(service.IsSensorInTray(item));
Assert.Equal(2, raised);
}
[Fact]
public void SetSensorInGadget_PersistsReadsBack_AndRaisesEvent()
{
(SensorSelectionService service, _, SensorTreeItemViewModel item) = Build();
int raised = 0;
service.GadgetSensorsChanged += (_, _) => raised++;
service.SetSensorInGadget(item, true);
Assert.True(service.IsSensorInGadget(item));
service.SetSensorInGadget(item, false);
Assert.False(service.IsSensorInGadget(item));
Assert.Equal(2, raised);
}
[Fact]
public void GetTraySensorItems_ReturnsOnlyTrayFlaggedSensors()
{
(SensorSelectionService service, SensorTreeItemViewModel root, SensorTreeItemViewModel item) = Build();
service.SetSensorInTray(item, true);
Assert.Contains(item, service.GetTraySensorItems(root));
service.SetSensorInTray(item, false);
Assert.DoesNotContain(item, service.GetTraySensorItems(root));
}
private static (SensorSelectionService Service, SensorTreeItemViewModel Root, SensorTreeItemViewModel SensorItem) Build()
{
AppSettings settings = AppSettings.LoadDefault();
var hardwareMock = new Mock<IHardware>();
var sensorMock = new Mock<ISensor>();
sensorMock.Setup(s => s.Name).Returns("Sensor");
sensorMock.Setup(s => s.SensorType).Returns(SensorType.Temperature);
sensorMock.Setup(s => s.Index).Returns(0);
sensorMock.Setup(s => s.Identifier).Returns(new Identifier("cpu", "0", "temperature", "0"));
hardwareMock.Setup(h => h.Name).Returns("CPU");
hardwareMock.Setup(h => h.HardwareType).Returns(HardwareType.Cpu);
hardwareMock.Setup(h => h.Identifier).Returns(new Identifier("cpu", "0"));
hardwareMock.Setup(h => h.Sensors).Returns([sensorMock.Object]);
hardwareMock.Setup(h => h.SubHardware).Returns([]);
var root = SensorTreeItemViewModel.CreateRoot("HOST");
root.Children.Add(SensorTreeItemViewModel.FromHardware(hardwareMock.Object, settings));
SensorTreeItemViewModel sensorItem = root.EnumerateSensors().First();
return (new SensorSelectionService(settings), root, sensorItem);
}
}