module TypesSpec where
import Data.Aeson
import GHC.Exts (fromList)
import Test.Hspec
import MixPanel.Types.Core
import MixPanel.Types.EngageData
import MixPanel.Types.TrackData
spec :: Spec
spec = describe "TrackData/EngageData" $ do
it "TrackData merges properties" $
let
td = TrackData "foobar" $ mkProperties (AuthToken "token123") props
props :: Object
props = fromList [ "distinct_id" .= ("bar" :: String) ]
in encode td `shouldBe` "{\"event\":\"foobar\",\"properties\":{\"time\":null,\"token\":\"token123\",\"ip\":null,\"distinct_id\":\"bar\"}}"
it "EngageData merges properties" $
let
ed = mkEngageData (AuthToken "foobar") "123" $ Set (fromList [ "customProperty" .= ("foobar" :: String)])
in encode ed `shouldBe` "{\"$distinct_id\":\"123\",\"$set\":{\"customProperty\":\"foobar\"},\"$token\":\"foobar\",\"$ip\":null,\"$ignore_time\":null,\"$time\":null}"