package database import ( "os" "testing" "zombiezen.com/go/sqlite" ) func TestDatabaseOperations(t *testing.T) { // Use a temporary database file testDB := "test.db" defer os.Remove(testDB) // Initialize the singleton database err := Init(testDB) if err != nil { t.Fatalf("Failed to initialize database: %v", err) } defer Close() // Test creating a simple table err = Exec("CREATE TABLE test_users (id INTEGER PRIMARY KEY, name TEXT)") if err != nil { t.Fatalf("Failed to create table: %v", err) } // Test inserting data err = Exec("INSERT INTO test_users (name) VALUES (?)", "Alice") if err != nil { t.Fatalf("Failed to insert data: %v", err) } // Test querying data var foundName string err = Query("SELECT name FROM test_users WHERE name = ?", func(stmt *sqlite.Stmt) error { foundName = stmt.ColumnText(0) return nil }, "Alice") if err != nil { t.Fatalf("Failed to query data: %v", err) } if foundName != "Alice" { t.Errorf("Expected 'Alice', got '%s'", foundName) } // Test transaction err = Transaction(func(tx *Tx) error { return tx.Exec("INSERT INTO test_users (name) VALUES (?)", "Bob") }) if err != nil { t.Fatalf("Transaction failed: %v", err) } // Verify transaction worked var count int err = Query("SELECT COUNT(*) FROM test_users", func(stmt *sqlite.Stmt) error { count = stmt.ColumnInt(0) return nil }) if err != nil { t.Fatalf("Failed to count users: %v", err) } if count != 2 { t.Errorf("Expected 2 users, got %d", count) } }