diff --git a/src/PaymentServer/Persistence.hs b/src/PaymentServer/Persistence.hs index 1b5ee93eda8fc9c50595d6764645b185ce79597c..478821e790fd69516905ebf51167b9003e913fb5 100644 --- a/src/PaymentServer/Persistence.hs +++ b/src/PaymentServer/Persistence.hs @@ -452,14 +452,14 @@ upgradeSchema targetVersion conn = do case compareVersion targetVersion currentVersion of Lesser -> return $ Left DatabaseSchemaTooNew Equal -> return $ Right () - Greater -> runUpgrades currentVersion + Greater -> runUpgrades currentVersion targetVersion where - runUpgrades :: Int -> IO (Either UpgradeError ()) - runUpgrades currentVersion = + runUpgrades :: Int -> Int -> IO (Either UpgradeError ()) + runUpgrades currentVersion targetVersion = let upgrades :: [[Sqlite.Query]] - upgrades = drop currentVersion updateVersions + upgrades = drop currentVersion $ take targetVersion updateVersions oneStep :: [Sqlite.Query] -> IO [()] oneStep = mapM $ Sqlite.execute_ conn diff --git a/test/Persistence.hs b/test/Persistence.hs index 37f4c8e7bffa205e8fcd7dcb70fc035ffac781d6..f5af37807dfa6a015c5759580c07218400d48f43 100644 --- a/test/Persistence.hs +++ b/test/Persistence.hs @@ -247,4 +247,28 @@ sqlite3DatabaseSchemaTests = let expected = Right latestVersion actual <- readVersion conn assertEqual "The recorded schema version should be the latest value" expected actual + + , testCase "identify version 0" $ + -- readVersion identifies an empty database schema as version 0 + Sqlite.withConnection ":memory:" $ \conn -> do + let expected = Right 0 + actual <- readVersion conn + assertEqual "An empty database schema is version 0" expected actual + + , testCase "identify version 1" $ + -- readVersion identifies schema version 1 + Sqlite.withConnection ":memory:" $ \conn -> do + upgradeSchema 1 conn + let expected = Right 1 + actual <- readVersion conn + assertEqual "readVersion identifies database schema version 1" expected actual + + , testCase "identify version 2" $ + -- readVersion identifies schema version 1 + Sqlite.withConnection ":memory:" $ \conn -> do + upgradeSchema 2 conn + let expected = Right 2 + actual <- readVersion conn + assertEqual "readVersion identifies database schema version 2" expected actual + ]