packages feed

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