generated from coulomb/repo-seed
fix: honor v2 interaction event contract
This commit is contained in:
34
Test/Main.hs
34
Test/Main.hs
@@ -3,6 +3,11 @@ module Main where
|
||||
import Test.Hspec
|
||||
import IHP.Prelude
|
||||
import qualified Test.Architecture.LayerBoundarySpec as LayerBoundary
|
||||
import Data.Aeson (object, toJSON, (.=))
|
||||
import Web.Controller.Api.V2.InteractionEvents
|
||||
( declaredEventTypeNames, manifestAllowsEvent, metadataFromJsonBody
|
||||
, metadataParamOrEmpty
|
||||
)
|
||||
|
||||
main :: IO ()
|
||||
main = hspec do
|
||||
@@ -10,4 +15,33 @@ main = hspec do
|
||||
it "should pass" do
|
||||
1 + 1 `shouldBe` (2 :: Int)
|
||||
|
||||
describe "API v2 interaction-event manifest validation" do
|
||||
let opsEventTypes = toJSON
|
||||
( [ "ops-endpoint-verified"
|
||||
, "ops-workflow-started"
|
||||
] :: [Text]
|
||||
)
|
||||
|
||||
it "decodes manifest-declared event types from JSON arrays" do
|
||||
declaredEventTypeNames opsEventTypes
|
||||
`shouldBe` ["ops-endpoint-verified", "ops-workflow-started"]
|
||||
|
||||
it "allows manifest-declared ops-owned domain events" do
|
||||
manifestAllowsEvent "ops-endpoint-verified" opsEventTypes
|
||||
`shouldBe` True
|
||||
|
||||
it "rejects events absent from an active manifest declaration" do
|
||||
manifestAllowsEvent "clicked" opsEventTypes
|
||||
`shouldBe` False
|
||||
|
||||
it "keeps empty declarations unrestricted for legacy manifests" do
|
||||
manifestAllowsEvent "clicked" (toJSON ([] :: [Text]))
|
||||
`shouldBe` True
|
||||
|
||||
it "preserves submitted metadata values and defaults missing metadata" do
|
||||
let metadata = object ["source" .= ("ops-hub" :: Text)]
|
||||
metadataFromJsonBody (object ["metadata" .= metadata]) `shouldBe` Just metadata
|
||||
metadataParamOrEmpty (Just metadata) `shouldBe` metadata
|
||||
metadataParamOrEmpty Nothing `shouldBe` object []
|
||||
|
||||
LayerBoundary.spec
|
||||
|
||||
Reference in New Issue
Block a user