diff --git a/test/AFRPSpec.hs b/test/AFRPSpec.hs index c5074a5..1d59574 100644 --- a/test/AFRPSpec.hs +++ b/test/AFRPSpec.hs @@ -20,6 +20,7 @@ import qualified Hedgehog.Range as Range import Test.Hspec import Test.Hspec.Hedgehog import Data.Maybe (listToMaybe) +import AFRP.Diagram (emptyDiagram) fakeRequest :: Request fakeRequest = Request (sec 0) utc nil "test" @@ -536,11 +537,11 @@ sampleSpec = describe "sample" $ do -- | A stateless arrow carrying a fixed entity set, for testing propagation. subscribed :: S.Set T.Text -> Mealy Identity Int Int -subscribed ents = Mealy ents $ \_ -> Fun $ \_ a -> a +subscribed ents = Mealy ents emptyDiagram $ \_ -> Fun $ \_ a -> a -- | Same as 'subscribed' but yields a function, for testing '<*>'. subscribedF :: S.Set T.Text -> Mealy Identity Int (Int -> Int) -subscribedF ents = Mealy ents $ \_ -> Fun $ \_ a -> (a +) +subscribedF ents = Mealy ents emptyDiagram $ \_ -> Fun $ \_ a -> (a +) entitiesSpec :: Spec entitiesSpec = describe "entities" $ do diff --git a/test/KitchenSpec.hs b/test/KitchenSpec.hs index ab615c1..695b1cb 100644 --- a/test/KitchenSpec.hs +++ b/test/KitchenSpec.hs @@ -11,6 +11,7 @@ import HomeAssistant.Controller.Kitchen import Support import Test.Hspec import Data.Default (def) +import Data.Time (getCurrentTime, addUTCTime) -- Helper functions for creating test events testDinnerLightLevel :: Int -> Event Value @@ -37,9 +38,15 @@ dinnerTableSpec = describe "dinnerTableController" $ do services (runHASS dinnerTableController [testDinnerLightLevel 10, testDinnerPresence "on"]) `shouldBe` [[switchService [EntityId "switch.adaptive_lighting_ruokapoydan_valot_sleep_mode"] True], [switchService [EntityId "switch.adaptive_lighting_ruokapoydan_valot_sleep_mode"] False, light [EntityId "light.kitchen_dining_large"] (On def)]] - it "turns lights off when presence is unoccupied" $ do - services (runHASS dinnerTableController [testDinnerLightLevel 10, testDinnerPresence "off"]) + it "turns lights to sleep when presence is unoccupied" $ do + now <- getCurrentTime + services (runHASSTimed dinnerTableController [(now, testDinnerLightLevel 10), (now, testDinnerPresence "off")]) `shouldBe` [[switchService [EntityId "switch.adaptive_lighting_ruokapoydan_valot_sleep_mode"] True], []] + it "turns lights off when no presence for 300 seconds" $ do + now <- getCurrentTime + let later = 305 `addUTCTime` now + services (runHASSTimed dinnerTableController [(now, testDinnerLightLevel 10), (now, testDinnerPresence "off"), (later, Tick)]) + `shouldBe` [[switchService [EntityId "switch.adaptive_lighting_ruokapoydan_valot_sleep_mode"] True], [], [switchService [EntityId "switch.adaptive_lighting_ruokapoydan_valot_sleep_mode"] False, light [EntityId "light.kitchen_dining_large"] Off]] it "does nothing on Tick" $ do services (runHASS dinnerTableController [Tick])