232 lines
4.7 KiB
Go
232 lines
4.7 KiB
Go
package testing
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestStarResult_MustString(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users WHERE name = ?", "Alice")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
row := rows.Row(0)
|
|
|
|
name := row.MustString("name")
|
|
if name != "Alice" {
|
|
t.Errorf("Expected 'Alice', got '%s'", name)
|
|
}
|
|
|
|
email := row.MustString("email")
|
|
if email != "alice@example.com" {
|
|
t.Errorf("Expected 'alice@example.com', got '%s'", email)
|
|
}
|
|
|
|
// Test non-existent column
|
|
nonexistent := row.MustString("nonexistent")
|
|
if nonexistent != "" {
|
|
t.Errorf("Expected empty string for non-existent column, got '%s'", nonexistent)
|
|
}
|
|
}
|
|
|
|
func TestStarResult_MustInt(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users WHERE name = ?", "Bob")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
row := rows.Row(0)
|
|
|
|
age := row.MustInt("age")
|
|
if age != 30 {
|
|
t.Errorf("Expected age 30, got %d", age)
|
|
}
|
|
|
|
id := row.MustInt("id")
|
|
if id <= 0 {
|
|
t.Errorf("Expected positive id, got %d", id)
|
|
}
|
|
}
|
|
|
|
func TestStarResult_MustInt64(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users WHERE name = ?", "Charlie")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
row := rows.Row(0)
|
|
|
|
age := row.MustInt64("age")
|
|
if age != 35 {
|
|
t.Errorf("Expected age 35, got %d", age)
|
|
}
|
|
}
|
|
|
|
func TestStarResult_MustFloat64(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users WHERE name = ?", "Alice")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
row := rows.Row(0)
|
|
|
|
balance := row.MustFloat64("balance")
|
|
if balance != 100.50 {
|
|
t.Errorf("Expected balance 100.50, got %f", balance)
|
|
}
|
|
}
|
|
|
|
func TestStarResult_MustBool(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users ORDER BY name")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
// Alice - active
|
|
row := rows.Row(0)
|
|
active := row.MustBool("active")
|
|
if !active {
|
|
t.Errorf("Expected Alice to be active")
|
|
}
|
|
|
|
// Charlie - inactive
|
|
row = rows.Row(2)
|
|
active = row.MustBool("active")
|
|
if active {
|
|
t.Errorf("Expected Charlie to be inactive")
|
|
}
|
|
}
|
|
|
|
func TestStarResult_IsNil(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
// Insert a row with NULL value
|
|
_, err := db.Exec("INSERT INTO users (name, email, age, balance, active, created_at) VALUES (?, ?, NULL, ?, ?, ?)",
|
|
"David", "david@example.com", 150.0, true, time.Now())
|
|
if err != nil {
|
|
t.Fatalf("Insert failed: %v", err)
|
|
}
|
|
|
|
rows, err := db.Query("SELECT * FROM users WHERE name = ?", "David")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
row := rows.Row(0)
|
|
|
|
if !row.IsNil("age") {
|
|
t.Errorf("Expected age to be NULL")
|
|
}
|
|
|
|
if row.IsNil("name") {
|
|
t.Errorf("Expected name to not be NULL")
|
|
}
|
|
}
|
|
|
|
func TestStarResultCol_MustString(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users ORDER BY name")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
col := rows.Col("name")
|
|
names := col.MustString()
|
|
|
|
expected := []string{"Alice", "Bob", "Charlie"}
|
|
for i, name := range names {
|
|
if name != expected[i] {
|
|
t.Errorf("Expected name '%s', got '%s'", expected[i], name)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStarResultCol_MustInt(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users ORDER BY name")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
col := rows.Col("age")
|
|
ages := col.MustInt()
|
|
|
|
expected := []int{25, 30, 35}
|
|
for i, age := range ages {
|
|
if age != expected[i] {
|
|
t.Errorf("Expected age %d, got %d", expected[i], age)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStarResultCol_MustFloat64(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users ORDER BY name")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
col := rows.Col("balance")
|
|
balances := col.MustFloat64()
|
|
|
|
expected := []float64{100.50, 200.75, 300.25}
|
|
for i, balance := range balances {
|
|
if balance != expected[i] {
|
|
t.Errorf("Expected balance %f, got %f", expected[i], balance)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestStarResultCol_MustBool(t *testing.T) {
|
|
db := setupTestDB(t)
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM users ORDER BY name")
|
|
if err != nil {
|
|
t.Fatalf("Query failed: %v", err)
|
|
}
|
|
defer rows.Close()
|
|
|
|
col := rows.Col("active")
|
|
actives := col.MustBool()
|
|
|
|
expected := []bool{true, true, false}
|
|
for i, active := range actives {
|
|
if active != expected[i] {
|
|
t.Errorf("Expected active %v, got %v", expected[i], active)
|
|
}
|
|
}
|
|
}
|