2024-01-22 18:58:37 +00:00
{- # LANGUAGE OverloadedStrings # -}
2024-02-27 14:33:12 +00:00
import Control.Monad ( when )
2024-01-22 18:58:37 +00:00
import Database.Persist
import Database.Persist.Sqlite
2024-02-27 14:33:12 +00:00
import System.Directory
2024-04-07 14:25:25 +00:00
import Test.HUnit
2024-01-22 18:58:37 +00:00
import Test.Hspec
2024-03-17 12:17:52 +00:00
import ZcashHaskell.Orchard ( isValidUnifiedAddress )
import ZcashHaskell.Types
( OrchardSpendingKey ( .. )
, Phrase ( .. )
, SaplingSpendingKey ( .. )
, Scope ( .. )
, ZcashNet ( .. )
)
import Zenith.Core
2024-01-22 18:58:37 +00:00
import Zenith.DB
2024-03-17 12:17:52 +00:00
import Zenith.Types
2024-01-22 18:58:37 +00:00
2022-06-20 21:46:13 +00:00
main :: IO ()
2024-01-22 18:58:37 +00:00
main = do
2024-02-27 14:33:12 +00:00
checkDbFile <- doesFileExist " test.db "
when checkDbFile $ removeFile " test.db "
2024-01-22 18:58:37 +00:00
hspec $ do
describe " Database tests " $ do
it " Create table " $ do
s <- runSqlite " test.db " $ do runMigration migrateAll
s ` shouldBe ` ()
2024-02-27 14:33:12 +00:00
describe " Wallet Table " $ do
it " insert wallet record " $ do
s <-
runSqlite " test.db " $ do
insert $
ZcashWallet
" Main Wallet "
2024-03-17 12:17:52 +00:00
( ZcashNetDB MainNet )
( PhraseDB $
Phrase
" one two three four five six seven eight nine ten eleven twelve " )
2000000
2024-02-27 14:33:12 +00:00
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
2024-03-17 12:17:52 +00:00
describe " Wallet function tests: " $ do
it " Save Wallet: " $ do
zw <-
saveWallet " test.db " $
ZcashWallet
" Testing "
( ZcashNetDB MainNet )
( PhraseDB $
Phrase
" cloth swing left trap random tornado have great onion element until make shy dad success art tuition canvas thunder apple decade elegant struggle invest " )
2200000
zw ` shouldNotBe ` Nothing
it " Save Account: " $ do
2024-02-27 14:33:12 +00:00
s <-
runSqlite " test.db " $ do
2024-03-17 12:17:52 +00:00
selectList [ ZcashWalletName ==. " Testing " ] []
za <-
saveAccount " test.db " =<<
createZcashAccount " TestAccount " 0 ( head s )
za ` shouldNotBe ` Nothing
it " Save address: " $ do
acList <-
runSqlite " test.db " $
selectList [ ZcashAccountName ==. " TestAccount " ] []
zAdd <-
saveAddress " test.db " =<<
createWalletAddress " Personal123 " 0 MainNet External ( head acList )
addList <-
runSqlite " test.db " $
selectList
[ WalletAddressName ==. " Personal123 "
, WalletAddressScope ==. ScopeDB External
]
[]
getUA ( walletAddressUAddress ( entityVal $ head addList ) ) ` shouldBe `
" u1trd8cvc6265ywwj4mmvuznsye5ghe2dhhn3zy8kcuyg4vx3svskw9r2dedp5hu6m740vylkqc34t4w9eqkl9fyu5uyzn3af72jg235440ke6tu5cf994eq85n97x69x9824hqejmwz3d8qqthtesrd6gerjupdymldhl9xccejjwfj0dhh9mt4rw4kytp325twlutsxd20rfqhzxu3m "
it " Address components are correct " $ do
let ua =
" utest1mvlny48qd4x94w8vz5u2lrxx0enuquajt72yekgq24p6pjaky3czk6m7x358h7g900ex6gzvdehaekl96qnakjzw8yaasp8y0u3j5jnlfd33trduznh6k3fcn5ek9qc857fgz8ehm37etx94sj58nrkc0k5hurxnuxpcpms3j8uy2t8kt2vy6vetvsfxxdhtjq0yqulqprvh7mf2u3x "
isValidUnifiedAddress ua ` shouldNotBe ` Nothing
2024-04-07 14:25:25 +00:00
describe " Function tests " $ do
it " Wallet sync " $ do
w <-
runSqlite " zenith.db " $
selectFirst [ ZcashWalletBirthdayHeight >. 0 ] []
case w of
Nothing -> assertFailure " No wallet in DB "
Just w' -> do
r <- syncWallet " zenith.db " w'
r ` shouldBe ` " Done "