{-# LANGUAGE OverloadedStrings #-}
module Main where
import Data.Text (Text)
import Database.SQLite.Simple
import Database.SQLite.Simple.ToField
import Database.SQLite.SimpleErrors
import Database.SQLite.SimpleErrors.Types
import SQLUtils
import Utils
main :: IO ()
main = executeTestRunner [checkNotNullConstraintName,
checkNotNullConstraintAge,
checkUniqueConstraint,
checkCheckConstraint,
checkForeignKeyConstraint]
checkNotNullConstraintName :: Test (DatabaseResponse ())
checkNotNullConstraintName = Test "Not Null Constraint - Name"
(Left $ SQLConstraintError NotNull "Test.name")
test
where test conn = runDBAction $ execute conn insertSQL sqlData
sqlData :: (Maybe Text, Int)
sqlData = (Nothing, 10)
checkNotNullConstraintAge :: Test (DatabaseResponse ())
checkNotNullConstraintAge = Test "Not Null Constraint - Age"
(Left $ SQLConstraintError NotNull "Test.age")
test
where test conn = runDBAction $ execute conn insertSQL sqlData
sqlData :: (Text, Maybe Int)
sqlData = ("name", Nothing)
checkUniqueConstraint :: Test (DatabaseResponse ())
checkUniqueConstraint = Test "Unique Constraint - Name"
(Left $ SQLConstraintError Unique "Test.name")
test
where
test conn =
runDBAction (execute conn insertSQL sqlData) >>
runDBAction (execute conn insertSQL sqlData)
sqlData :: (Text, Int)
sqlData = ("name", 10)
checkCheckConstraint :: Test (DatabaseResponse ())
checkCheckConstraint = Test "Check Constraint - Age"
(Left $ SQLConstraintError Check "Test")
test
where
test conn = runDBAction $ execute conn insertSQL sqlData
sqlData :: (Text, Int)
sqlData = ("name", 0)
checkForeignKeyConstraint :: Test (DatabaseResponse ())
checkForeignKeyConstraint = Test "Check Foreign Key Constraint - TestID"
(Left $ SQLConstraintError ForeignKey "")
test
where
test conn = runDBAction $ execute conn insertOtherSQL sqlData
sqlData :: (Text, Int)
sqlData = ("other", 10)