package bootstrap import ( "baron-sso-backend/internal/domain" "reflect" "testing" ) func TestDefaultTenantsSeedOrderAndHierarchy(t *testing.T) { expected := []struct { name string slug string tenantType string parentSlug string domains []string }{ { name: "한맥가족", slug: "hanmac-family", tenantType: domain.TenantTypeCompanyGroup, }, { name: "한맥기술", slug: "hanmac", tenantType: domain.TenantTypeCompany, parentSlug: "hanmac-family", domains: []string{"hanmaceng.co.kr", "hmac.kr"}, }, { name: "삼안", slug: "saman", tenantType: domain.TenantTypeCompany, parentSlug: "hanmac-family", domains: []string{"samaneng.com"}, }, } if len(defaultTenants) != len(expected) { t.Fatalf("expected %d default tenants, got %d", len(expected), len(defaultTenants)) } for i, want := range expected { got := defaultTenants[i] if got.Name != want.name { t.Fatalf("tenant[%d] name = %q, want %q", i, got.Name, want.name) } if got.Slug != want.slug { t.Fatalf("tenant[%d] slug = %q, want %q", i, got.Slug, want.slug) } if tenantType := stringField(t, got, "Type"); tenantType != want.tenantType { t.Fatalf("tenant[%d] type = %q, want %q", i, tenantType, want.tenantType) } if parentSlug := stringField(t, got, "ParentSlug"); parentSlug != want.parentSlug { t.Fatalf("tenant[%d] parent slug = %q, want %q", i, parentSlug, want.parentSlug) } if !reflect.DeepEqual(got.Domains, want.domains) { t.Fatalf("tenant[%d] domains = %#v, want %#v", i, got.Domains, want.domains) } } } func stringField(t *testing.T, target InitialTenantConfig, name string) string { t.Helper() value := reflect.ValueOf(target) field := value.FieldByName(name) if !field.IsValid() { t.Fatalf("InitialTenantConfig.%s is required", name) } if field.Kind() != reflect.String { t.Fatalf("InitialTenantConfig.%s must be a string", name) } return field.String() }