packages feed

patrol-0.1.0.1: source/test-suite/Patrol/Type/ResponseSpec.hs

{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TypeApplications #-}

module Patrol.Type.ResponseSpec where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.QQ.Simple as Aeson
import qualified Data.UUID as Uuid
import qualified Patrol.Type.EventId as EventId
import qualified Patrol.Type.Response as Response
import qualified Test.Hspec as Hspec

spec :: Hspec.Spec
spec = Hspec.describe "Patrol.Type.Response" $ do
  Hspec.describe "FromJSON" $ do
    Hspec.it "works" $ do
      let json = [Aeson.aesonQQ| { "id": "00112233445566778899aabbccddeeff" } |]
          eventId = EventId.fromUuid $ Uuid.fromWords64 0x0011223344556677 0x8899aabbccddeeff
          response = Response.Response {Response.id = eventId}
      Aeson.fromJSON json `Hspec.shouldBe` Aeson.Success response

    Hspec.it "fails with the wrong type" $ do
      let json = [Aeson.aesonQQ| null |]
      Aeson.fromJSON @Response.Response json `Hspec.shouldBe` Aeson.Error "parsing Response failed, expected Object, but encountered Null"