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 && (
+
+ )}