From 50df22928b2ce0eb464c0749167341276f5955b8 Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Mon, 18 Nov 2024 13:40:24 -0500 Subject: [PATCH] fix: correct domain for link column in org member table (#17726) --- apps/web/test/lib/generateCsv.test.ts | 40 +++++++++---------- .../components/UserTable/UserListTable.tsx | 7 +++- packages/lib/csvUtils.ts | 5 ++- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/apps/web/test/lib/generateCsv.test.ts b/apps/web/test/lib/generateCsv.test.ts index f19aacd04b..1d5b8b327f 100644 --- a/apps/web/test/lib/generateCsv.test.ts +++ b/apps/web/test/lib/generateCsv.test.ts @@ -1,5 +1,5 @@ import type { Table } from "@tanstack/react-table"; -import { describe, it, expect, vi, beforeAll, afterAll } from "vitest"; +import { describe, it, expect, vi } from "vitest"; import type { UserTableUser } from "@calcom/features/users/components/UserTable/types"; import { generateCsvRawForMembersTable, generateHeaderFromReactTable } from "@calcom/lib/csvUtils"; @@ -52,19 +52,8 @@ function createMockTable(data: UserTableUser[]): Table { } as unknown as Table; } -describe("generate Csv for Org Users Table", () => { - beforeAll(() => { - vi.stubGlobal("window", { - location: { - origin: "https://acme.cal.com", - }, - }); - }); - - afterAll(() => { - vi.unstubAllGlobals(); - }); - +describe("generate Csv for Org Users Table @test", () => { + const orgDomain = "https://acme.cal.com"; const mockAttributeIds = ["attr1", "attr2"]; const mockUser: UserTableUser = { id: 1, @@ -81,7 +70,7 @@ describe("generate Csv for Org Users Table", () => { }; it("should throw if no headers", () => { - expect(() => generateCsvRawForMembersTable([], [], mockAttributeIds)).toThrow(); + expect(() => generateCsvRawForMembersTable([], [], mockAttributeIds, orgDomain)).toThrow(); }); it("should generate correct CSV headers", () => { @@ -89,7 +78,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], [], - mockAttributeIds + mockAttributeIds, + orgDomain ); const headers = csv?.split("\n")[0]; expect(headers).toBe("Members,Link,Role,Teams,Attribute 1,Attribute 2"); @@ -108,7 +98,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], mockData, - mockAttributeIds + mockAttributeIds, + orgDomain ); expect(csv).toMatchInlineSnapshot(` @@ -133,7 +124,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], mockData, - mockAttributeIds + mockAttributeIds, + orgDomain ); expect(csv).toMatchInlineSnapshot(` @@ -158,7 +150,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], mockData, - mockAttributeIds + mockAttributeIds, + orgDomain ); expect(csv).toMatchInlineSnapshot(` @@ -180,7 +173,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], mockData, - mockAttributeIds + mockAttributeIds, + orgDomain ); expect(csv).toMatchInlineSnapshot(` @@ -202,7 +196,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], mockData, - mockAttributeIds + mockAttributeIds, + orgDomain ); expect(csv).toMatchInlineSnapshot(` @@ -226,7 +221,8 @@ describe("generate Csv for Org Users Table", () => { const csv = generateCsvRawForMembersTable( generateHeaderFromReactTable(mockTable) ?? [], mockData, - mockAttributeIds + mockAttributeIds, + orgDomain ); expect(csv).toMatchInlineSnapshot(` diff --git a/packages/features/users/components/UserTable/UserListTable.tsx b/packages/features/users/components/UserTable/UserListTable.tsx index e166ee38ea..55504df7c4 100644 --- a/packages/features/users/components/UserTable/UserListTable.tsx +++ b/packages/features/users/components/UserTable/UserListTable.tsx @@ -456,7 +456,12 @@ export function UserListTable() { } const ATTRIBUTE_IDS = attributes?.map((attr) => attr.id) ?? []; - const csvRaw = generateCsvRawForMembersTable(headers, allMembers as UserTableUser[], ATTRIBUTE_IDS); + const csvRaw = generateCsvRawForMembersTable( + headers, + allMembers as UserTableUser[], + ATTRIBUTE_IDS, + domain + ); if (!csvRaw) { throw new Error("Generating CSV file failed."); } diff --git a/packages/lib/csvUtils.ts b/packages/lib/csvUtils.ts index 3ccce92b74..8e1c7487a7 100644 --- a/packages/lib/csvUtils.ts +++ b/packages/lib/csvUtils.ts @@ -96,7 +96,8 @@ export const generateHeaderFromReactTable = (table: Table): strin export const generateCsvRawForMembersTable = ( headers: string[], rows: UserTableUser[], - ATTRIBUTE_IDS: string[] + ATTRIBUTE_IDS: string[], + orgDomain: string ): string => { if (!headers.length) { throw new Error("The header is empty."); @@ -126,7 +127,7 @@ export const generateCsvRawForMembersTable = ( const requiredColumns = [ email, // Members column - `${window.location.origin}/${username}`, // Link column + `${orgDomain}/${username}`, // Link column role, // Role column sanitizeValue(teams.map((team) => team.name).join(",")), // Teams column ];