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') + }) + }) })