dbmigrations-2.1.0: test/StoreTest.hs
{-# LANGUAGE OverloadedStrings #-}
module StoreTest
( tests
)
where
import Test.HUnit
import qualified Data.Map as Map
import Database.Schema.Migrations.Migration
import Database.Schema.Migrations.Store
tests :: [Test]
tests = validateSingleMigrationTests
++ validateMigrationMapTests
type ValidateSingleTestCase = ( MigrationMap
, Migration
, [MapValidationError]
)
type ValidateMigrationMapTestCase = ( MigrationMap
, [MapValidationError]
)
emptyMap :: MigrationMap
emptyMap = Map.fromList []
partialMap :: MigrationMap
partialMap = Map.fromList [ ("one", undefined)
, ("three", undefined)
]
fullMap :: MigrationMap
fullMap = Map.fromList [ ("one", undefined)
, ("two", undefined)
, ("three", undefined)
]
withDeps :: Migration
withDeps = Migration { mTimestamp = undefined
, mId = "with_deps"
, mDesc = Just "with dependencies"
, mApply = ""
, mRevert = Nothing
, mDeps = ["one", "two", "three"]
}
noDeps :: Migration
noDeps = Migration { mTimestamp = undefined
, mId = "no_deps"
, mDesc = Just "no dependencies"
, mApply = ""
, mRevert = Nothing
, mDeps = []
}
validateSingleTestCases :: [ValidateSingleTestCase]
validateSingleTestCases = [ (emptyMap, withDeps, [ DependencyReferenceError (mId withDeps) "one"
, DependencyReferenceError (mId withDeps) "two"
, DependencyReferenceError (mId withDeps) "three"
]
)
, (emptyMap, noDeps, [])
, (partialMap, withDeps, [DependencyReferenceError (mId withDeps) "two"])
, (fullMap, withDeps, [])
, (fullMap, noDeps, [])
]
validateSingleMigrationTests :: [Test]
validateSingleMigrationTests =
map mkValidateSingleTest validateSingleTestCases
where
mkValidateSingleTest (mmap, m, errs) =
errs ~=? validateSingleMigration mmap m
m1 :: Migration
m1 = noDeps { mId = "m1"
, mDeps = [] }
m2 :: Migration
m2 = noDeps { mId = "m2"
, mDeps = ["m1"] }
m3 :: Migration
m3 = noDeps { mId = "m3"
, mDeps = ["nonexistent"] }
m4 :: Migration
m4 = noDeps { mId = "m4"
, mDeps = ["one", "two"] }
map1 :: MigrationMap
map1 = Map.fromList [ ("m1", m1)
, ("m2", m2)
]
map2 :: MigrationMap
map2 = Map.fromList [ ("m3", m3)
]
map3 :: MigrationMap
map3 = Map.fromList [ ("m4", m4)
]
validateMapTestCases :: [ValidateMigrationMapTestCase]
validateMapTestCases = [ (emptyMap, [])
, (map1, [])
, (map2, [DependencyReferenceError (mId m3) "nonexistent"])
, (map3, [ DependencyReferenceError (mId m4) "one"
, DependencyReferenceError (mId m4) "two"])
]
validateMigrationMapTests :: [Test]
validateMigrationMapTests =
map mkValidateMapTest validateMapTestCases
where
mkValidateMapTest (mmap, errs) =
errs ~=? validateMigrationMap mmap