Files
yml2213andCursor 47ceb53c09 test: 测试库改为模板克隆并纳入完整租号 e2e
每个包不再重复 DROP+迁移,清空改用 DELETE 并重置自增,go test ./... 从约 6 分钟降到十几秒。租号全链路改走 NewTestDB,去掉依赖额外 DSN 才会跑的过渡测试。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-10 15:46:18 +08:00

102 lines
2.6 KiB
Go

package database
import (
"strings"
"testing"
)
func TestAssertTestDatabaseName(t *testing.T) {
t.Parallel()
cases := []struct {
name string
wantErr string
}{
{name: "hfb_sys_test", wantErr: ""},
{name: "hfb_sys_test_order", wantErr: ""},
{name: "hfb_e2e_flow", wantErr: ""},
{name: "", wantErr: "必须包含数据库名"},
{name: "hfb-sys-test", wantErr: "只允许字母、数字、下划线"},
{name: "hfb_sys", wantErr: "需包含 test 或 e2e"},
{name: strings.Repeat("test_", 20), wantErr: "超过 MySQL 上限"},
}
for _, item := range cases {
err := assertTestDatabaseName(item.name)
if item.wantErr == "" {
if err != nil {
t.Fatalf("%q: unexpected error %v", item.name, err)
}
continue
}
if err == nil || !strings.Contains(err.Error(), item.wantErr) {
t.Fatalf("%q: error = %v, want containing %q", item.name, err, item.wantErr)
}
}
}
func TestGooseUpSQL(t *testing.T) {
t.Parallel()
raw := "-- +goose Up\nCREATE TABLE t (id INT);\n-- +goose Down\nDROP TABLE t;\n"
got := strings.TrimSpace(gooseUpSQL(raw))
if got != "CREATE TABLE t (id INT);" {
t.Fatalf("gooseUpSQL = %q", got)
}
}
func TestNewDryRunDB(t *testing.T) {
t.Parallel()
if NewDryRunDB() == nil {
t.Fatal("NewDryRunDB returned nil")
}
}
func TestNewTestDBTruncatesBetweenCalls(t *testing.T) {
db := NewTestDB()
if err := db.Exec("INSERT INTO users (phone) VALUES ('13900001111')").Error; err != nil {
t.Fatalf("insert user: %v", err)
}
var n int64
if err := db.Raw("SELECT COUNT(*) FROM users").Scan(&n).Error; err != nil {
t.Fatal(err)
}
if n != 1 {
t.Fatalf("users count = %d, want 1", n)
}
db = NewTestDB()
if err := db.Raw("SELECT COUNT(*) FROM users").Scan(&n).Error; err != nil {
t.Fatal(err)
}
if n != 0 {
t.Fatalf("users count after reset = %d, want 0", n)
}
}
func TestNewTestDBKeepsSchemaFingerprint(t *testing.T) {
db := NewTestDB()
var fingerprint string
if err := db.Raw("SELECT v FROM " + schemaMetaTable + " WHERE k = 'fingerprint'").Scan(&fingerprint).Error; err != nil {
t.Fatalf("read fingerprint: %v", err)
}
if fingerprint == "" {
t.Fatal("expected schema fingerprint to survive truncate")
}
}
func TestNewTestDBResetsAutoIncrement(t *testing.T) {
db := NewTestDB()
if err := db.Exec("INSERT INTO users (phone) VALUES ('13900002222')").Error; err != nil {
t.Fatal(err)
}
db = NewTestDB()
if err := db.Exec("INSERT INTO users (phone) VALUES ('13900003333')").Error; err != nil {
t.Fatal(err)
}
var id uint64
if err := db.Raw("SELECT id FROM users WHERE phone = '13900003333'").Scan(&id).Error; err != nil {
t.Fatal(err)
}
if id != 1 {
t.Fatalf("id after reset = %d, want 1", id)
}
}