From 1bee2cfba310687c6816000ea38cddc6cb0ede3f Mon Sep 17 00:00:00 2001 From: Alf Eaton Date: Fri, 28 Oct 2022 14:33:51 +0100 Subject: [PATCH] Merge pull request #10195 from overleaf/ae-editor-left-menu-actions-test Add test for clone project modal action GitOrigin-RevId: 7dfa3f4c394efe3c138112f0cfff1f4858b06960 --- .../components/actions-copy-project.test.js | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/services/web/test/frontend/features/editor-left-menu/components/actions-copy-project.test.js b/services/web/test/frontend/features/editor-left-menu/components/actions-copy-project.test.js index 8154b4d0a4..ba95878ec4 100644 --- a/services/web/test/frontend/features/editor-left-menu/components/actions-copy-project.test.js +++ b/services/web/test/frontend/features/editor-left-menu/components/actions-copy-project.test.js @@ -1,10 +1,21 @@ import { fireEvent, screen } from '@testing-library/dom' import fetchMock from 'fetch-mock' +import sinon from 'sinon' +import { expect } from 'chai' import ActionsCopyProject from '../../../../../frontend/js/features/editor-left-menu/components/actions-copy-project' import { renderWithEditorContext } from '../../../helpers/render-with-context' +import * as locationModule from '../../../../../frontend/js/shared/components/location' +import { waitFor } from '@testing-library/react' describe('', function () { + let assignStub + + beforeEach(function () { + assignStub = sinon.stub(locationModule, 'assign') + }) + afterEach(function () { + assignStub.restore() fetchMock.reset() }) @@ -15,4 +26,31 @@ describe('', function () { screen.getByPlaceholderText('New Project Name') }) + + it('loads the project page when submitted', async function () { + fetchMock.post('express:/project/:id/clone', { + status: 200, + body: { + project_id: 'new-project', + }, + }) + + renderWithEditorContext() + + fireEvent.click(screen.getByRole('button', { name: 'Copy Project' })) + + const input = screen.getByPlaceholderText('New Project Name') + fireEvent.change(input, { target: { value: 'New Project' } }) + + const button = screen.getByRole('button', { name: 'Copy' }) + button.click() + + await waitFor(() => { + expect(button.textContent).to.equal('Copying…') + }) + + await waitFor(() => { + expect(assignStub).to.have.been.calledOnceWith('/project/new-project') + }) + }) })