db/delete_test.go

56 lines
1.5 KiB
Go
Raw Normal View History

package db_test
import (
"testing"
"apigo.cc/go/db"
_ "modernc.org/sqlite"
)
func TestSmartDelete(t *testing.T) {
dbInst := db.GetDB("sqlite://:memory:", nil)
// Create table and shadow table
dbInst.Exec("CREATE TABLE orders (id INTEGER PRIMARY KEY, item TEXT)")
dbInst.Exec("CREATE TABLE orders_deleted (id INTEGER PRIMARY KEY, item TEXT)")
t.Run("ShadowDelete", func(t *testing.T) {
dbInst.Exec("INSERT INTO orders (id, item) VALUES (1, 'Phone')")
res := dbInst.Delete("orders", "id = 1")
if res.Error != nil {
t.Fatalf("Delete failed: %v", res.Error)
}
if res.Changes() != 1 {
t.Errorf("Expected 1 change, got %d", res.Changes())
}
// Verify it's gone from main table
qr := dbInst.Query("SELECT COUNT(*) FROM orders WHERE id = 1")
count, _ := db.To[int](qr)
if count != 0 {
t.Errorf("Expected 0 records in main table, got %d", count)
}
// Verify it's in shadow table
qr2 := dbInst.Query("SELECT COUNT(*) FROM orders_deleted WHERE id = 1")
countDeleted, _ := db.To[int](qr2)
if countDeleted != 1 {
t.Errorf("Expected 1 record in shadow table, got %d", countDeleted)
}
})
t.Run("PhysicalDelete", func(t *testing.T) {
dbInst.Exec("CREATE TABLE logs (id INTEGER PRIMARY KEY, msg TEXT)")
dbInst.Exec("INSERT INTO logs (id, msg) VALUES (1, 'Login')")
dbInst.Delete("logs", "id = 1")
qr := dbInst.Query("SELECT COUNT(*) FROM logs WHERE id = 1")
count, _ := db.To[int](qr)
if count != 0 {
t.Errorf("Expected 0 records in logs, got %d", count)
}
})
}