using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using SSPCTester.Devices.Config; using SSPCTester.Devices.Drivers.Mock; using SSPCTester.Logic.Models; using SSPCTester.Logic.Storage; namespace SSPCTester.Tests; public sealed class ChannelNumberingTests { [Fact] public async Task MockSspc_Accepts1To24AndRejectsZero() { var sspc = new MockSspc(Options.Create(new DeviceOptions()), NullLogger.Instance); await sspc.TurnOnAsync(1); await sspc.TurnOnAsync(24); Assert.True(await sspc.GetChannelStateAsync(1)); Assert.True(await sspc.GetChannelStateAsync(24)); await Assert.ThrowsAsync(() => sspc.TurnOnAsync(0)); } [Fact] public async Task LoadingLegacyZeroBasedProject_ClearsChannelResults() { string folder = Path.Combine(Path.GetTempPath(), "SSPCTester.Tests", Guid.NewGuid().ToString("N")); Directory.CreateDirectory(folder); try { await File.WriteAllTextAsync(Path.Combine(folder, "project.json"), """ { "Name": "legacy", "BasicResults": [ { "Channel": 0 } ], "CurveResults": [ { "Channel": 0 } ], "PowerResults": [ { "Channel": 0 } ] } """); var store = new ProjectStore(); Project? project = await store.LoadAsync(folder); Assert.NotNull(project); Assert.Empty(project.BasicResults); Assert.Empty(project.CurveResults); Assert.Empty(project.PowerResults); } finally { if (Directory.Exists(folder)) Directory.Delete(folder, true); } } }