From 285874777a182295e7ff0299b56800f5dc4e1883 Mon Sep 17 00:00:00 2001 From: Sven van Heugten Date: Sun, 4 Jan 2026 10:23:36 +0100 Subject: [PATCH] Get rid of NightLightStateMachine in the tests --- NightLight.Core.Tests/FakeHome.fs | 23 +++++++++---- .../NightLight.Core.Tests.fsproj | 1 - .../NightLightStateMachine.fs | 34 ------------------- 3 files changed, 17 insertions(+), 41 deletions(-) delete mode 100644 NightLight.Core.Tests/NightLightStateMachine.fs diff --git a/NightLight.Core.Tests/FakeHome.fs b/NightLight.Core.Tests/FakeHome.fs index f9b9d2d..9fe9223 100644 --- a/NightLight.Core.Tests/FakeHome.fs +++ b/NightLight.Core.Tests/FakeHome.fs @@ -3,6 +3,7 @@ namespace NightLight.Core.Tests open System open System.Text.RegularExpressions open NightLight.Core.Models +open NightLight.Core.Core open FsToolkit.ErrorHandling open FSharp.Data @@ -33,7 +34,12 @@ type FakeLight(light: Light) = brightness <- newBrightness type FakeHome(now: DateTime) = - let nightLightStateMachine = NightLightStateMachine now + let mutable nightLightStateMachine = State now + + let assertIsOkAndGet result = + match result with + | Ok value -> value + | Error error -> failwith $"Expected Ok, got Error {error}" let friendlyNameToFakeLight = lights @@ -57,6 +63,13 @@ type FakeHome(now: DateTime) = } |> ignore + let sendEvent event = + let newState, commands = + event |> nightLightStateMachine.OnEventReceived |> assertIsOkAndGet + + commands |> Seq.iter processCommand + nightLightStateMachine <- newState + member _.LightStates = friendlyNameToFakeLight.Values |> Seq.map _.LightWithState member _.Interact(interaction: Interaction) = @@ -70,9 +83,7 @@ type FakeHome(now: DateTime) = ""type"": ""device_announce"", ""data"": {{ ""friendly_name"": ""{light.FriendlyName}"" }} }}" } - |> nightLightStateMachine.SendMessage + |> ReceivedZigbeeEvent + |> sendEvent | HumanInteraction(LightTurnedOff light) -> friendlyNameToFakeLight[light.FriendlyName].TurnOff() - | TimeChanged time -> nightLightStateMachine.ChangeTime time - - nightLightStateMachine.TransmittedCommands |> Seq.iter processCommand - nightLightStateMachine.ClearTransmittedCommands() + | TimeChanged time -> time |> Event.TimeChanged |> sendEvent diff --git a/NightLight.Core.Tests/NightLight.Core.Tests.fsproj b/NightLight.Core.Tests/NightLight.Core.Tests.fsproj index 7a4c7eb..5d37e21 100644 --- a/NightLight.Core.Tests/NightLight.Core.Tests.fsproj +++ b/NightLight.Core.Tests/NightLight.Core.Tests.fsproj @@ -7,7 +7,6 @@ - diff --git a/NightLight.Core.Tests/NightLightStateMachine.fs b/NightLight.Core.Tests/NightLightStateMachine.fs deleted file mode 100644 index 993157f..0000000 --- a/NightLight.Core.Tests/NightLightStateMachine.fs +++ /dev/null @@ -1,34 +0,0 @@ -namespace NightLight.Core.Tests - -open System -open System.Collections.Generic -open FsToolkit.ErrorHandling -open NightLight.Core.Models -open NightLight.Core.Core - -type NightLightStateMachine(now: DateTime) = - let mutable state = State now - - let transmittedCommands = new List() - - let assertIsOk (result: Result) : unit = - match result with - | Ok() -> () - | Error error -> failwith $"Expected Ok, got Error {error}" - - let sendEvent event = - result { - let! newState, commands = state.OnEventReceived event - state <- newState - transmittedCommands.AddRange commands - } - |> assertIsOk - - member _.TransmittedCommands = transmittedCommands.AsReadOnly() - - member _.SendMessage message = - ReceivedZigbeeEvent message |> sendEvent - - member _.ChangeTime time = TimeChanged time |> sendEvent - - member _.ClearTransmittedCommands() = transmittedCommands.Clear()