diff --git a/playwright-tests/tests/becomeAMentee.page.spec.ts b/playwright-tests/tests/becomeAMentee.page.spec.ts index 71d32bc..b033db4 100644 --- a/playwright-tests/tests/becomeAMentee.page.spec.ts +++ b/playwright-tests/tests/becomeAMentee.page.spec.ts @@ -4,7 +4,9 @@ import { HomePage } from '@pages/home.page'; import { MentorshipPage } from '@pages/mentorship.page'; test('Validate "Become a Mentee" section and Find a Mentor button', async ({ - page, mentorshipPage, homePage + page, + mentorshipPage, + homePage, }) => { // Navigate to Mentorship page await page.goto('/mentorship'); @@ -22,7 +24,7 @@ test('Validate "Become a Mentee" section and Find a Mentor button', async ({ ]; await expect(mentorshipPage.menteeListItems).toHaveText(items); - + await homePage.findMentorButton.click(); await expect(page).toHaveURL(/\/mentorship\/mentors/); }); diff --git a/src/components/LinkButton.tsx b/src/components/LinkButton.tsx index ed2ef47..759c1d2 100644 --- a/src/components/LinkButton.tsx +++ b/src/components/LinkButton.tsx @@ -8,6 +8,7 @@ type LinkButtonProps = { small?: boolean; children: React.ReactNode; 'data-testid'?: string; + disabled?: boolean; }; export const LinkButton = ({ @@ -16,6 +17,7 @@ export const LinkButton = ({ small, children, 'data-testid': dataTestId, + disabled = false, }: LinkButtonProps) => { const isExternal = href.startsWith('https'); @@ -59,6 +61,7 @@ export const LinkButton = ({ fontSize: small ? '0.8rem' : '1rem', padding: small ? '7px 16px' : '10px 32px', }} + disabled={disabled} > {children} diff --git a/src/components/MentorProfileCard.tsx b/src/components/MentorProfileCard.tsx index 1099d17..97052d5 100644 --- a/src/components/MentorProfileCard.tsx +++ b/src/components/MentorProfileCard.tsx @@ -10,6 +10,7 @@ import React, { useState } from 'react'; import { LinkButton } from '@components'; import { useIsMobile } from '@utils/theme-utils'; import { Mentor, Network } from '@utils/types'; +import { IS_REGISTRATION_OPEN } from 'utils/mentorshipConstants'; type MentorProfileCardProps = { mentor: Mentor; @@ -130,6 +131,7 @@ export const MentorProfileCard: React.FC = ({ href={`/mentorship/mentee-registration?id=${mentor.id}`} reversed small + disabled={!IS_REGISTRATION_OPEN} > Apply for this mentor{' '} diff --git a/src/components/__tests__/MentorsProfileCard.tsx b/src/components/__tests__/MentorsProfileCard.test.tsx similarity index 88% rename from src/components/__tests__/MentorsProfileCard.tsx rename to src/components/__tests__/MentorsProfileCard.test.tsx index 8f3af7b..76f2762 100644 --- a/src/components/__tests__/MentorsProfileCard.tsx +++ b/src/components/__tests__/MentorsProfileCard.test.tsx @@ -70,6 +70,16 @@ const mockMentor: Mentor = { }, }; +// Mutable flag so individual tests can override the registration state +let mockIsRegistrationOpen = false; + +jest.mock('../../utils/mentorshipConstants', () => ({ + ...jest.requireActual('../../utils/mentorshipConstants'), + get IS_REGISTRATION_OPEN() { + return mockIsRegistrationOpen; + }, +})); + describe('MentorProfileCard', () => { it('renders mentor basic info', () => { render(); @@ -121,4 +131,10 @@ describe('MentorProfileCard', () => { screen.getByRole('link', { name: /Apply for this mentor/i }), ).toBeInTheDocument(); }); + + it('disables the Apply for this mentor button when registration is closed', () => { + render(); + expect(screen.getByRole('link', { name: /Apply for this mentor/i })) + .toBeDisabled; + }); });