forked from baron/baron-sso
127 lines
3.4 KiB
TypeScript
127 lines
3.4 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import type { TenantSummary } from "../../../lib/adminApi";
|
|
import {
|
|
mergeTenantOrgConfig,
|
|
ORG_UNIT_TYPE_OPTIONS,
|
|
readTenantOrgConfig,
|
|
removeTenantOrgConfig,
|
|
shouldAllowHanmacOrgConfig,
|
|
} from "./orgConfig";
|
|
|
|
function tenant(
|
|
id: string,
|
|
type: string,
|
|
name: string,
|
|
slug: string,
|
|
parentId?: string,
|
|
): TenantSummary {
|
|
return {
|
|
id,
|
|
type,
|
|
name,
|
|
slug,
|
|
description: "",
|
|
status: "active",
|
|
parentId,
|
|
memberCount: 0,
|
|
createdAt: "2026-05-11T00:00:00.000Z",
|
|
updatedAt: "2026-05-11T00:00:00.000Z",
|
|
};
|
|
}
|
|
|
|
describe("tenant org config", () => {
|
|
it("allows org config only for hanmac-family descendants", () => {
|
|
const family = tenant(
|
|
"family",
|
|
"COMPANY_GROUP",
|
|
"한맥가족",
|
|
"hanmac-family",
|
|
);
|
|
const saman = tenant("saman", "COMPANY", "삼안", "saman", "family");
|
|
const team = tenant("team", "USER_GROUP", "기획팀", "planning", "saman");
|
|
const outsider = tenant("outsider", "COMPANY", "외부", "outsider");
|
|
const tenants = [family, saman, team, outsider];
|
|
|
|
expect(shouldAllowHanmacOrgConfig(team, tenants)).toBe(true);
|
|
expect(shouldAllowHanmacOrgConfig(family, tenants)).toBe(false);
|
|
expect(shouldAllowHanmacOrgConfig(outsider, tenants)).toBe(false);
|
|
});
|
|
|
|
it("reads and writes tenant visibility and org unit type", () => {
|
|
expect(
|
|
readTenantOrgConfig({ visibility: "private", orgUnitType: "팀" }),
|
|
).toEqual({
|
|
orgUnitType: "팀",
|
|
visibility: "private",
|
|
worksmobileExcluded: false,
|
|
});
|
|
expect(
|
|
readTenantOrgConfig({ visibility: "internal", orgUnitType: "센터" }),
|
|
).toEqual({
|
|
orgUnitType: "센터",
|
|
visibility: "internal",
|
|
worksmobileExcluded: false,
|
|
});
|
|
|
|
expect(
|
|
mergeTenantOrgConfig(
|
|
{ userSchema: [], visibility: "private", orgUnitType: "팀" },
|
|
{
|
|
orgUnitType: "",
|
|
visibility: "internal",
|
|
worksmobileExcluded: false,
|
|
},
|
|
),
|
|
).toEqual({
|
|
userSchema: [],
|
|
visibility: "internal",
|
|
worksmobileExcluded: false,
|
|
});
|
|
});
|
|
|
|
it("reads, writes, and removes the Worksmobile exclusion flag", () => {
|
|
expect(readTenantOrgConfig({ worksmobileExcluded: true })).toMatchObject({
|
|
worksmobileExcluded: true,
|
|
});
|
|
expect(readTenantOrgConfig({ worksmobileExcluded: "true" })).toMatchObject({
|
|
worksmobileExcluded: true,
|
|
});
|
|
expect(
|
|
mergeTenantOrgConfig(
|
|
{ userSchema: [], worksmobileExcluded: false },
|
|
{
|
|
orgUnitType: "팀",
|
|
visibility: "private",
|
|
worksmobileExcluded: true,
|
|
},
|
|
),
|
|
).toEqual({
|
|
userSchema: [],
|
|
orgUnitType: "팀",
|
|
visibility: "private",
|
|
worksmobileExcluded: true,
|
|
});
|
|
expect(
|
|
removeTenantOrgConfig({
|
|
userSchema: [],
|
|
orgUnitType: "팀",
|
|
visibility: "private",
|
|
worksmobileExcluded: true,
|
|
}),
|
|
).toEqual({ userSchema: [] });
|
|
});
|
|
|
|
it("includes task-force and executive-direct org unit types", () => {
|
|
expect(ORG_UNIT_TYPE_OPTIONS).toEqual(
|
|
expect.arrayContaining(["TF", "TF팀", "임원직속"]),
|
|
);
|
|
expect(readTenantOrgConfig({ orgUnitType: "TF" }).orgUnitType).toBe("TF");
|
|
expect(readTenantOrgConfig({ orgUnitType: "TF팀" }).orgUnitType).toBe(
|
|
"TF팀",
|
|
);
|
|
expect(readTenantOrgConfig({ orgUnitType: "임원직속" }).orgUnitType).toBe(
|
|
"임원직속",
|
|
);
|
|
});
|
|
});
|