From 9e7b7ae7bba545d4e989fb45ca90f5b89c442741 Mon Sep 17 00:00:00 2001 From: sundasnoreen12 <72802712+sundasnoreen12@users.noreply.github.com> Date: Wed, 13 Aug 2025 00:00:32 +0500 Subject: [PATCH] feat: added tooltips for like and follow button (#799) * feat: added tooltips for like and follow button * test: added test cases for like and follow buttons --- src/discussions/common/HoverCard.jsx | 63 ++++++++++++++--------- src/discussions/common/HoverCard.test.jsx | 25 ++++++++- 2 files changed, 64 insertions(+), 24 deletions(-) diff --git a/src/discussions/common/HoverCard.jsx b/src/discussions/common/HoverCard.jsx index a4777767..bfb37b53 100644 --- a/src/discussions/common/HoverCard.jsx +++ b/src/discussions/common/HoverCard.jsx @@ -14,6 +14,7 @@ import { useIntl } from '@edx/frontend-platform/i18n'; import { ThreadType } from '../../data/constants'; import { useHasLikePermission, useUserPostingEnabled } from '../data/hooks'; import PostCommentsContext from '../post-comments/postCommentsContext'; +import messages from '../posts/post/messages'; import ActionsDropdown from './ActionsDropdown'; import DiscussionContext from './context'; @@ -82,32 +83,48 @@ const HoverCard = ({ )}
- { - e.preventDefault(); - onLike(); - }} - /> + + {intl.formatMessage(voted ? messages.removeLike : messages.like)} + + )} + > + { + e.preventDefault(); + onLike(); + }} + /> +
{following !== undefined && (
- { - e.preventDefault(); - onFollow(); - }} - /> + + {intl.formatMessage(following ? messages.unFollow : messages.follow)} + + )} + > + { + e.preventDefault(); + onFollow(); + }} + /> +
)}
diff --git a/src/discussions/common/HoverCard.test.jsx b/src/discussions/common/HoverCard.test.jsx index 64c5f1f6..6795ec27 100644 --- a/src/discussions/common/HoverCard.test.jsx +++ b/src/discussions/common/HoverCard.test.jsx @@ -1,5 +1,5 @@ import { - render, screen, waitFor, within, + fireEvent, render, screen, waitFor, within, } from '@testing-library/react'; import MockAdapter from 'axios-mock-adapter'; import { IntlProvider } from 'react-intl'; @@ -138,4 +138,27 @@ describe('HoverCard', () => { expect(within(hoverCard).queryByRole('button', { name: /like/i })).toBeInTheDocument(); expect(within(hoverCard).queryByRole('button', { name: /actions menu/i })).toBeInTheDocument(); }); + + test('it should call onFollow when follow button is clicked', async () => { + await waitFor(() => renderComponent(discussionPostId)); + const post = screen.getByTestId('post-thread-1'); + const hoverCard = within(post).getByTestId('hover-card-thread-1'); + + const followBtn = within(hoverCard).getByRole('button', { name: /follow/i }); + fireEvent.click(followBtn); + + expect(followBtn).toBeEnabled(); + }); + + test('it should call onLike when Like button is clicked', async () => { + await waitFor(() => renderComponent(discussionPostId)); + + const post = screen.getByTestId('post-thread-1'); + const hoverCard = within(post).getByTestId('hover-card-thread-1'); + + const likeBtn = within(hoverCard).getByRole('button', { name: /like/i }); + fireEvent.click(likeBtn); + + expect(likeBtn).toBeEnabled(); + }); });