module DeleteTests ( tests ) where

import           Asserts

import           Database.EJDB2
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 "delete"
              [ deleteTest databaseIO, deleteNotExistingTest databaseIO ]

testDatabaseOpts :: Options
testDatabaseOpts = minimalOptions "./test/delete-db" [ truncateOpenFlags ]

deleteTest :: IO Database -> TestTree
deleteTest databaseIO = testCase "deleteTest" $ do
    database <- databaseIO
    id <- putNew database "plants" plant
    delete database "plants" id
    storedPlant <- getById database "plants" id :: IO (Maybe Plant)
    storedPlant @?= Nothing
  where
    plant = nothingPlant { id          = Nothing
                         , name        = Just "pinus"
                         , isTree      = Just True
                         , year        = Just 1753
                         , description = Just "wow 🌲"
                         }

deleteNotExistingTest :: IO Database -> TestTree
deleteNotExistingTest databaseIO = testCase "deleteNotExistingTest" $ do
    database <- databaseIO
    assertException (userError "ErrorNotFound") (delete database "plants" 42)