forked from baron/baron-sso
chore: consolidate local integration changes
This commit is contained in:
@@ -194,32 +194,19 @@ test("org chart non-shared title does not render the MH Dashboard eyebrow", asyn
|
||||
window.localStorage.setItem("dev_tenant_id", "group");
|
||||
});
|
||||
|
||||
await page.route("**/api/v1/admin/tenants**", async (route) => {
|
||||
await page.route("**/api/v1/admin/orgchart/snapshot**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
items: [
|
||||
tenants: [
|
||||
{
|
||||
...tenant("group", "Baron Group", "baron"),
|
||||
type: "COMPANY_GROUP",
|
||||
},
|
||||
tenant("engineering", "Engineering", "engineering", "group"),
|
||||
],
|
||||
limit: 10000,
|
||||
offset: 0,
|
||||
total: 2,
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
await page.route("**/api/v1/admin/users**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
items: [user("u-eng", "Engineering User", "engineering")],
|
||||
limit: 5000,
|
||||
offset: 0,
|
||||
total: 1,
|
||||
users: [user("u-eng", "Engineering User", "engineering")],
|
||||
cache: { source: "redis", hit: true },
|
||||
}),
|
||||
});
|
||||
});
|
||||
@@ -230,6 +217,103 @@ test("org chart non-shared title does not render the MH Dashboard eyebrow", asyn
|
||||
await expect(page.getByText("MH Dashboard", { exact: true })).toHaveCount(0);
|
||||
});
|
||||
|
||||
test("org chart toggles internal organizations from the total users tooltip", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.addInitScript(() => {
|
||||
window.localStorage.setItem("playwright_auth_bypass", "1");
|
||||
window.localStorage.setItem("dev_tenant_id", "group");
|
||||
});
|
||||
|
||||
await page.route("**/api/v1/admin/orgchart/snapshot**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
tenants: [
|
||||
{
|
||||
...tenant("group", "한맥가족", "hanmac-family"),
|
||||
type: "COMPANY_GROUP",
|
||||
},
|
||||
tenant("company", "삼안", "saman", "group"),
|
||||
{
|
||||
...tenant("open-team", "공개 팀", "open-team", "company"),
|
||||
config: { visibility: "public" },
|
||||
},
|
||||
{
|
||||
...tenant("internal-team", "내부 팀", "internal-team", "company"),
|
||||
config: { visibility: "internal" },
|
||||
},
|
||||
],
|
||||
users: [
|
||||
user("u-open", "Open User", "open-team"),
|
||||
user("u-internal", "Internal User", "internal-team"),
|
||||
],
|
||||
cache: { source: "redis", hit: true },
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
await page.goto("/chart");
|
||||
await expect(page.getByRole("heading", { name: "조직 현황" })).toBeVisible();
|
||||
|
||||
const svg = page.locator('[data-testid="orgchart-vector-svg"]');
|
||||
const totalUsersControl = page.getByTestId("orgchart-total-users-control");
|
||||
await expect(totalUsersControl).toHaveText("총 1명");
|
||||
await expect(svg.getByText("공개 팀", { exact: true })).toBeVisible();
|
||||
await expect(svg.getByText(/Open User/)).toBeVisible();
|
||||
await expect(svg.getByText("내부 팀", { exact: true })).toHaveCount(0);
|
||||
await expect(svg.getByText("Internal User", { exact: true })).toHaveCount(0);
|
||||
|
||||
await totalUsersControl.hover();
|
||||
await page.getByRole("switch", { name: "내부조직 보기" }).setChecked(true);
|
||||
|
||||
await expect(totalUsersControl).toHaveText("총 2명");
|
||||
await expect(svg.getByText("내부 팀", { exact: true })).toBeVisible();
|
||||
await expect(svg.getByText(/Internal User/)).toBeVisible();
|
||||
});
|
||||
|
||||
test("org chart defaults to hanmac family when public sector group is listed first", async ({
|
||||
page,
|
||||
}) => {
|
||||
await page.addInitScript(() => {
|
||||
window.localStorage.setItem("playwright_auth_bypass", "1");
|
||||
window.localStorage.setItem("dev_tenant_id", "family");
|
||||
});
|
||||
|
||||
await page.route("**/api/v1/admin/orgchart/snapshot**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
tenants: [
|
||||
{
|
||||
...tenant("public-sector", "공공기관", "public-sector"),
|
||||
type: "COMPANY_GROUP",
|
||||
memberCount: 0,
|
||||
},
|
||||
{
|
||||
...tenant("family", "한맥가족", "hanmac-family"),
|
||||
type: "COMPANY_GROUP",
|
||||
},
|
||||
{
|
||||
...tenant("saman", "삼안", "saman", "family"),
|
||||
type: "COMPANY",
|
||||
},
|
||||
],
|
||||
users: [user("u-saman", "Saman User", "saman")],
|
||||
cache: { source: "redis", hit: true },
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
await page.goto("/chart");
|
||||
|
||||
const svg = page.locator('[data-testid="orgchart-vector-svg"]');
|
||||
await expect(page.getByRole("button", { name: "조직: 한맥가족" })).toBeVisible();
|
||||
await expect(svg.getByText("한맥가족", { exact: true })).toBeVisible();
|
||||
await expect(svg.getByText("삼안", { exact: true })).toBeVisible();
|
||||
await expect(svg.getByText("공공기관", { exact: true })).toHaveCount(0);
|
||||
});
|
||||
|
||||
test("org chart renders dense member nodes with calculated member columns", async ({
|
||||
page,
|
||||
}) => {
|
||||
|
||||
@@ -269,6 +269,58 @@ test("org chart displays user names with short grade aliases and no job details"
|
||||
await expect(svg.getByText(/팀장|Platform Engineer/)).toHaveCount(0);
|
||||
});
|
||||
|
||||
test("org chart orders top executive members by rank priority", async ({
|
||||
page,
|
||||
}) => {
|
||||
const executiveUser = (id: string, name: string, grade: string) => ({
|
||||
...user(id, name, "engineering"),
|
||||
grade,
|
||||
});
|
||||
|
||||
await page.route("**/api/v1/public/orgchart**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
sharedWith: "Playwright",
|
||||
tenants: [
|
||||
tenant("group", "HMAC Group", "hmac"),
|
||||
tenant("engineering", "Engineering", "engineering", "group"),
|
||||
],
|
||||
users: [
|
||||
executiveUser("u-vice-president", "Vice President", "부사장"),
|
||||
executiveUser("u-adviser", "Adviser", "고문"),
|
||||
executiveUser("u-vice-chair", "Vice Chair", "부회장"),
|
||||
executiveUser("u-president", "President", "사장"),
|
||||
executiveUser("u-chair", "Chair", "회장"),
|
||||
executiveUser("u-director", "Director", "전무"),
|
||||
],
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
await page.goto("/chart?token=rank-priority");
|
||||
|
||||
const engineeringNode = page.locator(
|
||||
'[data-testid="orgchart-node-engineering"]',
|
||||
);
|
||||
await expect(engineeringNode).toBeVisible();
|
||||
|
||||
const orderedMemberIds = await engineeringNode
|
||||
.locator('[data-testid^="orgchart-member-"]')
|
||||
.evaluateAll((elements) =>
|
||||
elements.map((element) => element.getAttribute("data-testid")),
|
||||
);
|
||||
|
||||
expect(orderedMemberIds).toEqual([
|
||||
"orgchart-member-u-chair",
|
||||
"orgchart-member-u-president",
|
||||
"orgchart-member-u-vice-chair",
|
||||
"orgchart-member-u-adviser",
|
||||
"orgchart-member-u-vice-president",
|
||||
"orgchart-member-u-director",
|
||||
]);
|
||||
});
|
||||
|
||||
test("org chart only highlights flagged member cards", async ({ page }) => {
|
||||
await page.route("**/api/v1/public/orgchart**", async (route) => {
|
||||
await route.fulfill({
|
||||
@@ -422,23 +474,12 @@ test("org chart places multi-tenant users only on leaf memberships without dupli
|
||||
];
|
||||
const [groupTenant, baronTenant, engineeringTenant, platformTenant] = tenants;
|
||||
|
||||
await page.route("**/api/v1/admin/tenants**", async (route) => {
|
||||
await page.route("**/api/v1/admin/orgchart/snapshot**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
items: tenants,
|
||||
total: tenants.length,
|
||||
limit: 10000,
|
||||
offset: 0,
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
await page.route("**/api/v1/admin/users**", async (route) => {
|
||||
await route.fulfill({
|
||||
contentType: "application/json",
|
||||
body: JSON.stringify({
|
||||
items: [
|
||||
tenants,
|
||||
users: [
|
||||
multiTenantUser("u-shared", "Shared User", "baron", [
|
||||
groupTenant,
|
||||
baronTenant,
|
||||
@@ -446,9 +487,7 @@ test("org chart places multi-tenant users only on leaf memberships without dupli
|
||||
platformTenant,
|
||||
]),
|
||||
],
|
||||
total: 1,
|
||||
limit: 5000,
|
||||
offset: 0,
|
||||
cache: { source: "redis", hit: true },
|
||||
}),
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user