From b89ee243b7bf1de1b38b51fd41ce32394cd23fbb Mon Sep 17 00:00:00 2001 From: Rene Vergara Date: Mon, 22 Jan 2024 12:58:37 -0600 Subject: [PATCH] Implement DB tests for wallet --- package.yaml | 8 +++++++- src/Zenith/DB.hs | 34 +++++++++++++++++++++++++++++++++ test/Spec.hs | 49 +++++++++++++++++++++++++++++++++++++++++++++++- zenith.cabal | 8 +++++++- 4 files changed, 96 insertions(+), 3 deletions(-) diff --git a/package.yaml b/package.yaml index 8696224..af65349 100644 --- a/package.yaml +++ b/package.yaml @@ -41,7 +41,9 @@ library: - array - base64-bytestring - hexstring - - blake2 + - persistent + - persistent-sqlite + - persistent-template - zcash-haskell executables: @@ -74,3 +76,7 @@ tests: - -with-rtsopts=-N dependencies: - zenith + - hspec + - persistent + - persistent-sqlite + - persistent-template diff --git a/src/Zenith/DB.hs b/src/Zenith/DB.hs index 5218231..2ac4e27 100644 --- a/src/Zenith/DB.hs +++ b/src/Zenith/DB.hs @@ -1 +1,35 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE EmptyDataDecls #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE GADTs #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE StandaloneDeriving #-} +{-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE FlexibleInstances #-} + module Zenith.DB where + +import qualified Data.ByteString as BS +import qualified Data.Text as T +import Database.Persist +import Database.Persist.Sqlite +import Database.Persist.TH +import ZcashHaskell.Types (Phrase) + +share + [mkPersist sqlSettings, mkMigrate "migrateAll"] + [persistLowerCase| + ZcashWallet + seedPhrase Phrase + spendingKey BS.ByteString + tPrivateKey BS.ByteString + birthdayHeight Int + name T.Text + deriving Show + |] diff --git a/test/Spec.hs b/test/Spec.hs index cd4753f..392e8a4 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -1,2 +1,49 @@ +{-# LANGUAGE OverloadedStrings #-} + +import Control.Monad.IO.Class (liftIO) +import Database.Persist +import Database.Persist.Sqlite +import Test.Hspec +import Zenith.DB +import Zenith.DB + ( EntityField(ZcashWalletId, ZcashWalletName) + , ZcashWallet(zcashWalletName) + ) + main :: IO () -main = putStrLn "Test suite not yet implemented" +main = do + hspec $ do + describe "Database tests" $ do + it "Create table" $ do + s <- runSqlite "test.db" $ do runMigration migrateAll + s `shouldBe` () + it "insert wallet record" $ do + s <- + runSqlite "test.db" $ do + insert $ + ZcashWallet + "one two three four five six seven eight nine ten eleven twelve" + "123456789" + "987654321" + 2000000 + "Main Wallet" + fromSqlKey s `shouldBe` 1 + it "read wallet record" $ do + s <- + runSqlite "test.db" $ do + selectList [ZcashWalletBirthdayHeight >. 0] [] + length s `shouldBe` 1 + it "modify wallet record" $ do + s <- + runSqlite "test.db" $ do + let recId = toSqlKey 1 :: ZcashWalletId + update recId [ZcashWalletName =. "New Wallet"] + get recId + "New Wallet" `shouldBe` maybe "None" zcashWalletName s + it "delete wallet record" $ do + s <- + runSqlite "test.db" $ do + let recId = toSqlKey 1 :: ZcashWalletId + delete recId + get recId + "None" `shouldBe` maybe "None" zcashWalletName s diff --git a/zenith.cabal b/zenith.cabal index ba62cc3..ee2b431 100644 --- a/zenith.cabal +++ b/zenith.cabal @@ -39,11 +39,13 @@ library , array , base >=4.7 && <5 , base64-bytestring - , blake2 , bytestring , hexstring , http-conduit , http-types + , persistent + , persistent-sqlite + , persistent-template , process , regex-base , regex-compat @@ -83,5 +85,9 @@ test-suite zenith-test ghc-options: -threaded -rtsopts -with-rtsopts=-N build-depends: base >=4.7 && <5 + , hspec + , persistent + , persistent-sqlite + , persistent-template , zenith default-language: Haskell2010