Implement Xero config endpoint

This commit is contained in:
Rene Vergara 2022-08-10 10:17:47 -05:00
parent 18533b0487
commit 3be52f16a8
Signed by: pitmutt
GPG key ID: 65122AD495A7F5B2
4 changed files with 66 additions and 7 deletions

35
src/Xero.hs Normal file
View file

@ -0,0 +1,35 @@
{-# LANGUAGE OverloadedStrings #-}
module Xero where
import Data.Aeson
import qualified Data.Bson as B
import qualified Data.Text as T
import Database.MongoDB
import GHC.Generics
-- | Type to represent a Xero app configuration
data Xero =
Xero
{ x_id :: ObjectId
, x_clientId :: T.Text
, x_clientSecret :: T.Text
}
deriving (Eq, Show)
instance ToJSON Xero where
toJSON (Xero i cI s) =
object ["_id" .= show i, "clientId" .= cI, "clientSecret" .= s]
instance Val Xero where
val (Xero i cI s) = Doc ["_id" =: i, "clientId" =: cI, "clientSecret" =: s]
cast' (Doc d) = do
i <- B.lookup "_id" d
cI <- B.lookup "clientId" d
s <- B.lookup "clientSecret" d
Just (Xero i cI s)
cast' _ = Nothing
-- Database actions
findXero :: Action IO (Maybe Document)
findXero = findOne (select [] "xero")

View file

@ -45,10 +45,12 @@ import System.IO.Unsafe
import System.Random
import Test.QuickCheck
import Test.QuickCheck.Instances
import Test.QuickCheck.Property (Result(ok))
import Text.Regex
import Text.Regex.Base
import User
import Web.Scotty
import Xero
import ZGoTx
-- Models for API objects
@ -480,6 +482,21 @@ routes pipe config = do
, "countries" .= toJSON (map parseCountryBson countries)
])
--Get user associated with session
get "/api/xero" $ do
xeroConfig <- liftIO $ run findXero
case xeroConfig of
Nothing -> status noContent204
Just x -> do
let xConfig = cast' (Doc x)
case xConfig of
Nothing -> status noContent204
Just c -> do
status ok200
Web.Scotty.json
(object
[ "message" .= ("Xero config found!" :: String)
, "xeroConfig" .= toJSON (c :: Xero)
])
get "/api/user" $ do
sess <- param "session"
user <- liftIO $ run (findUser sess)

View file

@ -92,11 +92,16 @@ main = do
res <- httpJSON req
getResponseStatus (res :: Response A.Value) `shouldBe` ok200
describe "blockheight endpoint" $ do
it "returns a block number" $ do
xit "returns a block number" $ do
req <- testGet "/api/blockheight" []
res <- httpJSON req
height (getResponseBody (res :: Response Block)) `shouldSatisfy` \x ->
x > 1600000
describe "xero config endpoint" $ do
it "returns the config" $ do
req <- testGet "/api/xero" []
res <- httpJSON req
getResponseStatus (res :: Response A.Value) `shouldBe` ok200
describe "User endpoint" $ do
it "returns a user for a session" $ do
req <-
@ -255,7 +260,8 @@ main = do
case ordTest of
Doc oT -> access p master "test" (insert_ "orders" oT)
_ <-
access p master "test" $ markOrderPaid "627ab3ea2b05a76be3000001"
access p master "test" $
markOrderPaid ("627ab3ea2b05a76be3000001", 0)
o <-
access p master "test" $ findOrderById "627ab3ea2b05a76be3000001"
let o1 = (cast' . Doc) =<< o
@ -263,7 +269,7 @@ main = do
Nothing -> True `shouldBe` False
Just o2 -> qpaid o2 `shouldBe` True
describe "Zcash transactions" $ do
it "logins are added to db" $ \p -> do
xit "logins are added to db" $ \p -> do
_ <-
access p master "test" (Database.MongoDB.delete (select [] "txs"))
_ <- scanZcash loadedConfig p
@ -272,7 +278,7 @@ main = do
let s = parseZGoTxBson =<< t
let conf = maybe 0 confirmations s
conf `shouldSatisfy` (> 0)
it "payments are added to db" $ \p -> do
xit "payments are added to db" $ \p -> do
_ <-
access
p
@ -285,7 +291,7 @@ main = do
let s = (cast' . Doc) =<< t
let payDelta = maybe 0 pdelta s
payDelta `shouldSatisfy` (> 0)
it "owners are marked as paid" $ \p -> do
xit "owners are marked as paid" $ \p -> do
let myUser =
User
(Just (read "6272a90f2b05a74cf1000002" :: ObjectId))
@ -338,7 +344,7 @@ main = do
let ownerPaid = maybe False opaid s
ownerPaid `shouldBe` True
_ -> True `shouldBe` False `debug` "Failed parsing payment"
it "owners are expired" $ \p -> do
xit "owners are expired" $ \p -> do
_ <- expireOwners p "test"
now <- getCurrentTime
res <-
@ -352,7 +358,7 @@ main = do
["expiration" =: ["$lt" =: now], "paid" =: True]
"owners"))
res `shouldBe` []
it "login txs are converted to users" $ \p -> do
xit "login txs are converted to users" $ \p -> do
let myTx =
ZGoTx
Nothing

View file

@ -32,6 +32,7 @@ library
Owner
Payment
User
Xero
ZGoBackend
ZGoTx
other-modules: