darcsden-1.1: src/Test.hs
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Trans
import Test.HUnit
import Test.WebDriver
import System.Environment
import DarcsDen.State.Util(resetAllState, repoDir)
import Test.User
import Test.Repository
import Test.Google
import Test.Github
createUserTest :: Assertion
createUserTest = do
em <- getEnv "GOOGLE_USERNAME"
resetAllState
(runSession defaultSession defaultCaps $ do
(na, _) <- createAccount em
Just na' <- getUser
return $ na' == na) >>= assertBool "Failed create user test!"
createAccountUsingOAuthTest :: String -> (String -> String -> WD String) -> Assertion
createAccountUsingOAuthTest ev ca = do
em <- getEnv $ ev ++ "_USERNAME"
pw <- getEnv $ ev ++ "_PASSWORD"
resetAllState
(runSession defaultSession defaultCaps $ do
na <- ca em pw
Just na' <- getUser
return $ na == na') >>= (assertBool $ "Failed createAccountUsingOAuth: " ++ ev)
loginOAuthAccountTest :: String -> (String -> String -> WD String) -> WD () -> Assertion
loginOAuthAccountTest ev ca login = do
em <- getEnv $ ev ++ "_USERNAME"
pw <- getEnv $ ev ++ "_PASSWORD"
resetAllState
(runSession defaultSession defaultCaps $ do
na <- ca em pw
logout
login
Just na' <- getUser
return $ na' == na) >>= (assertBool $ "Failed loginOAuthAccountTest: " ++ ev)
syncOAuthAccountTest :: String -> (String -> String -> WD ()) -> WD () -> Assertion
syncOAuthAccountTest ev sa login = do
em <- getEnv $ ev ++ "_USERNAME"
pw <- getEnv $ ev ++ "_PASSWORD"
resetAllState
(runSession defaultSession defaultCaps $ do
(na,_) <- createAccount em
sa em pw
logout
login
Just na' <- getUser
return $ na' == na) >>= (assertBool $ "Failed syncOAuthAccountTest: " ++ ev)
editFileTest :: Assertion
editFileTest = do
em <- getEnv "GOOGLE_USERNAME"
resetAllState
(runSession defaultSession defaultCaps $ do
(u, _) <- createAccount em
r <- createRepository
(d, f) <- createDirAndFile
val <- editFile
val' <- liftIO $ readFile (repoDir u r ++ "/" ++ d ++ "/" ++ f)
return $ val == val') >>= assertBool "Failed edit file test!"
main :: IO Counts
main = runTestTT.TestList $ [
TestCase createUserTest,
TestLabel "OAuth" $ TestList [
TestLabel "Google" $ TestList [
TestCase $ createAccountUsingOAuthTest "GOOGLE" goc,
TestCase $ loginOAuthAccountTest "GOOGLE" goc gol,
TestCase $ syncOAuthAccountTest "GOOGLE" gos gol
],
TestLabel "Github" $ TestList [
TestCase $ createAccountUsingOAuthTest "GITHUB" gic,
TestCase $ loginOAuthAccountTest "GITHUB" gic gil,
TestCase $ syncOAuthAccountTest "GITHUB" gis gil
]
],
TestCase editFileTest
]
where
goc = createOAuthAccount googleRegSelector googleLogin
gos = syncOAuthAccount googleSyncSelector googleLogin
gol = loginOAuthAccount googleLoginSelector (ById "submit_approve_access")
gic = createOAuthAccount githubRegSelector githubLogin
gis = syncOAuthAccount githubSyncSelector githubLogin
gil = loginOAuthAccount githubLoginSelector (ByName "authorize")