packages feed

octohat-0.1: spec/Network/Octohat/TestData.hs

{-# LANGUAGE OverloadedStrings #-}

module Network.Octohat.TestData ( loadTestOrganizationName
                                , loadOwnerTeam
                                , loadTestAccountOne
                                , loadTestAccountTwo
                                , loadTestAccountThree
                                , publicKeyFixture
                                , publicKeyHostnameFixture
                                , fingerprintFixture
                                , fullPublicKeyFixture
                                ) where

import Network.Octohat.Types
import Network.Octohat (teamForTeamNameInOrg)
import Network.Octohat.Members (userForUsername)

import Control.Monad.IO.Class (liftIO)
import Control.Arrow (second)
import System.Environment.Compat (getEnvironment)
import Configuration.Dotenv (loadFile)
import Control.Applicative ((<$>), (<*>))
import qualified Data.Text as T

data TestEnvironment =
  TestEnvironment {
    organization :: T.Text,
    accountOne   :: T.Text,
    accountTwo   :: T.Text,
    accountThree :: T.Text
  }

readEnv :: [(String, String)] -> Maybe TestEnvironment
readEnv environment =
  TestEnvironment <$> lookup "SANDBOX_ORGANIZATION" env
                  <*> lookup "TEST_ACCOUNT_ONE" env
                  <*> lookup "TEST_ACCOUNT_TWO" env
                  <*> lookup "TEST_ACCOUNT_THREE" env
    where env = map (second T.pack) environment

loadEnv :: IO TestEnvironment
loadEnv = do
  loadFile False ".github-sandbox"
  env <- getEnvironment
  case readEnv env of
    Just res -> return res
    Nothing  -> fail "Environment variables not set correctly, please read README.md"

loadTestOrganizationName :: IO T.Text
loadTestOrganizationName = organization `fmap` loadEnv

loadOwnerTeam :: GitHub Team
loadOwnerTeam = liftIO (organization `fmap` loadEnv) >>= teamForTeamNameInOrg "Owners"

loadTestAccountOne :: GitHub Member
loadTestAccountOne = liftIO (accountOne `fmap` loadEnv) >>= userForUsername

loadTestAccountTwo :: GitHub Member
loadTestAccountTwo = liftIO (accountTwo `fmap` loadEnv) >>= userForUsername

loadTestAccountThree :: GitHub Member
loadTestAccountThree = liftIO (accountThree `fmap` loadEnv) >>= userForUsername

publicKeyHostnameFixture :: T.Text
publicKeyHostnameFixture = "octohat@stackbuilders"

fingerprintFixture :: T.Text
fingerprintFixture = "42:59:20:02:6f:df:b4:4a:1c:0e:fd:1b:86:58:f6:06"

publicKeyFixture :: T.Text
publicKeyFixture = "AAAAB3NzaC1yc2EAAAADAQABAAABAQC1Dopc3yxLWlzJwFqSoj0nAzRCU93R5DwNlogtRr/7NsnUVf443wl/vpRDRNscR0dV/VeNWYCqiZA0wGrXiVJ7HYi9XaWtHrUutLqrLe47aFFvAIdp15+RHkM0sXr963Kb9XMkmqswyXJ2TaZ0cgZfMNgl1ND248Y8fMDBx8elHwdZvyG2onG5aSVtOuKB4dWnmIb+uSQCN1K2kLYwHvQOjmqCiZ2XOP9u+ScphVdp6x4uAczH67CCRSUhI6U2fxSNf6YaDXyCWcqxj1agHUKdskb5rzxPaz5XZ2BgQscjoVo93M338HLmkyvbuP4yl2X6ZdLfE5mk2ZFfWQogxLGd"

fullPublicKeyFixture :: T.Text
fullPublicKeyFixture = T.concat ["ssh-rsa ", publicKeyFixture, " ", publicKeyHostnameFixture]