From 7125fee28ea4926e6d1571f4ad32fc882bed075e Mon Sep 17 00:00:00 2001 From: Sven van Heugten Date: Sun, 4 Jan 2026 10:42:47 +0100 Subject: [PATCH] Parse color commands in FakeHome --- NightLight.Core.Tests/FakeHome.fs | 27 ++++++++++++++++++++++-- NightLight.Core.Tests/NightLightTests.fs | 2 +- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/NightLight.Core.Tests/FakeHome.fs b/NightLight.Core.Tests/FakeHome.fs index 3d758d4..e7c0112 100644 --- a/NightLight.Core.Tests/FakeHome.fs +++ b/NightLight.Core.Tests/FakeHome.fs @@ -15,15 +15,21 @@ type Interaction = | HumanInteraction of HumanInteraction | TimeChanged of DateTime +type Color = + | White + | Yellow + | Red + type LightState = | Off - | On of Brightness: byte + | On of Brightness: byte * Color: Color type FakeLight(light: Light) = let mutable hasPower = false let mutable brightness: byte = 255uy + let mutable color: Color = White - member _.LightWithState = light, if hasPower then On brightness else Off + member _.LightWithState = light, if hasPower then On(brightness, color) else Off member _.TurnOn() = hasPower <- true @@ -33,6 +39,10 @@ type FakeLight(light: Light) = if hasPower then brightness <- newBrightness + member _.SetColor(newColor: Color) = + if hasPower then + color <- newColor + type FakeHome(now: DateTime) = let mutable nightLightStateMachine = NightLightStateMachine now @@ -60,6 +70,19 @@ type FakeHome(now: DateTime) = | Some(JsonValue.Number newBrightness) -> fakeLight.SetBrightness(byte newBrightness) | None -> () | value -> failwith $"Unexpected brightness value {value}" + + match parsedPayload.TryGetProperty "color" with + | Some color -> + match color.TryGetProperty "x", color.TryGetProperty "y" with + | Some(JsonValue.Number 0.3227M), Some(JsonValue.Number 0.329M) -> fakeLight.SetColor White + | Some(JsonValue.Number 0.6942M), Some(JsonValue.Number 0.2963M) -> fakeLight.SetColor Red + | _ -> failwith $"Unexpected color value {color}" + | None -> () + + match parsedPayload.TryGetProperty "color_temp" with + | Some(JsonValue.Number temperature) when temperature = 454M -> fakeLight.SetColor Yellow + | None -> () + | value -> failwith $"Unexpected color temperature value {value}" } |> ignore diff --git a/NightLight.Core.Tests/NightLightTests.fs b/NightLight.Core.Tests/NightLightTests.fs index 40bb097..b9a361e 100644 --- a/NightLight.Core.Tests/NightLightTests.fs +++ b/NightLight.Core.Tests/NightLightTests.fs @@ -11,6 +11,6 @@ type NightLightTests() = fakeHome.LightStates |> Seq.choose (fun (_, state) -> match state with - | On brightness -> Some brightness + | On(brightness, _) -> Some brightness | Off -> None) |> Seq.forall (fun brightness -> brightness < 255uy)