From 109ebde64af3d0aad40924fa1832fc47a99f7014 Mon Sep 17 00:00:00 2001 From: Sven van Heugten Date: Sun, 4 Jan 2026 09:09:50 +0100 Subject: [PATCH] Write the first test --- NightLight.Core.Tests/Arbitraries.fs | 22 +++++++++++++++++++ .../NightLight.Core.Tests.fsproj | 2 ++ NightLight.Core.Tests/NightLightTests.fs | 20 +++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 NightLight.Core.Tests/Arbitraries.fs create mode 100644 NightLight.Core.Tests/NightLightTests.fs diff --git a/NightLight.Core.Tests/Arbitraries.fs b/NightLight.Core.Tests/Arbitraries.fs new file mode 100644 index 0000000..39433dc --- /dev/null +++ b/NightLight.Core.Tests/Arbitraries.fs @@ -0,0 +1,22 @@ +namespace NightLight.Core.Tests + +open System +open FsCheck.FSharp +open NightLight.Core.Models + +type Arbitraries = + static member Interaction() = + let genTimeChangedInteraction = + gen { + let! time = ArbMap.defaults |> ArbMap.generate + return Interaction.TimeChanged time + } + + let genHumanInteraction = + gen { + let! light = Gen.elements lights + let! humanInteraction = Gen.elements [ LightTurnedOn light; LightTurnedOff light ] + return Interaction.HumanInteraction humanInteraction + } + + Gen.oneof [ genTimeChangedInteraction; genHumanInteraction ] |> Arb.fromGen diff --git a/NightLight.Core.Tests/NightLight.Core.Tests.fsproj b/NightLight.Core.Tests/NightLight.Core.Tests.fsproj index 4979a7a..7a4c7eb 100644 --- a/NightLight.Core.Tests/NightLight.Core.Tests.fsproj +++ b/NightLight.Core.Tests/NightLight.Core.Tests.fsproj @@ -9,6 +9,8 @@ + + diff --git a/NightLight.Core.Tests/NightLightTests.fs b/NightLight.Core.Tests/NightLightTests.fs new file mode 100644 index 0000000..b7419fd --- /dev/null +++ b/NightLight.Core.Tests/NightLightTests.fs @@ -0,0 +1,20 @@ +module NightLight.Core.Tests.NightLightTests + +open FsCheck.Xunit + +let private assertIsOk (result: Result) : unit = + match result with + | Ok() -> () + | Error error -> failwith $"Expected Ok, got Error {error}" + +[ |])>] +let ``Brightness should always be under 255`` (fakeHome: FakeHome) (interactions: Interaction list) = + interactions + |> Seq.iter (fun interaction -> fakeHome.Interact interaction |> assertIsOk) + + fakeHome.LightStates + |> Seq.choose (fun (_, state) -> + match state with + | On brightness -> Some brightness + | Off -> None) + |> Seq.forall (fun brightness -> brightness < 255uy)