packages feed

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

{-# LANGUAGE QuasiQuotes #-}

module Patrol.Type.UserSpec where

import qualified Data.Aeson as Aeson
import qualified Data.Aeson.QQ.Simple as Aeson
import qualified Data.Map as Map
import qualified Data.Text as Text
import qualified Patrol.Type.Geo as Geo
import qualified Patrol.Type.User as User
import qualified Test.Hspec as Hspec

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

    Hspec.it "works with some data" $ do
      let user = User.empty {User.data_ = Map.singleton (Text.pack "example-data") (Aeson.Bool True)}
          json = [Aeson.aesonQQ| { "data": { "example-data": true } } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with an email" $ do
      let user = User.empty {User.email = Text.pack "example-email"}
          json = [Aeson.aesonQQ| { "email": "example-email" } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with a geo" $ do
      let geo = Geo.empty {Geo.city = Text.pack "example-city"}
          user = User.empty {User.geo = Just geo}
          json = [Aeson.aesonQQ| { "geo": { "city": "example-city" } } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with an id" $ do
      let user = User.empty {User.id = Text.pack "example-id"}
          json = [Aeson.aesonQQ| { "id": "example-id" } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with an IP address" $ do
      let user = User.empty {User.ipAddress = Text.pack "example-ip-address"}
          json = [Aeson.aesonQQ| { "ip_address": "example-ip-address" } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with a name" $ do
      let user = User.empty {User.name = Text.pack "example-name"}
          json = [Aeson.aesonQQ| { "name": "example-name" } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with a segment" $ do
      let user = User.empty {User.segment = Text.pack "example-segment"}
          json = [Aeson.aesonQQ| { "segment": "example-segment" } |]
      Aeson.toJSON user `Hspec.shouldBe` json

    Hspec.it "works with a username" $ do
      let user = User.empty {User.username = Text.pack "example-username"}
          json = [Aeson.aesonQQ| { "username": "example-username" } |]
      Aeson.toJSON user `Hspec.shouldBe` json