forked from baron/baron-sso
Implement tenant import and RP auto login policies
This commit is contained in:
@@ -2,17 +2,21 @@ package bootstrap
|
||||
|
||||
import (
|
||||
"baron-sso-backend/internal/domain"
|
||||
"reflect"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestDefaultTenantsSeedOrderAndHierarchy(t *testing.T) {
|
||||
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
|
||||
parentSlug string
|
||||
domains []string
|
||||
}{
|
||||
{
|
||||
name: "한맥가족",
|
||||
@@ -20,55 +24,61 @@ func TestDefaultTenantsSeedOrderAndHierarchy(t *testing.T) {
|
||||
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"},
|
||||
name: "Personal",
|
||||
slug: "personal",
|
||||
tenantType: domain.TenantTypePersonal,
|
||||
},
|
||||
}
|
||||
|
||||
if len(defaultTenants) != len(expected) {
|
||||
t.Fatalf("expected %d default tenants, got %d", len(expected), len(defaultTenants))
|
||||
if len(configs) != len(expected) {
|
||||
t.Fatalf("expected %d seed tenants, got %d", len(expected), len(configs))
|
||||
}
|
||||
|
||||
for i, want := range expected {
|
||||
got := defaultTenants[i]
|
||||
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 tenantType := stringField(t, got, "Type"); tenantType != want.tenantType {
|
||||
t.Fatalf("tenant[%d] type = %q, want %q", i, tenantType, want.tenantType)
|
||||
if got.Type != want.tenantType {
|
||||
t.Fatalf("tenant[%d] type = %q, want %q", i, got.Type, 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 got.ParentSlug != "" {
|
||||
t.Fatalf("tenant[%d] parent slug = %q, want empty root tenant", i, got.ParentSlug)
|
||||
}
|
||||
if !reflect.DeepEqual(got.Domains, want.domains) {
|
||||
t.Fatalf("tenant[%d] domains = %#v, want %#v", i, got.Domains, want.domains)
|
||||
}
|
||||
|
||||
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 stringField(t *testing.T, target InitialTenantConfig, name string) string {
|
||||
t.Helper()
|
||||
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)
|
||||
|
||||
value := reflect.ValueOf(target)
|
||||
field := value.FieldByName(name)
|
||||
if !field.IsValid() {
|
||||
t.Fatalf("InitialTenantConfig.%s is required", name)
|
||||
configs, err := loadSeedTenantConfigs()
|
||||
if err != nil {
|
||||
t.Fatalf("loadSeedTenantConfigs returned error: %v", err)
|
||||
}
|
||||
if field.Kind() != reflect.String {
|
||||
t.Fatalf("InitialTenantConfig.%s must be a string", name)
|
||||
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)
|
||||
}
|
||||
return field.String()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user