package main import ( "testing" "atlas9.dev/c/core" "atlas9.dev/c/core/iam" ) func saveTenant(t *testing.T, url string, name string, tenantType iam.TenantType) iam.Tenant { t.Helper() return mustRPC[iam.Tenant, iam.Tenant](t, url, "/tenants/save", iam.Tenant{ Name: name, Type: tenantType, }) } func TestSaveTenant(t *testing.T) { s := setupTestServer(t) tenant := saveTenant(t, s.URL, "Test Org", iam.TenantOrganization) if tenant.ID.IsZero() { t.Error("expected non-zero tenant ID") } if tenant.Name != "Test Org" { t.Errorf("name = %q, want %q", tenant.Name, "Test Org") } if tenant.Type != iam.TenantOrganization { t.Errorf("type = %q, want %q", tenant.Type, iam.TenantOrganization) } } func TestSaveTenantIdempotent(t *testing.T) { s := setupTestServer(t) // Save with explicit ID id := core.NewID() t1 := mustRPC[iam.Tenant, iam.Tenant](t, s.URL, "/tenants/save", iam.Tenant{ ID: id, Name: "First", Type: iam.TenantPersonal, }) // Save again with same ID returns existing t2 := mustRPC[iam.Tenant, iam.Tenant](t, s.URL, "/tenants/save", iam.Tenant{ ID: id, Name: "Second", Type: iam.TenantPersonal, }) if t2.Name != "First" { t.Errorf("expected idempotent save to return existing name %q, got %q", "First", t2.Name) } if !t1.ID.Equal(t2.ID) { t.Errorf("expected same ID, got %s and %s", t1.ID, t2.ID) } } func TestGetTenant(t *testing.T) { s := setupTestServer(t) tenant := saveTenant(t, s.URL, "My Org", iam.TenantOrganization) got := mustRPC[GetTenantReq, iam.Tenant](t, s.URL, "/tenants/get", GetTenantReq{ID: tenant.ID}) if got.Name != "My Org" { t.Errorf("name = %q, want %q", got.Name, "My Org") } } func TestDeleteTenant(t *testing.T) { s := setupTestServer(t) tenant := saveTenant(t, s.URL, "To Delete", iam.TenantOrganization) mustRPC[DeleteTenantReq, DeleteTenantRes](t, s.URL, "/tenants/delete", DeleteTenantReq{ID: tenant.ID}) r := rpcCall[GetTenantReq, iam.Tenant](t, s.URL, "/tenants/get", GetTenantReq{ID: tenant.ID}) if r.Error == "" { t.Error("expected error getting deleted tenant") } } func TestListTenants(t *testing.T) { s := setupTestServer(t) saveTenant(t, s.URL, "Org A", iam.TenantOrganization) saveTenant(t, s.URL, "Org B", iam.TenantOrganization) res := mustRPC[ListTenantsReq, ListTenantsRes](t, s.URL, "/tenants/list", ListTenantsReq{}) if len(res.Items) != 2 { t.Errorf("expected 2 tenants, got %d", len(res.Items)) } }