eq2go/internal/database/database_test.go

107 lines
2.2 KiB
Go

package database
import (
"testing"
"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
)
func TestNewSQLite(t *testing.T) {
// Test SQLite connection
db, err := NewSQLite("file::memory:?mode=memory&cache=shared")
if err != nil {
t.Fatalf("Failed to create SQLite database: %v", err)
}
defer db.Close()
// Test database type
if db.GetType() != SQLite {
t.Errorf("Expected SQLite database type, got %v", db.GetType())
}
// Test basic query
err = db.Execute("CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT)", nil)
if err != nil {
t.Fatalf("Failed to create test table: %v", err)
}
// Test insert
err = db.Execute("INSERT INTO test (name) VALUES (?)", &sqlitex.ExecOptions{
Args: []any{"test_value"},
})
if err != nil {
t.Fatalf("Failed to insert test data: %v", err)
}
// Test query
var name string
err = db.ExecTransient("SELECT name FROM test WHERE id = 1", func(stmt *sqlite.Stmt) error {
name = stmt.ColumnText(0)
return nil
})
if err != nil {
t.Fatalf("Failed to query test data: %v", err)
}
if name != "test_value" {
t.Errorf("Expected 'test_value', got '%s'", name)
}
}
func TestConfigValidation(t *testing.T) {
tests := []struct {
name string
config Config
wantErr bool
}{
{
name: "valid_sqlite_config",
config: Config{
Type: SQLite,
DSN: "file::memory:?mode=memory&cache=shared",
},
wantErr: false,
},
{
name: "invalid_database_type",
config: Config{
Type: DatabaseType(99),
DSN: "test",
},
wantErr: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
db, err := New(tt.config)
if (err != nil) != tt.wantErr {
t.Errorf("New() error = %v, wantErr %v", err, tt.wantErr)
return
}
if db != nil {
db.Close()
}
})
}
}
func TestDatabaseTypeMethods(t *testing.T) {
// Test SQLite
db, err := NewSQLite("file::memory:?mode=memory&cache=shared")
if err != nil {
t.Fatalf("Failed to create SQLite database: %v", err)
}
defer db.Close()
if db.GetType() != SQLite {
t.Errorf("Expected SQLite type, got %v", db.GetType())
}
// Verify GetPool works for SQLite
pool := db.GetPool()
if pool == nil {
t.Error("Expected non-nil pool for SQLite database")
}
}