From 18b5aa474554cb5431f2428dc82801b46796b7b2 Mon Sep 17 00:00:00 2001 From: Amruth Pillai Date: Sat, 5 Sep 2026 07:32:07 -0700 Subject: [PATCH] fix(sharing): hide signup link when registration is disabled (#3409) --- .../resume/public/public-resume.test.tsx | 21 ++++++++++++++++++- .../features/resume/public/public-resume.tsx | 21 +++++++++++-------- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/apps/web/src/features/resume/public/public-resume.test.tsx b/apps/web/src/features/resume/public/public-resume.test.tsx index b7f46f73b..9b34a7091 100644 --- a/apps/web/src/features/resume/public/public-resume.test.tsx +++ b/apps/web/src/features/resume/public/public-resume.test.tsx @@ -15,6 +15,7 @@ type PdfViewerProps = { }; const publicResumeMock = vi.hoisted(() => ({ + flags: { disableSignups: false }, onDownloadPDF: vi.fn(), PdfViewer: vi.fn<(_props: PdfViewerProps) => ReactNode>(() => null), useResumeExport: vi.fn(), @@ -29,7 +30,10 @@ const publicResumeMock = vi.hoisted(() => ({ vi.mock("@tanstack/react-query", () => ({ useQuery: () => ({ data: publicResumeMock.resume }) })); vi.mock("@tanstack/react-router", () => ({ - getRouteApi: () => ({ useParams: () => ({ username: "amruth", slug: "sample" }) }), + getRouteApi: () => ({ + useParams: () => ({ username: "amruth", slug: "sample" }), + useRouteContext: () => ({ flags: publicResumeMock.flags }), + }), })); vi.mock("./pdf-viewer", () => ({ PdfViewer: publicResumeMock.PdfViewer })); vi.mock("@/libs/orpc/client", () => ({ @@ -44,6 +48,7 @@ const { PublicResumeRoute } = await import("./public-resume"); beforeAll(() => i18n.loadAndActivate({ locale: "en", messages: {} })); beforeEach(() => { + publicResumeMock.flags.disableSignups = false; publicResumeMock.resume = { data: sampleResumeData, name: "Sample Resume", slug: "sample" }; publicResumeMock.PdfViewer.mockClear(); publicResumeMock.useResumeExport.mockReset(); @@ -64,6 +69,20 @@ const renderPublicResumeRoute = () => ); describe("PublicResumeRoute", () => { + it("shows the create-resume link when registration is enabled", () => { + renderPublicResumeRoute(); + + expect(screen.getByRole("link", { name: /Build your own resume/ })).toHaveAttribute("href", "/"); + }); + + it("hides the create-resume link when registration is disabled", () => { + publicResumeMock.flags.disableSignups = true; + renderPublicResumeRoute(); + + expect(screen.queryByRole("link", { name: /Build your own resume/ })).not.toBeInTheDocument(); + expect(screen.getByTestId("pdf-viewer")).toBeInTheDocument(); + }); + it("passes exposed source data directly to the browser viewer and export fallback", () => { renderPublicResumeRoute(); diff --git a/apps/web/src/features/resume/public/public-resume.tsx b/apps/web/src/features/resume/public/public-resume.tsx index a5a43d949..78ca5928b 100644 --- a/apps/web/src/features/resume/public/public-resume.tsx +++ b/apps/web/src/features/resume/public/public-resume.tsx @@ -15,6 +15,7 @@ const publicResumeRoute = getRouteApi("/$username/$slug"); export function PublicResumeRoute() { const { username, slug } = publicResumeRoute.useParams(); + const { flags } = publicResumeRoute.useRouteContext(); const { data: resume } = useQuery(orpc.resume.getBySlug.queryOptions({ input: { username, slug } })); const publicResume = useMemo(() => ({ username, slug }), [slug, username]); @@ -51,15 +52,17 @@ export function PublicResumeRoute() { - + {!flags.disableSignups && ( + + )}