packages feed

reddit-0.2.3.0: test-io/Reddit/Actions/PostSpec.hs

module Reddit.Actions.PostSpec where

import Reddit.Actions.Post
import Reddit.Types.Listing
import Reddit.Types.Post
import Reddit.Types.Subreddit (SubredditID(..), SubredditName(..))
import Reddit.Types.User

import ConfigLoad
import Test.Hspec

isRight :: Either a b -> Bool
isRight = const False `either` const True

isLeft :: Either a b -> Bool
isLeft = const True `either` const False

main :: IO ()
main = hspec spec

spec :: Spec
spec = describe "Reddit.Actions.Post" $ do
  (reddit, _, _) <- runIO loadConfig

  it "should be able to get info for a post" $ do
    res <- run reddit $ getPostInfo (PostID "z1c9z")
    res `shouldSatisfy` isRight
    case res of
      Left _ -> expectationFailure "something failed"
      Right post -> do
        author post `shouldBe` Username "PresidentObama"
        title post `shouldBe` "I am Barack Obama, President of the United States -- AMA"
        subredditID post `shouldBe` SubredditID "2qzb6"
        subreddit post `shouldBe` R "IAMA"
        nsfw post `shouldBe` False

  it "should be able to get info for multiple posts" $ do
    res <- run reddit $ getPostsInfo [PostID "z1c9z", PostID "t0ynr"]
    res `shouldSatisfy` isRight

  it "should cope with getting info for no posts" $ do
    res <- run reddit $ getPostsInfo []
    res `shouldSatisfy` isRight
    case res of
      Left _ -> expectationFailure "something failed"
      Right (Listing _ _ ps) ->
        ps `shouldBe` []

  it "shouldn't be able to get a list of posts from invalid post IDs" $ do
    res <- run reddit $ getPostsInfo [PostID "z1c9z", PostID "nonsense"]
    res `shouldSatisfy` isLeft

  it "should be able to get mass PostIDs" $ do
    let a = replicate 100 $ PostID "z1c9z"
    res <- run reddit $ getPostsInfo a
    res `shouldSatisfy` isRight
    case res of
      Left _ -> expectationFailure "something failed"
      Right (Listing _ _ ps) ->
        length ps `shouldBe` length a

  it "should fail if it tries to get TOO many PostIDs" $ do
    let a = replicate 101 $ PostID "z1c9z"
    res <- run reddit $ getPostsInfo a
    res `shouldSatisfy` isLeft