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