diff --git a/src/discussions/comments/CommentsView.test.jsx b/src/discussions/comments/CommentsView.test.jsx index 52c01a81..eae9ee70 100644 --- a/src/discussions/comments/CommentsView.test.jsx +++ b/src/discussions/comments/CommentsView.test.jsx @@ -381,6 +381,7 @@ describe('CommentsView', () => { }); expect(testLocation.pathname).toBe(`/${courseId}/posts/${discussionPostId}/edit`); }); + it('should allow pinning the post', async () => { renderComponent(discussionPostId); await act(async () => { @@ -394,6 +395,7 @@ describe('CommentsView', () => { }); assertLastUpdateData({ pinned: false }); }); + it('should allow reporting the post', async () => { renderComponent(discussionPostId); await act(async () => { @@ -405,6 +407,11 @@ describe('CommentsView', () => { await act(async () => { fireEvent.click(screen.getByRole('button', { name: /report/i })); }); + expect(screen.queryByRole('dialog', { name: /Report \w+/i, exact: false })).toBeInTheDocument(); + await act(async () => { + fireEvent.click(screen.queryByRole('button', { name: /Confirm/i })); + }); + expect(screen.queryByRole('dialog', { name: /Report \w+/i, exact: false })).not.toBeInTheDocument(); assertLastUpdateData({ abuse_flagged: true }); }); @@ -423,12 +430,8 @@ describe('CommentsView', () => { expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject({ voted: true }); }); - it.each([ - ['endorsing comments', 'Endorse', { endorsed: true }], - ['reporting comments', 'Report', { abuse_flagged: true }], - ])('handles %s', async (label, buttonLabel, patchData) => { + it('handles endorsing comments', async () => { renderComponent(discussionPostId); - // Wait for the content to load await screen.findByText('comment number 7', { exact: false }); @@ -438,11 +441,36 @@ describe('CommentsView', () => { await act(async () => { fireEvent.click(actionButtons[1]); }); + await act(async () => { - fireEvent.click(screen.getByRole('button', { name: buttonLabel })); + fireEvent.click(screen.getByRole('button', { name: /Endorse/i })); }); expect(axiosMock.history.patch).toHaveLength(2); - expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject(patchData); + expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject({ endorsed: true }); + }); + + it('handles reporting comments', async () => { + renderComponent(discussionPostId); + // Wait for the content to load + await screen.findByText('comment number 7', { exact: false }); + + // There should be three buttons, one for the post, the second for the + // comment and the third for a response to that comment + const actionButtons = screen.queryAllByRole('button', { name: /actions menu/i }); + await act(async () => { + fireEvent.click(actionButtons[1]); + }); + + await act(async () => { + fireEvent.click(screen.getByRole('button', { name: /Report/i })); + }); + expect(screen.queryByRole('dialog', { name: /Report \w+/i, exact: false })).toBeInTheDocument(); + await act(async () => { + fireEvent.click(screen.queryByRole('button', { name: /Confirm/i })); + }); + expect(screen.queryByRole('dialog', { name: /Report \w+/i, exact: false })).not.toBeInTheDocument(); + expect(axiosMock.history.patch).toHaveLength(2); + expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject({ abuse_flagged: true }); }); }); @@ -624,12 +652,8 @@ describe('CommentsView', () => { expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject({ voted: true }); }); - it.each([ - ['endorsing comments', 'Endorse', { endorsed: true }], - ['reporting comments', 'Report', { abuse_flagged: true }], - ])('handles %s', async (label, buttonLabel, patchData) => { + it('handles endorsing comments', async () => { renderComponent(discussionPostId); - // Wait for the content to load await screen.findByText('comment number 7', { exact: false }); @@ -639,11 +663,36 @@ describe('CommentsView', () => { await act(async () => { fireEvent.click(actionButtons[1]); }); + await act(async () => { - fireEvent.click(screen.getByRole('button', { name: buttonLabel })); + fireEvent.click(screen.getByRole('button', { name: /Endorse/i })); }); expect(axiosMock.history.patch).toHaveLength(2); - expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject(patchData); + expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject({ endorsed: true }); + }); + + it('handles reporting comments', async () => { + renderComponent(discussionPostId); + // Wait for the content to load + await screen.findByText('comment number 7', { exact: false }); + + // There should be three buttons, one for the post, the second for the + // comment and the third for a response to that comment + const actionButtons = screen.queryAllByRole('button', { name: /actions menu/i }); + await act(async () => { + fireEvent.click(actionButtons[1]); + }); + + await act(async () => { + fireEvent.click(screen.getByRole('button', { name: /Report/i })); + }); + expect(screen.queryByRole('dialog', { name: /Report \w+/i, exact: false })).toBeInTheDocument(); + await act(async () => { + fireEvent.click(screen.queryByRole('button', { name: /Confirm/i })); + }); + expect(screen.queryByRole('dialog', { name: /Report \w+/i, exact: false })).not.toBeInTheDocument(); + expect(axiosMock.history.patch).toHaveLength(2); + expect(JSON.parse(axiosMock.history.patch[1].data)).toMatchObject({ abuse_flagged: true }); }); }); diff --git a/src/discussions/comments/messages.js b/src/discussions/comments/messages.js index dd9427f6..8e66efa8 100644 --- a/src/discussions/comments/messages.js +++ b/src/discussions/comments/messages.js @@ -154,7 +154,7 @@ const messages = defineMessages({ description: 'Title of confirmation dialog shown when reporting a response', }, reportResponseDescription: { - id: 'discussions.editor.delete.response.description', + id: 'discussions.editor.response.description', defaultMessage: 'The discussion moderation team will review this content and take appropriate action.', description: 'Text displayed in confirmation dialog when deleting a response', },