summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--database.go13
-rw-r--r--database_test.go33
2 files changed, 37 insertions, 9 deletions
diff --git a/database.go b/database.go
index c71ff78..44a172d 100644
--- a/database.go
+++ b/database.go
@@ -66,3 +66,16 @@ func Migrate(db *sql.DB, index int) error {
return err
})
}
+
+func UserVersion(db *sql.DB) (int, error) {
+ var version int
+
+ err := Transaction(db, func(tx *sql.Tx) error {
+ return tx.QueryRow(`PRAGMA user_version`).Scan(&version)
+ })
+ if err != nil {
+ return 0, err
+ }
+
+ return version, nil
+}
diff --git a/database_test.go b/database_test.go
index b412af0..901db42 100644
--- a/database_test.go
+++ b/database_test.go
@@ -29,21 +29,21 @@ func TestMigrationContent(t *testing.T) {
if !strings.HasPrefix(migration, expectation) {
t.Fatalf("Expected '%s' at start of '%s'.", expectation, path)
}
-
- n := strings.Count(migration, `user_version`)
- if n != 1 {
- t.Fatalf(
- "'user_version' was mentioned more than once in %s. "+
- "This is likely not intended.",
- path,
- )
- }
}
}
func TestMigrations(t *testing.T) {
db, _ := emptyDB(t)
+ userVersion, err := UserVersion(db)
+ if err != nil {
+ t.Fatalf("Failed to get initial user_version: %v", err)
+ }
+
+ if userVersion != 0 {
+ t.Fatalf("Expected user_version 0 but got %d.", userVersion)
+ }
+
for i := range migrations {
path := migrationPath(i)
t.Logf("Test execution of %s", path)
@@ -52,5 +52,20 @@ func TestMigrations(t *testing.T) {
if err != nil {
t.Fatalf("Failed to execute migration %s: %v", path, err)
}
+
+ userVersion, err = UserVersion(db)
+ if err != nil {
+ t.Fatalf("Failed to get user_version after migration: %v", err)
+ }
+
+ expected := i + 1
+ if userVersion != expected {
+ t.Fatalf(
+ "Expected user_version %d after running %s but got %d.",
+ expected,
+ path,
+ userVersion,
+ )
+ }
}
}