ejdb2-binding-0.1.0.0: test/IndexTests.hs
module IndexTests ( tests ) where
import Asserts
import qualified Data.Aeson as Aeson
import Database.EJDB2
import qualified Database.EJDB2.CollectionMeta as CollectionMeta
import qualified Database.EJDB2.Meta as Meta
import Database.EJDB2.Options
import Plant
import Prelude hiding ( id )
import Test.Tasty
import Test.Tasty.HUnit
tests :: TestTree
tests = withResource (open testDatabaseOpts) close $ \databaseIO ->
testGroup "index"
[ getMetaTest databaseIO, createAndRemoveIndexTest databaseIO ]
testDatabaseOpts :: Options
testDatabaseOpts = minimalOptions "./test/index-db" [ truncateOpenFlags ]
getMetaTest :: IO Database -> TestTree
getMetaTest databaseIO = testCase "getMetaTest" $ do
database <- databaseIO
Just meta <- getMeta database
let (major : '.' : minor : '.' : _) = Meta.version meta
[ major, '.', minor ] @?= "2.0"
createAndRemoveIndexTest :: IO Database -> TestTree
createAndRemoveIndexTest databaseIO = testCase "createAndRemoveIndexTest" $ do
database <- databaseIO
ensureCollection database "plants"
ensureIndex database "plants" "/name" mode
indexesCount <- getIndexesCount database
indexesCount @?= 1
removeIndex database "plants" "/name" mode
indexesCountLast <- getIndexesCount database
indexesCountLast @?= 0
where
mode = [ uniqueIndexMode, strIndexMode ]
getIndexesCount :: Database -> IO Int
getIndexesCount database = do
Just meta <- getMeta database
let indexes = CollectionMeta.indexes $ head $ Meta.collections meta
return $ length indexes