package testutil import ( "testing" "time" authdomain "mengstack/internal/modules/auth/domain" orgdomain "mengstack/internal/modules/org/domain" rbacdomain "mengstack/internal/modules/rbac/domain" "golang.org/x/crypto/bcrypt" "gorm.io/gorm" ) const DefaultTenantID = "00000000-0000-0000-0000-000000000001" func SeedTenant(t *testing.T, db *gorm.DB) string { t.Helper() tenant := orgdomain.Tenant{ ID: DefaultTenantID, Name: "Test Tenant", Slug: "test", } if err := db.FirstOrCreate(&tenant, orgdomain.Tenant{ID: DefaultTenantID}).Error; err != nil { t.Fatalf("seed tenant: %v", err) } return tenant.ID } func SeedUser(t *testing.T, db *gorm.DB, tenantID, email, password string) uint { t.Helper() hash, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { t.Fatalf("hash password: %v", err) } user := authdomain.User{ TenantID: tenantID, Username: email, Email: email, Password: string(hash), Nickname: "Test User", Status: 1, } if err := db.Create(&user).Error; err != nil { t.Fatalf("seed_user: %v", err) } return user.ID } func SeedUserWithRole(t *testing.T, db *gorm.DB, tenantID, email, password string) uint { t.Helper() userID := SeedUser(t, db, tenantID, email, password) role := rbacdomain.Role{ TenantID: tenantID, Name: "admin", IsSystem: true, } db.FirstOrCreate(&role, rbacdomain.Role{TenantID: tenantID, Name: "admin"}) userRole := rbacdomain.UserRole{ UserID: userID, TenantID: tenantID, RoleID: role.ID, } db.FirstOrCreate(&userRole, userRole) return userID } func FutureTime(d time.Duration) time.Time { return time.Now().Add(d) }