forked from baron/baron-sso
253 lines
6.7 KiB
TypeScript
253 lines
6.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
buildAuthenticatedOrgChartTenantPickerUrl,
|
|
buildAuthenticatedOrgChartUrl,
|
|
buildOrgChartTenantPickerUrl,
|
|
filterNonHanmacFamilyTenants,
|
|
isHanmacFamilyUser,
|
|
parseOrgChartTenantSelection,
|
|
} from "./orgChartPicker";
|
|
|
|
describe("orgChartPicker", () => {
|
|
it("builds the tenant picker embed URL from ORGFRONT_URL", () => {
|
|
expect(buildOrgChartTenantPickerUrl("https://orgchart.example.com/")).toBe(
|
|
"https://orgchart.example.com/embed/picker?mode=single&select=tenant&width=400&height=600",
|
|
);
|
|
});
|
|
|
|
it("adds internal visibility to tenant picker URLs only when requested", () => {
|
|
expect(
|
|
buildOrgChartTenantPickerUrl("https://orgchart.example.com/", {
|
|
includeInternal: true,
|
|
}),
|
|
).toBe(
|
|
"https://orgchart.example.com/embed/picker?mode=single&select=tenant&width=400&height=600&includeInternal=true",
|
|
);
|
|
});
|
|
|
|
it("adds tenantId to the tenant picker URL when Hanmac family scope is known", () => {
|
|
expect(
|
|
buildOrgChartTenantPickerUrl("https://orgchart.example.com/", {
|
|
tenantId: "hanmac-family-id",
|
|
}),
|
|
).toBe(
|
|
"https://orgchart.example.com/embed/picker?mode=single&select=tenant&width=400&height=600&tenantId=hanmac-family-id",
|
|
);
|
|
});
|
|
|
|
it("wraps the picker URL with the org-chart auto login entry", () => {
|
|
expect(
|
|
buildAuthenticatedOrgChartTenantPickerUrl(
|
|
"https://orgchart.example.com",
|
|
{
|
|
tenantId: "hanmac-family-id",
|
|
},
|
|
),
|
|
).toBe(
|
|
"https://orgchart.example.com/login?auto=1&returnTo=%2Fembed%2Fpicker%3Fmode%3Dsingle%26select%3Dtenant%26width%3D400%26height%3D600%26tenantId%3Dhanmac-family-id%26includeInternal%3Dtrue",
|
|
);
|
|
});
|
|
|
|
it("builds the admin chart navigation URL with internal visibility enabled", () => {
|
|
expect(buildAuthenticatedOrgChartUrl("https://orgchart.example.com/")).toBe(
|
|
"https://orgchart.example.com/login?auto=1&returnTo=%2Fchart%3FincludeInternal%3Dtrue",
|
|
);
|
|
});
|
|
|
|
it("can build chart navigation URL without internal visibility", () => {
|
|
expect(
|
|
buildAuthenticatedOrgChartUrl("https://orgchart.example.com/", {
|
|
includeInternal: false,
|
|
}),
|
|
).toBe("https://orgchart.example.com/login?auto=1&returnTo=%2Fchart");
|
|
});
|
|
|
|
it("parses the first tenant id and name from orgfront confirm messages", () => {
|
|
expect(
|
|
parseOrgChartTenantSelection({
|
|
type: "orgfront:picker:confirm",
|
|
payload: {
|
|
mode: "single",
|
|
selections: [
|
|
{
|
|
type: "tenant",
|
|
id: "03dbe16b-e47b-4f72-927b-782807d67a35",
|
|
name: "기술기획",
|
|
},
|
|
],
|
|
},
|
|
}),
|
|
).toEqual({
|
|
id: "03dbe16b-e47b-4f72-927b-782807d67a35",
|
|
name: "기술기획",
|
|
});
|
|
});
|
|
|
|
it("ignores non-tenant or malformed picker messages", () => {
|
|
expect(
|
|
parseOrgChartTenantSelection({
|
|
type: "orgfront:picker:confirm",
|
|
payload: {
|
|
mode: "single",
|
|
selections: [{ type: "user", id: "u-1", name: "User" }],
|
|
},
|
|
}),
|
|
).toBeNull();
|
|
|
|
expect(parseOrgChartTenantSelection({ type: "other" })).toBeNull();
|
|
});
|
|
|
|
it("filters Hanmac family subtree and system tenants from non-family tenant choices", () => {
|
|
const visibleTenants = filterNonHanmacFamilyTenants(
|
|
[
|
|
{
|
|
id: "system-id",
|
|
slug: "system",
|
|
name: "System",
|
|
type: "SYSTEM",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "external-id",
|
|
slug: "external",
|
|
name: "External",
|
|
type: "COMPANY",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "hanmac-family-id",
|
|
slug: "hanmac-family",
|
|
name: "한맥가족",
|
|
type: "COMPANY_GROUP",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "hanmac-company-id",
|
|
slug: "hanmac-company",
|
|
name: "한맥기술",
|
|
type: "COMPANY",
|
|
parentId: "hanmac-family-id",
|
|
},
|
|
{
|
|
id: "hanmac-team-id",
|
|
slug: "hanmac-team",
|
|
name: "한맥팀",
|
|
type: "USER_GROUP",
|
|
parentId: "hanmac-company-id",
|
|
},
|
|
],
|
|
"hanmac-family-id",
|
|
);
|
|
|
|
expect(visibleTenants.map((tenant) => tenant.slug)).toEqual(["external"]);
|
|
});
|
|
|
|
it("detects existing users as Hanmac family from tenant subtree without metadata flag", () => {
|
|
const tenants = [
|
|
{
|
|
id: "external-id",
|
|
slug: "external",
|
|
name: "External",
|
|
type: "COMPANY",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "hanmac-family-id",
|
|
slug: "hanmac-family",
|
|
name: "한맥가족",
|
|
type: "COMPANY_GROUP",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "hanmac-company-id",
|
|
slug: "hanmac-company",
|
|
name: "한맥기술",
|
|
type: "COMPANY",
|
|
parentId: "hanmac-family-id",
|
|
},
|
|
{
|
|
id: "hanmac-team-id",
|
|
slug: "hanmac-team",
|
|
name: "기술기획",
|
|
type: "USER_GROUP",
|
|
parentId: "hanmac-company-id",
|
|
},
|
|
];
|
|
|
|
expect(
|
|
isHanmacFamilyUser(
|
|
{
|
|
companyCode: "external",
|
|
tenant: tenants[0],
|
|
joinedTenants: [tenants[3]],
|
|
metadata: {},
|
|
},
|
|
tenants,
|
|
"hanmac-family-id",
|
|
),
|
|
).toBe(true);
|
|
});
|
|
|
|
it("does not treat legacy hanmacFamily metadata as Hanmac family without tenant evidence", () => {
|
|
const tenants = [
|
|
{
|
|
id: "hanmac-family-id",
|
|
slug: "hanmac-family",
|
|
name: "한맥가족",
|
|
type: "COMPANY_GROUP",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "external-id",
|
|
slug: "external",
|
|
name: "External",
|
|
type: "COMPANY",
|
|
parentId: undefined,
|
|
},
|
|
];
|
|
|
|
expect(
|
|
isHanmacFamilyUser(
|
|
{
|
|
companyCode: "external",
|
|
tenant: tenants[1],
|
|
metadata: { hanmacFamily: true },
|
|
},
|
|
tenants,
|
|
"hanmac-family-id",
|
|
),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("does not treat userType metadata as Hanmac family without tenant evidence", () => {
|
|
const tenants = [
|
|
{
|
|
id: "hanmac-family-id",
|
|
slug: "hanmac-family",
|
|
name: "한맥가족",
|
|
type: "COMPANY_GROUP",
|
|
parentId: undefined,
|
|
},
|
|
{
|
|
id: "external-id",
|
|
slug: "external",
|
|
name: "External",
|
|
type: "COMPANY",
|
|
parentId: undefined,
|
|
},
|
|
];
|
|
|
|
expect(
|
|
isHanmacFamilyUser(
|
|
{
|
|
companyCode: "external",
|
|
tenant: tenants[1],
|
|
metadata: { userType: "hanmac" },
|
|
},
|
|
tenants,
|
|
"hanmac-family-id",
|
|
),
|
|
).toBe(false);
|
|
});
|
|
});
|