packages feed

hasklepias-0.8.3: test/EventData/Context/DomainSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module EventData.Context.DomainSpec (spec) where

import EventData.Context.Domain
import Test.Hspec                       ( it, shouldBe, Spec )
import Control.Lens                     ( preview, (^.), (^?), (.~), over )
import Control.Monad                    ( join )
import Data.Aeson                       ( decode )
import Data.Text                        ( Text, unpack )
import Data.Text.Read                   ( rational )
import qualified Data.ByteString.Lazy as B

dmo :: Domain
dmo = Demographics $ DemographicsFacts (DemographicsInfo BirthYear (Just "1987"))

myIntMap :: Text -> Maybe Integer -- TODO: this is ridiculous
myIntMap x =  fmap floor (either (const Nothing) (Just . fst) (Data.Text.Read.rational x))

spec :: Spec
spec = do
    it "preview demographics facts" $
      dmo ^? _Demographics `shouldBe` Just (DemographicsFacts( DemographicsInfo BirthYear (Just "1987")))
    it "preview demographic field" $
      fmap (^.demo.field) (dmo ^? _Demographics)  `shouldBe` Just BirthYear
    it "preview birthyear" $
      ((^.demo.info) =<< preview _Demographics dmo)  `shouldBe` Just "1987"
    it "preview birthyear as Integer" $
      (myIntMap =<< ((^.demo.info) =<< preview _Demographics dmo))  `shouldBe` Just 1987