module Reddit.Actions.UserSpec where import Reddit.Actions.User import Reddit.Types.Comment import Reddit.Types.Listing import Reddit.Types.Options import Reddit.Types.User import ConfigLoad import Control.Monad import Data.Maybe import Data.Time.Clock import Test.Hspec isRight :: Either a b -> Bool isRight = const False `either` const True main :: IO () main = hspec spec spec :: Spec spec = describe "Reddit.Actions.User" $ do (reddit, username, _) <- runIO loadConfig time <- runIO getCurrentTime it "should be able to get the user's most recent comments" $ do res <- run reddit $ getUserComments username res `shouldSatisfy` isRight case res of Left _ -> expectationFailure "something failed" Right (Listing _ _ cs) -> forM_ cs $ \c -> do author c `shouldBe` username replies c `shouldSatisfy` (\(Listing _ _ x) -> null x) created c `shouldSatisfy` (< time) it "should be able to get multiple pages of user comments" $ do res <- run reddit $ getUserComments' (Options Nothing (Just 1)) username res `shouldSatisfy` isRight case res of Right (Listing _ (Just a) (c:[])) -> do next <- run reddit $ getUserComments' (Options (Just $ After a) (Just 1)) username next `shouldSatisfy` isRight case next of Right (Listing _ _ (d:[])) -> c `shouldSatisfy` (/= d) _ -> expectationFailure "something failed" _ -> expectationFailure "something failed" it "should be able to get the user's about me info" $ do res <- run reddit aboutMe res `shouldSatisfy` isRight case res of Left _ -> expectationFailure "something failed" Right user -> do userName user `shouldBe` username userCreated user `shouldSatisfy` (< time) hasMail user `shouldSatisfy` isJust isFriend user `shouldBe` False it "should be able to get the user info for a user" $ do res <- run reddit $ getUserInfo username res `shouldSatisfy` isRight it "should be able to check if a username is available" $ do res <- run reddit $ isUsernameAvailable username res `shouldSatisfy` isRight case res of Left _ -> return () Right avail -> avail `shouldBe` False