{-# 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")