bitx-bitcoin-0.4.0.1: test/Network/Bitcoin/BitX/Spec/Specs/PrivateSpec.hs
{-# LANGUAGE OverloadedStrings, DataKinds #-}
module Network.Bitcoin.BitX.Spec.Specs.PrivateSpec
(
Network.Bitcoin.BitX.Spec.Specs.PrivateSpec.spec
) where
import Test.Hspec
import Network.Bitcoin.BitX.Types
import qualified Network.Bitcoin.BitX as BitX
import System.IO.Unsafe (unsafePerformIO)
import Network.Bitcoin.BitX.Response
import System.Directory (doesFileExist)
import Data.Maybe (isJust, fromJust)
import Data.Text (pack)
import Lens.Micro
import Debug.Trace
import Network.Bitcoin.BitX.Spec.Specs.NetSpec
import Text.Show.Pretty
spec :: Spec
spec =
describe "Private functionality test" $ do
mauth <- runIO privateAuth
if isJust mauth
then do
let auth = fromJust mauth
it "getBalances connects to BitX and works" $
connectsAndParsesOkay $ BitX.getBalances auth
else do
it "API key file not found -- skipping private tests" $
True `shouldBe` True
connectsAndParsesOkay :: Show recd => IO (BitXAPIResponse recd) -> Bool
connectsAndParsesOkay k = isValidResponse $ tracePretty (unsafePerformIO k)
tracePretty a = trace (valToStr . fromJust . parseValue $ show a) a
keyFileName :: FilePath
keyFileName = "PRIVATE_API_KEY"
privateAuth :: IO ( Maybe BitXAuth)
privateAuth = do
ex <- doesFileExist keyFileName
if ex
then do
contents <- readFile keyFileName
let lns = lines contents
return . Just $
mkBitXAuth
& BitX.id .~ pack (head lns)
& BitX.secret .~ pack (lns !! 1)
else
return Nothing