summaryrefslogtreecommitdiff
path: root/database_test.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-06-02 20:27:05 +0200
committerxengineering <me@xengineering.eu>2026-06-02 20:27:05 +0200
commit3ad3565c64ed1ce692c0509d8fe5a7530f8fb7e3 (patch)
tree683dd70710ea9bbc9e3c95282c078e97ba3d55fd /database_test.go
parenta3009e165c4cdbf94eb23a071d5e6c39425539e8 (diff)
downloadfinserv-3ad3565c64ed1ce692c0509d8fe5a7530f8fb7e3.tar
finserv-3ad3565c64ed1ce692c0509d8fe5a7530f8fb7e3.tar.zst
finserv-3ad3565c64ed1ce692c0509d8fe5a7530f8fb7e3.zip
Add TestTransaction
This makes sure the assumption is correct that everything inside a transaction is rolled back if the transaction fails.
Diffstat (limited to 'database_test.go')
-rw-r--r--database_test.go37
1 files changed, 37 insertions, 0 deletions
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)