reddit-0.2.3.0: test/Reddit/Types/UserSpec.hs
module Reddit.Types.UserSpec where
import Reddit.Types.User
import Data.Aeson (eitherDecode)
import Test.Hspec
import qualified Data.ByteString.Lazy.Char8 as ByteString
isRight :: Either a b -> Bool
isRight = const False `either` const True
main :: IO ()
main = hspec spec
spec :: Spec
spec =
describe "Reddit.Types.User" $ do
aboutMeExample <- runIO $ ByteString.readFile "test/data/aboutMe_example.json"
getUserInfoExample <- runIO $ ByteString.readFile "test/data/getUserInfo_example.json"
it "should be able to compare usernames for equality" $ do
Username "Intolerable" `shouldBe` Username "intolerable"
Username "Intolerable" `shouldBe` Username "Intolerable"
Username "INTOLERABLE" `shouldBe` Username "intolerable"
it "can read the examples" $ do
aboutMeExample `shouldSatisfy` not . ByteString.null
getUserInfoExample `shouldSatisfy` not . ByteString.null
it "can parse a reddit user from json" $ do
let decoded = eitherDecode aboutMeExample :: Either String User
decoded `shouldSatisfy` isRight
case decoded of
Left _ -> expectationFailure "json parse failed"
Right user -> do
userID user `shouldBe` "4gf25"
userName user `shouldBe` Username "Intolerable"
linkKarma user `shouldBe` 2399
commentKarma user `shouldBe` 44631
hasMail user `shouldBe` Just False
hasModMail user `shouldBe` Just False
isFriend user `shouldBe` False
userIsOver18 user `shouldBe` Just True
isMod user `shouldBe` True
hasGold user `shouldBe` False
hasVerifiedEmail user `shouldBe` Just True
it "can parse another reddit user from json" $ do
let decoded = eitherDecode getUserInfoExample :: Either String User
decoded `shouldSatisfy` isRight
case decoded of
Left _ -> expectationFailure "json parse failed"
Right user -> do
userID user `shouldBe` "gdifp"
userName user `shouldBe` Username "intolerable-bot"
linkKarma user `shouldBe` 1
commentKarma user `shouldBe` 2668
hasMail user `shouldBe` Nothing
hasModMail user `shouldBe` Nothing
isFriend user `shouldBe` False
userIsOver18 user `shouldBe` Nothing
isMod user `shouldBe` False
hasGold user `shouldBe` False
hasVerifiedEmail user `shouldBe` Just True