Move handler flag check from bus to writer with skip logging
This commit is contained in:
+24
-1
@@ -3,13 +3,22 @@
|
||||
module ConnectionSpec (spec) where
|
||||
|
||||
import AFRP (Request(..))
|
||||
import Control.Monad.IO.Class (liftIO)
|
||||
import Data.Aeson (object, (.=))
|
||||
import Data.Foldable (forM_)
|
||||
import Data.Maybe (fromJust)
|
||||
import Data.Text (Text)
|
||||
import Data.Time (UTCTime (..), utc)
|
||||
import Data.UUID (fromString)
|
||||
import HomeAssistant.Controller (Service (..), Target(..))
|
||||
import HomeAssistant.Runtime.Connection (encodeService, isTriggerEvent)
|
||||
import HomeAssistant.Runtime.Bus
|
||||
import HomeAssistant.Runtime.Flags (loadFlags, setEnabled)
|
||||
import HomeAssistant.Runtime.Metrics (registerAppMetrics)
|
||||
import HomeAssistant.Runtime.RateLimit (registerRateLimitMetrics, slidingWindowLimiter)
|
||||
import HomeAssistant.Runtime.Connection (dispatchService, encodeService, isTriggerEvent)
|
||||
import Katip (Namespace (Namespace), Severity (InfoS), runKatipContextT)
|
||||
import System.IO.Temp (withTempDirectory)
|
||||
import qualified System.Metrics as Metrics
|
||||
import Test.Hspec
|
||||
|
||||
spec :: Spec
|
||||
@@ -44,6 +53,20 @@ spec = do
|
||||
it "is false when there is no type" $
|
||||
isTriggerEvent (object ["id" .= (1 :: Int)]) `shouldBe` False
|
||||
|
||||
describe "dispatchService" $ do
|
||||
it "skips disabled handlers without consuming a call id" $ do
|
||||
store <- Metrics.newStore
|
||||
m <- registerAppMetrics store
|
||||
rlMetrics <- registerRateLimitMetrics store
|
||||
limiter <- slidingWindowLimiter rlMetrics 10 20
|
||||
withTempDirectory "/tmp" "connection-spec" $ \dir -> do
|
||||
flags <- loadFlags dir ["test"]
|
||||
setEnabled flags "test" False
|
||||
withBus InfoS m flags $ \bus -> do
|
||||
runKatipContextT (busLogEnv bus) () (Namespace ["connection"]) $
|
||||
dispatchService limiter bus (req 1) (lightOn [EntityId "light.test"])
|
||||
generateCallId (busGen bus) `shouldReturn` 1
|
||||
|
||||
|
||||
req :: Int -> Request
|
||||
req n = Request (UTCTime (toEnum 0) (fromIntegral (0 :: Int))) utc
|
||||
|
||||
Reference in New Issue
Block a user