mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-08-31 19:08:29 +00:00
- Introduced `FakeCrestronEnvironment` and `FakeEthernetHelper` for testing purposes. - Implemented `InMemoryCrestronDataStore` to facilitate unit tests for data storage. - Created `DebugServiceTests` to validate the behavior of debug-related services. - Added project files for unit tests targeting .NET 9.0 with necessary dependencies. - Developed production adapters (`CrestronConsoleAdapter`, `CrestronDataStoreAdapter`, `CrestronEnvironmentAdapter`, `CrestronEthernetAdapter`) to interface with the Crestron SDK. - Updated `Debug` class to utilize injected service abstractions instead of direct SDK calls. - Enhanced `ControlSystem` initialization to register service adapters before usage.
171 lines
5.4 KiB
C#
171 lines
5.4 KiB
C#
using FluentAssertions;
|
|
using PepperDash.Core.Abstractions;
|
|
using PepperDash.Core.Tests.Fakes;
|
|
using Xunit;
|
|
|
|
namespace PepperDash.Core.Tests.Logging;
|
|
|
|
/// <summary>
|
|
/// Tests for Debug-related service interfaces and implementations.
|
|
/// These tests verify the behaviour of the abstractions in isolation (no Crestron SDK required).
|
|
/// </summary>
|
|
public class DebugServiceTests
|
|
{
|
|
// -----------------------------------------------------------------------
|
|
// ICrestronDataStore — InMemoryCrestronDataStore
|
|
// -----------------------------------------------------------------------
|
|
|
|
[Fact]
|
|
public void DataStore_InitStore_SetsInitializedFlag()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
store.Initialized.Should().BeFalse("not yet initialized");
|
|
|
|
store.InitStore();
|
|
|
|
store.Initialized.Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void DataStore_SetAndGetLocalInt_RoundTrips()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
|
|
store.SetLocalInt("MyKey", 42).Should().BeTrue();
|
|
store.TryGetLocalInt("MyKey", out var value).Should().BeTrue();
|
|
value.Should().Be(42);
|
|
}
|
|
|
|
[Fact]
|
|
public void DataStore_TryGetLocalInt_ReturnsFalse_WhenKeyAbsent()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
|
|
store.TryGetLocalInt("Missing", out var value).Should().BeFalse();
|
|
value.Should().Be(0);
|
|
}
|
|
|
|
[Fact]
|
|
public void DataStore_SetAndGetLocalBool_RoundTrips()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
|
|
store.SetLocalBool("FlagKey", true).Should().BeTrue();
|
|
store.TryGetLocalBool("FlagKey", out var value).Should().BeTrue();
|
|
value.Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void DataStore_TryGetLocalBool_ReturnsFalse_WhenKeyAbsent()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
|
|
store.TryGetLocalBool("Missing", out var value).Should().BeFalse();
|
|
value.Should().BeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void DataStore_SetLocalUint_CanBeReadBackAsInt()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
|
|
store.SetLocalUint("UintKey", 3u).Should().BeTrue();
|
|
store.TryGetLocalInt("UintKey", out var value).Should().BeTrue();
|
|
value.Should().Be(3);
|
|
}
|
|
|
|
[Fact]
|
|
public void DataStore_Seed_AllowsTestSetupOfReadPaths()
|
|
{
|
|
var store = new InMemoryCrestronDataStore();
|
|
store.Seed("MyLevel", 2);
|
|
|
|
store.TryGetLocalInt("MyLevel", out var level).Should().BeTrue();
|
|
level.Should().Be(2);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
// DebugServiceRegistration
|
|
// -----------------------------------------------------------------------
|
|
|
|
[Fact]
|
|
public void ServiceRegistration_Register_StoresAllThreeServices()
|
|
{
|
|
var env = new FakeCrestronEnvironment();
|
|
var console = new NoOpCrestronConsole();
|
|
var store = new InMemoryCrestronDataStore();
|
|
|
|
DebugServiceRegistration.Register(env, console, store);
|
|
|
|
DebugServiceRegistration.Environment.Should().BeSameAs(env);
|
|
DebugServiceRegistration.Console.Should().BeSameAs(console);
|
|
DebugServiceRegistration.DataStore.Should().BeSameAs(store);
|
|
}
|
|
|
|
[Fact]
|
|
public void ServiceRegistration_Register_AcceptsNullsWithoutThrowing()
|
|
{
|
|
var act = () => DebugServiceRegistration.Register(null, null, null);
|
|
act.Should().NotThrow();
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
// ICrestronEnvironment — FakeCrestronEnvironment
|
|
// -----------------------------------------------------------------------
|
|
|
|
[Fact]
|
|
public void FakeEnvironment_DefaultsToAppliance()
|
|
{
|
|
var env = new FakeCrestronEnvironment();
|
|
env.DevicePlatform.Should().Be(DevicePlatform.Appliance);
|
|
}
|
|
|
|
[Fact]
|
|
public void FakeEnvironment_RaiseProgramStatus_FiresEvent()
|
|
{
|
|
var env = new FakeCrestronEnvironment();
|
|
ProgramStatusEventType? received = null;
|
|
env.ProgramStatusChanged += (_, e) => received = e.EventType;
|
|
|
|
env.RaiseProgramStatus(ProgramStatusEventType.Stopping);
|
|
|
|
received.Should().Be(ProgramStatusEventType.Stopping);
|
|
}
|
|
|
|
[Fact]
|
|
public void FakeEnvironment_RaiseEthernetEvent_FiresEvent()
|
|
{
|
|
var env = new FakeCrestronEnvironment();
|
|
EthernetEventType? received = null;
|
|
env.EthernetEventReceived += (_, e) => received = e.EthernetEventType;
|
|
|
|
env.RaiseEthernetEvent(EthernetEventType.LinkUp, adapter: 0);
|
|
|
|
received.Should().Be(EthernetEventType.LinkUp);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------
|
|
// ICrestronConsole — CapturingCrestronConsole
|
|
// -----------------------------------------------------------------------
|
|
|
|
[Fact]
|
|
public void CapturingConsole_PrintLine_CapturesMessage()
|
|
{
|
|
var console = new CapturingCrestronConsole();
|
|
|
|
console.PrintLine("hello world");
|
|
|
|
console.Lines.Should().ContainSingle().Which.Should().Be("hello world");
|
|
}
|
|
|
|
[Fact]
|
|
public void CapturingConsole_AddNewConsoleCommand_RecordsCommandName()
|
|
{
|
|
var console = new CapturingCrestronConsole();
|
|
|
|
console.AddNewConsoleCommand(_ => { }, "appdebug", "Sets debug level", ConsoleAccessLevel.AccessOperator);
|
|
|
|
console.RegisteredCommands.Should().ContainSingle()
|
|
.Which.Command.Should().Be("appdebug");
|
|
}
|
|
}
|