package bootstrap import ( "baron-sso-backend/internal/domain" "os" "path/filepath" "testing" ) func TestSeedTenantCSVDefinesOnlyRequiredRootTenants(t *testing.T) { configs, err := loadSeedTenantConfigs() if err != nil { t.Fatalf("loadSeedTenantConfigs returned error: %v", err) } expected := []struct { name string slug string tenantType string }{ { name: "한맥가족", slug: "hanmac-family", tenantType: domain.TenantTypeCompanyGroup, }, { name: "Personal", slug: "personal", tenantType: domain.TenantTypePersonal, }, } if len(configs) != len(expected) { t.Fatalf("expected %d seed tenants, got %d", len(expected), len(configs)) } for i, want := range expected { got := configs[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 got.Type != want.tenantType { t.Fatalf("tenant[%d] type = %q, want %q", i, got.Type, want.tenantType) } if got.ParentSlug != "" { t.Fatalf("tenant[%d] parent slug = %q, want empty root tenant", i, got.ParentSlug) } } for _, tenant := range configs { if tenant.Slug == "system" || tenant.Slug == "hanmac" || tenant.Slug == "saman" { t.Fatalf("tenant %q must be configured by import, not seed CSV", tenant.Slug) } } } func TestLoadSeedTenantConfigsUsesConfiguredCSVPath(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "seed-tenant.csv") csv := "name,type,parent_tenant_slug,slug,memo,email_domain\n" + "Root,COMPANY_GROUP,,root,Root memo,\n" + "Child,COMPANY,root,child,Child memo,child.example.com\n" if err := os.WriteFile(path, []byte(csv), 0o600); err != nil { t.Fatalf("failed to write seed csv: %v", err) } t.Setenv(seedTenantCSVPathEnv, path) configs, err := loadSeedTenantConfigs() if err != nil { t.Fatalf("loadSeedTenantConfigs returned error: %v", err) } if len(configs) != 2 { t.Fatalf("expected 2 configs, got %d", len(configs)) } if configs[1].ParentSlug != "root" { t.Fatalf("child parent slug = %q, want root", configs[1].ParentSlug) } if len(configs[1].Domains) != 1 || configs[1].Domains[0] != "child.example.com" { t.Fatalf("child domains = %#v, want child.example.com", configs[1].Domains) } }