package repository import ( "testing" "ezops/model" "github.com/glebarez/sqlite" "gorm.io/gorm" ) // TestServerRepositoryListHostnameOrder 验证实际服务器仓储按主机名分页排序。 // Logan.Li func TestServerRepositoryListHostnameOrder(t *testing.T) { db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { t.Fatalf("打开测试数据库失败: %v", err) } if err := db.AutoMigrate(&model.Server{}, &model.Region{}, &model.Cloud{}); err != nil { t.Fatalf("迁移测试表失败: %v", err) } for _, hostname := range []string{"test-win", "c-windows", "alpha-host"} { if err := db.Create(&model.Server{Hostname: hostname, IP: "127.0.0.1"}).Error; err != nil { t.Fatalf("创建测试服务器失败: %v", err) } } repo := NewServerRepository(db) servers, total, err := repo.List("", "", "", "hostname", "asc", 1, 10) if err != nil { t.Fatalf("查询测试服务器失败: %v", err) } if total != 3 || len(servers) != 3 { t.Fatalf("服务器数量异常 total=%d len=%d", total, len(servers)) } if servers[0].Hostname != "alpha-host" || servers[2].Hostname != "test-win" { t.Fatalf("主机名升序结果异常: %q, %q, %q", servers[0].Hostname, servers[1].Hostname, servers[2].Hostname) } } // TestServerOrderClause 验证非法排序参数无法进入 SQL 表达式。 // Logan.Li func TestServerOrderClause(t *testing.T) { tests := []struct { sortField string sortOrder string want string }{ {want: "created_at DESC"}, {sortField: "hostname", sortOrder: "asc", want: "LOWER(hostname) ASC, id ASC"}, {sortField: "hostname", sortOrder: "desc", want: "LOWER(hostname) DESC, id DESC"}, {sortField: "hostname; DROP TABLE asset_servers", sortOrder: "asc", want: "created_at DESC"}, } for _, tt := range tests { if got := serverOrderClause(tt.sortField, tt.sortOrder); got != tt.want { t.Fatalf("serverOrderClause(%q, %q) = %q, want %q", tt.sortField, tt.sortOrder, got, tt.want) } } }