72 lines
1.5 KiB
Go
72 lines
1.5 KiB
Go
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)
|
|
|
|
// Test opening database
|
|
db, err := Open(testDB)
|
|
if err != nil {
|
|
t.Fatalf("Failed to open database: %v", err)
|
|
}
|
|
defer db.Close()
|
|
|
|
// Test creating a simple table
|
|
err = db.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 = db.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 = db.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 = db.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 = db.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)
|
|
}
|
|
} |