{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} import qualified RIO.Text as Text import RIO import Gitlab import System.Environment import Test.Hspec data GitlabTestApp = GitlabTestApp { gitlabConfig :: GitlabConfig , logFunc :: LogFunc } instance HasGitlabConfig GitlabTestApp where gitlabConfigL = lens gitlabConfig (\x y -> x { gitlabConfig = y }) instance HasLogFunc GitlabTestApp where logFuncL = lens logFunc (\x y -> x { logFunc = y }) runLogVanish :: (Show a) => GitlabTestApp -> RIO GitlabTestApp a -> IO () runLogVanish app f = void $ asIO $ runRIO app $ f >>= logInfo . displayShow glproj = "locallycompact/gitlab-api" main :: IO () main = do envPrivateToken <- liftIO $ getEnv "GITLAB_PRIVATE_TOKEN" let gconf = GitlabConfig { glBaseUrl = "https://gitlab.com" , glToken = Text.pack envPrivateToken } logOptions <- logOptionsHandle stdout True withLogFunc logOptions $ \l -> do let app = GitlabTestApp gconf l hspec $ do describe "Gitlab.Projects" $ it "getCommitData works" $ runLogVanish app $ getCommitData glProj "master" describe "Gitlab.Wikis" $ do it "getProjectWiki works" $ runLogVanish app $ getProjectWiki glproj it "createWikiPage works" $ runLogVanish app $ createWikiPage glproj $ GitlabWikiPage "foo" "markdown" "foo" "foo"