From 267db50fb04cd98f4ad40662a7808b8c8f18727e Mon Sep 17 00:00:00 2001 From: Jean-Paul Calderone <exarkun@twistedmatrix.com> Date: Mon, 3 May 2021 16:04:55 -0400 Subject: [PATCH] Support partial upgrades too. Prove it with tests. --- src/PaymentServer/Persistence.hs | 8 ++++---- test/Persistence.hs | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/PaymentServer/Persistence.hs b/src/PaymentServer/Persistence.hs index 1b5ee93..478821e 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 37f4c8e..f5af378 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 + ] -- GitLab