packages feed

datastar-hs-1.1.0.1: test/Hypermedia/Datastar/ReadSignalsSpec.hs

module Hypermedia.Datastar.ReadSignalsSpec (spec) where

import Test.Hspec

import Data.Aeson (FromJSON (..), withObject, (.:))
import Data.Text (Text)

import Network.Wai (defaultRequest, queryString, requestMethod)

import Hypermedia.Datastar.WAI (readSignals)

newtype Msg = Msg Text deriving (Eq, Show)

instance FromJSON Msg where
  parseJSON = withObject "Msg" $ \o -> Msg <$> o .: "msg"

spec :: Spec
spec = describe "readSignals" $ do
  let req q = defaultRequest{requestMethod = "GET", queryString = [("datastar", Just q)]}

  it "decodes JSON signals from the query string exactly as sent" $ do
    result <- readSignals (req "{\"msg\":\"a+b\"}")
    result `shouldBe` Right (Msg "a+b")