packages feed

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

{-# LANGUAGE QuasiQuotes #-}

module Patrol.Type.AppContextSpec where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.QQ.Simple as Aeson
import qualified Data.Text as Text
import qualified Data.Time as Time
import qualified Patrol.Type.AppContext as AppContext
import qualified Test.Hspec as Hspec

spec :: Hspec.Spec
spec = Hspec.describe "Patrol.Type.AppContext" $ do
  Hspec.describe "ToJSON" $ do
    Hspec.it "works" $ do
      let appContext = AppContext.empty
          json = [Aeson.aesonQQ| {} |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with an app build" $ do
      let appContext = AppContext.empty {AppContext.appBuild = Text.pack "example-app-build"}
          json = [Aeson.aesonQQ| { "app_build": "example-app-build" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with an app identifier" $ do
      let appContext = AppContext.empty {AppContext.appIdentifier = Text.pack "example-app-identifier"}
          json = [Aeson.aesonQQ| { "app_identifier": "example-app-identifier" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with an app memory" $ do
      let appContext = AppContext.empty {AppContext.appMemory = Just 0}
          json = [Aeson.aesonQQ| { "app_memory": 0 } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with an app name" $ do
      let appContext = AppContext.empty {AppContext.appName = Text.pack "example-app-name"}
          json = [Aeson.aesonQQ| { "app_name": "example-app-name" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with an app start time" $ do
      let appContext = AppContext.empty {AppContext.appStartTime = Just $ Time.UTCTime (Time.fromGregorian 1970 1 1) 0}
          json = [Aeson.aesonQQ| { "app_start_time": "1970-01-01T00:00:00Z" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with an app version" $ do
      let appContext = AppContext.empty {AppContext.appVersion = Text.pack "example-app-version"}
          json = [Aeson.aesonQQ| { "app_version": "example-app-version" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with a build type" $ do
      let appContext = AppContext.empty {AppContext.buildType = Text.pack "example-build-type"}
          json = [Aeson.aesonQQ| { "build_type": "example-build-type" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json

    Hspec.it "works with a device app hash" $ do
      let appContext = AppContext.empty {AppContext.deviceAppHash = Text.pack "example-device-app-hash"}
          json = [Aeson.aesonQQ| { "device_app_hash": "example-device-app-hash" } |]
      Aeson.toJSON appContext `Hspec.shouldBe` json