diff --git a/src/discussions/post-comments/PostCommentsView.test.jsx b/src/discussions/post-comments/PostCommentsView.test.jsx index 189bf770..374db7da 100644 --- a/src/discussions/post-comments/PostCommentsView.test.jsx +++ b/src/discussions/post-comments/PostCommentsView.test.jsx @@ -1,3 +1,5 @@ +import React, { useRef } from 'react'; + import { act, fireEvent, render, screen, waitFor, within, } from '@testing-library/react'; @@ -24,7 +26,10 @@ import DiscussionContent from '../discussions-home/DiscussionContent'; import { getThreadsApiUrl } from '../posts/data/api'; import { fetchThread, fetchThreads } from '../posts/data/thunks'; import MockReCAPTCHA, { - mockOnChange, mockOnError, mockOnExpired, + mockOnChange, + mockOnError, + mockOnExpired, + mockReset, } from '../posts/post-editor/mocksData/react-google-recaptcha'; import fetchCourseTopics from '../topics/data/thunks'; import { getDiscussionTourUrl } from '../tours/data/api'; @@ -1043,3 +1048,47 @@ describe('ThreadView', () => { }); }); }); + +describe('MockReCAPTCHA', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('triggers all callbacks and exposes reset via ref', () => { + const onChange = jest.fn(); + const onExpired = jest.fn(); + const onError = jest.fn(); + + const Wrapper = () => { + const recaptchaRef = useRef(null); + return ( +
+ + +
+ ); + }; + + const { getByText, getByTestId } = render(); + + fireEvent.click(getByText('Solve CAPTCHA')); + fireEvent.click(getByText('Expire CAPTCHA')); + fireEvent.click(getByText('Error CAPTCHA')); + + fireEvent.click(getByTestId('reset-btn')); + + expect(mockOnChange).toHaveBeenCalled(); + expect(mockOnExpired).toHaveBeenCalled(); + expect(mockOnError).toHaveBeenCalled(); + + expect(onChange).toHaveBeenCalledWith('mock-token'); + expect(onExpired).toHaveBeenCalled(); + expect(onError).toHaveBeenCalled(); + expect(mockReset).toHaveBeenCalled(); + }); +});