From 3ad3565c64ed1ce692c0509d8fe5a7530f8fb7e3 Mon Sep 17 00:00:00 2001 From: xengineering Date: Tue, 2 Jun 2026 20:27:05 +0200 Subject: Add TestTransaction This makes sure the assumption is correct that everything inside a transaction is rolled back if the transaction fails. --- database_test.go | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/database_test.go b/database_test.go index 26e4e3d..2f73865 100644 --- a/database_test.go +++ b/database_test.go @@ -31,6 +31,43 @@ func TestReadMigrations(t *testing.T) { } } +func TestTransaction(t *testing.T) { + db, _ := emptyDB(t) + + newVersion := 1 + err := Transaction(db, func(tx *sql.Tx) error { + // valid statement + _, err := tx.Exec(fmt.Sprintf("PRAGMA user_version = %d;", newVersion)) + if err != nil { + return err + } + + // invalid statement which should roll back the whole transaction + _, err = tx.Exec("PRAGMA user_version THIS IS SYNTAX ERROR TALKING!!!") + if err != nil { + return err + } + return nil + }) + if err == nil { + t.Fatal("Error was not detected.") + } + + version, err := UserVersion(db) + if err != nil { + t.Fatalf("Failed to get user_version: %v", err) + } + + if version == newVersion { + t.Fatal("Valid statement was not rolled back.") + } + + expectedVersion := 0 + if version != expectedVersion { + t.Fatalf("Expected user_version %d but got %d", expectedVersion, version) + } +} + func TestMigrate(t *testing.T) { db, _ := emptyDB(t) -- cgit v1.3.1