db/generic_test.go

48 lines
1.1 KiB
Go
Raw Normal View History

package db_test
import (
"testing"
"apigo.cc/go/db"
_ "modernc.org/sqlite"
)
func TestGenericQuery(t *testing.T) {
dbInst := db.GetDB("sqlite://:memory:", nil)
if dbInst == nil {
t.Fatal("Failed to get DB")
}
dbInst.Exec("CREATE TABLE test_generic (id INTEGER PRIMARY KEY, name TEXT)")
dbInst.Exec("INSERT INTO test_generic (name) VALUES (?)", "Alice")
dbInst.Exec("INSERT INTO test_generic (name) VALUES (?)", "Bob")
t.Run("ToSlice", func(t *testing.T) {
type Item struct {
Id int
Name string
}
res := dbInst.Query("SELECT id, name FROM test_generic ORDER BY id")
items, err := db.ToSlice[Item](res)
if err != nil {
t.Fatalf("ToSlice failed: %v", err)
}
if len(items) != 2 {
t.Errorf("Expected 2 items, got %d", len(items))
}
if items[0].Name != "Alice" || items[1].Name != "Bob" {
t.Errorf("Incorrect data: %+v", items)
}
})
t.Run("ToValue", func(t *testing.T) {
res := dbInst.Query("SELECT name FROM test_generic WHERE id = ?", 1)
name, err := db.ToValue[string](res)
if err != nil {
t.Fatalf("ToValue failed: %v", err)
}
if name != "Alice" {
t.Errorf("Expected Alice, got %s", name)
}
})
}