Files
ReLibreHardwareMonitor/LibreHardwareMonitor.Windows.WinUI.Tests/Services/HardwareMonitorServiceTests.cs
T
JMR-devandClaude Opus 4.8 463e80709f Add characterization tests; consolidate SensorFormatter switches
Establishes a safety net before refactoring, and lands the first
behavior-preserving cleanup.

Tests (no production behavior change):
- SensorFormatter: full per-type coverage of GetFormatString, FormatValue,
  and GetPlotUnit across every SensorType.
- RemoteWebServer: extract testable seams (ResolveRoute, VerifyCredentials,
  internal pure helpers) and pin routing (incl. the no-hijack rule), query
  and Prometheus parsing, JSON/metric shape, credential semantics, and the
  legacy SHA-256 vector.
- HardwareMonitorService: pin the enable-flag -> settings-key mapping.
- Logger: add a TimeProvider/base-dir test seam; deterministic rotation tests.
- Add [InternalsVisibleTo] for the test project.

Cleanup:
- Collapse SensorFormatter's three parallel SensorType switches into one
  GetFormat source of truth; dedupe CelsiusToFahrenheit. Verified identical
  by the new characterization tests.

167 tests pass (was 55).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 19:58:44 -05:00

89 lines
3.4 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;
using LibreHardwareMonitor.Windows.WinUI.Services;
using Xunit;
namespace LibreHardwareMonitor.Windows.WinUI.Tests.Services;
// Characterization tests pinning behavior the Phase 4 cleanup must preserve: the exact settings keys each
// hardware-enable flag writes (the planned (getter, setter, key) table must keep these identical for config
// compatibility), and the basic RebuildTree/TreeRebuilt contract. The async tree-rebuild coalescer is covered
// once it is extracted into its own testable unit during Phase 4.
public class HardwareMonitorServiceTests
{
[Fact]
public void EnableFlags_WriteExpectedSettingKeysAndComputerFlags()
{
using var service = new HardwareMonitorService(AppSettings.LoadDefault());
service.IsMotherboardEnabled = false;
Assert.False(service.Settings.GetValue("mainboardMenuItem", true));
Assert.False(service.Computer.IsMotherboardEnabled);
service.IsCpuEnabled = false;
Assert.False(service.Settings.GetValue("cpuMenuItem", true));
Assert.False(service.Computer.IsCpuEnabled);
service.IsMemoryEnabled = false;
Assert.False(service.Settings.GetValue("ramMenuItem", true));
Assert.False(service.Computer.IsMemoryEnabled);
service.IsGpuEnabled = false;
Assert.False(service.Settings.GetValue("gpuMenuItem", true));
Assert.False(service.Computer.IsGpuEnabled);
service.IsPowerMonitorEnabled = false;
Assert.False(service.Settings.GetValue("powerMonitorMenuItem", true));
Assert.False(service.Computer.IsPowerMonitorEnabled);
service.IsControllerEnabled = false;
Assert.False(service.Settings.GetValue("fanControllerMenuItem", true));
Assert.False(service.Computer.IsControllerEnabled);
service.IsStorageEnabled = false;
Assert.False(service.Settings.GetValue("hddMenuItem", true));
Assert.False(service.Computer.IsStorageEnabled);
service.IsNetworkEnabled = false;
Assert.False(service.Settings.GetValue("nicMenuItem", true));
Assert.False(service.Computer.IsNetworkEnabled);
service.IsPsuEnabled = false;
Assert.False(service.Settings.GetValue("psuMenuItem", true));
Assert.False(service.Computer.IsPsuEnabled);
service.IsBatteryEnabled = false;
Assert.False(service.Settings.GetValue("batteryMenuItem", true));
Assert.False(service.Computer.IsBatteryEnabled);
}
[Fact]
public void RebuildTree_RaisesTreeRebuiltAndPopulatesRoot()
{
using var service = new HardwareMonitorService(AppSettings.LoadDefault());
bool raised = false;
service.TreeRebuilt += (_, _) => raised = true;
service.RebuildTree();
Assert.True(raised);
Assert.NotNull(service.Root);
Assert.Equal(Environment.MachineName, service.Root.Text);
}
[Fact]
public void RebuildTree_WithoutRaiseFlag_DoesNotInvokeEvent()
{
using var service = new HardwareMonitorService(AppSettings.LoadDefault());
bool raised = false;
service.TreeRebuilt += (_, _) => raised = true;
service.RebuildTree(raiseTreeRebuilt: false);
Assert.False(raised);
}
}