34 lines
976 B
FSharp
34 lines
976 B
FSharp
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 = { Time = now }
|
|
|
|
let transmittedCommands = new List<Message>()
|
|
|
|
let assertIsOk (result: Result<unit, 'a>) : unit =
|
|
match result with
|
|
| Ok() -> ()
|
|
| Error error -> failwith $"Expected Ok, got Error {error}"
|
|
|
|
let sendEvent event =
|
|
result {
|
|
let! newState, commands = onEventReceived state 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()
|