ipedb-0.1.0.0: test/Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Main (main) where
import IpeDb.InfoProv
import IpeDb.Query qualified as Query
import System.Directory (doesFileExist)
import System.FilePath
import System.IO.Temp
import Test.Tasty
import Test.Tasty.HUnit
main :: IO ()
main = defaultMain tests
testdataDir :: FilePath
testdataDir = "test" </> "data"
tests :: TestTree
tests =
testGroup
"ipedb"
[ integrationTests
]
integrationTests :: TestTree
integrationTests =
testGroup
"integration"
[ testGroup
"index"
[ testCase "ipedb.eventlog" $
withSystemTempDirectory "ipedb" $ \tempDir -> do
let
db_loc = tempDir </> "ipedb.db"
eventlog_log = testdataDir </> "ipedb.eventlog"
exists_start <- doesFileExist db_loc
assertBool "Database must not exist before generating it" (not exists_start)
Query.withInfoProvDb db_loc $ \db ->
Query.populateFromEventlog db eventlog_log
exists <- doesFileExist db_loc
assertBool "Database exists after generating it" exists
]
, testGroup
"query"
[ testCase "can insert and find info prov" $
withSystemTempDirectory "ipedb" $ \tempDir -> do
let
db_loc = tempDir </> "ipedb.db"
Query.withInfoProvDb db_loc $ \db -> do
Query.setupInfoProvDb db
let
dummyIpe =
InfoProv
{ infoId = IpeId 0xdeadb33f
, tableName = "DummyInfo"
, closureDesc = 42
, typeDesc = "Dummy"
, label = "This is a dummy IPE info"
, moduleName = "Dummy"
, srcLoc = "Dummy.hs:45"
}
Query.insertInfoProv db dummyIpe
ipe <- Query.lookupInfoProv db dummyIpe.infoId
ipe @?= Just dummyIpe
, testCase "list ipedb.eventlog info provs" $
withSystemTempDirectory "ipedb" $ \tempDir -> do
let
db_loc = tempDir </> "ipedb.db"
eventlog_log = testdataDir </> "ipedb.eventlog"
Query.withInfoProvDb db_loc $ \db -> do
Query.populateFromEventlog db eventlog_log
info_provs <- Query.listInfoProvs db
assertBool "There must be at least 500 info provs in the table" (length info_provs > 500)
]
]