{-# LANGUAGE OverloadedStrings #-}
module GitHub.EventsSpec where

import Data.Either        (isRight)
import Data.String        (fromString)
import Prelude ()
import Prelude.Compat
import System.Environment (lookupEnv)
import Test.Hspec         (Spec, describe, it, shouldSatisfy,
                           pendingWith)

import qualified GitHub
import GitHub.Data (Auth(..))

fromRightS :: Show a => Either a b -> b
fromRightS (Left xs) = error $ "Should be Right" ++ show xs
fromRightS (Right xs) = xs

withAuth :: (Auth -> IO ()) -> IO ()
withAuth action = do
  mtoken <- lookupEnv "GITHUB_TOKEN"
  case mtoken of
    Nothing    -> pendingWith "no GITHUB_TOKEN"
    Just token -> action (OAuth $ fromString token)

spec :: Spec
spec = do
  describe "repositoryEventsR" $ do
    it "returns non empty list of events" $ shouldSucceed $
      GitHub.repositoryEventsR "haskell-github" "github" 1
  describe "userEventsR" $ do
    it "returns non empty list of events" $ shouldSucceed $ GitHub.userEventsR "phadej" 1
  where shouldSucceed f = withAuth $ \auth -> do
          cs <- GitHub.executeRequest auth $ f
          cs `shouldSatisfy` isRight
          length (fromRightS cs) `shouldSatisfy` (> 1)
