Add comprehensive test suite: FieldDefinition, SqlMarshaller, EntityOperations, AutoMigration (53 tests)
This commit is contained in:
+8
-83
@@ -1,92 +1,17 @@
|
||||
{-# LANGUAGE DataKinds #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Main where
|
||||
|
||||
import Control.Monad.IO.Class (liftIO)
|
||||
import Data.Int (Int64)
|
||||
import Data.Text (Text)
|
||||
import Orville.SQLite
|
||||
import Test.Hspec
|
||||
|
||||
data Person = Person
|
||||
{ personId :: Int64
|
||||
, firstName :: Text
|
||||
, lastName :: Text
|
||||
, age :: Int64
|
||||
}
|
||||
deriving (Show, Eq)
|
||||
|
||||
personIdField :: FieldDefinition 'NotNull Int64
|
||||
personIdField = integerField "id"
|
||||
|
||||
firstNameField :: FieldDefinition 'NotNull Text
|
||||
firstNameField = textField "first_name"
|
||||
|
||||
lastNameField :: FieldDefinition 'NotNull Text
|
||||
lastNameField = textField "last_name"
|
||||
|
||||
ageField :: FieldDefinition 'NotNull Int64
|
||||
ageField = integerField "age"
|
||||
|
||||
personMarshaller :: SqlMarshaller Person Person
|
||||
personMarshaller =
|
||||
Person
|
||||
<$> marshallReadOnlyField personIdField
|
||||
<*> marshallField firstName firstNameField
|
||||
<*> marshallField lastName lastNameField
|
||||
<*> marshallField age ageField
|
||||
|
||||
personTable :: TableDefinition Int64 Person Person
|
||||
personTable =
|
||||
mkTableDefinition "person" (primaryKey personId personIdField) personMarshaller
|
||||
import qualified Test.AutoMigration as AutoMigration
|
||||
import qualified Test.EntityOperations as EntityOperations
|
||||
import qualified Test.FieldDefinition as FieldDefinition
|
||||
import qualified Test.SqlMarshaller as SqlMarshaller
|
||||
|
||||
main :: IO ()
|
||||
main = hspec $ do
|
||||
describe "Orville.SQLite" $ do
|
||||
it "creates a table and inserts a row" $ do
|
||||
db <- openConnection ":memory:"
|
||||
withConnection db $ do
|
||||
autoMigrateSchema defaultOptions [schemaTable personTable []]
|
||||
insertEntity personTable (Person 0 "Alice" "Smith" 30)
|
||||
mAlice <- findEntity personTable 1
|
||||
liftIO $ mAlice `shouldBe` Just (Person 1 "Alice" "Smith" 30)
|
||||
closeConnection db
|
||||
|
||||
it "finds all rows" $ do
|
||||
db <- openConnection ":memory:"
|
||||
withConnection db $ do
|
||||
autoMigrateSchema defaultOptions [schemaTable personTable []]
|
||||
insertEntity personTable (Person 0 "Alice" "Smith" 30)
|
||||
insertEntity personTable (Person 0 "Bob" "Jones" 25)
|
||||
results <- findAll personTable
|
||||
liftIO $ length results `shouldBe` 2
|
||||
closeConnection db
|
||||
|
||||
it "updates a row" $ do
|
||||
db <- openConnection ":memory:"
|
||||
withConnection db $ do
|
||||
autoMigrateSchema defaultOptions [schemaTable personTable []]
|
||||
insertEntity personTable (Person 0 "Alice" "Smith" 30)
|
||||
updateEntity personTable (Person 1 "Alice" "Jones" 31)
|
||||
mAlice <- findEntity personTable 1
|
||||
liftIO $ mAlice `shouldBe` Just (Person 1 "Alice" "Jones" 31)
|
||||
closeConnection db
|
||||
|
||||
it "deletes a row" $ do
|
||||
db <- openConnection ":memory:"
|
||||
withConnection db $ do
|
||||
autoMigrateSchema defaultOptions [schemaTable personTable []]
|
||||
insertEntity personTable (Person 0 "Alice" "Smith" 30)
|
||||
deleteEntity personTable 1
|
||||
mAlice <- findEntity personTable 1
|
||||
liftIO $ mAlice `shouldBe` Nothing
|
||||
closeConnection db
|
||||
|
||||
it "returns Nothing for missing row" $ do
|
||||
db <- openConnection ":memory:"
|
||||
withConnection db $ do
|
||||
autoMigrateSchema defaultOptions [schemaTable personTable []]
|
||||
mAlice <- findEntity personTable 999
|
||||
liftIO $ mAlice `shouldBe` Nothing
|
||||
closeConnection db
|
||||
describe "FieldDefinition" FieldDefinition.fieldDefinitionTests
|
||||
describe "SqlMarshaller" SqlMarshaller.sqlMarshallerTests
|
||||
describe "EntityOperations" EntityOperations.entityOperationsTests
|
||||
describe "AutoMigration" AutoMigration.autoMigrationTests
|
||||
|
||||
Reference in New Issue
Block a user