diff --git a/blocks/browse/da-browse/da-browse.js b/blocks/browse/da-browse/da-browse.js index ce494c3..c5aa5a2 100644 --- a/blocks/browse/da-browse/da-browse.js +++ b/blocks/browse/da-browse/da-browse.js @@ -198,7 +198,9 @@ export default class DaBrowse extends LitElement { const opts = { method: 'POST', body: formData }; await daFetch(`${DA_ORIGIN}/copy${item.path}`, opts); item.isChecked = false; - this._listItems.unshift(item); + + const pastedItem = { ...item, path: item.destination, isChecked: false }; + this._listItems.unshift(pastedItem); this.requestUpdate(); } this._canPaste = false; diff --git a/test/e2e/tests/copy_rename.spec.js b/test/e2e/tests/copy_rename.spec.js index 6338664..56fbd18 100644 --- a/test/e2e/tests/copy_rename.spec.js +++ b/test/e2e/tests/copy_rename.spec.js @@ -65,6 +65,9 @@ test('Copy and Rename with Versioned document', async ({ page }, workerInfo) => await page.getByRole('button', { name: 'Paste' }).click(); await page.waitForTimeout(3000); + const link = await page.getByRole('link', { name: orgPageName }); + const href = await link.getAttribute('href'); + await expect(href).toEqual(`/edit#/da-sites/da-status/tests/${copyFolderName}/${orgPageName}`); // go back to the original to rename it // Go to the directory view diff --git a/test/unit/blocks/browse/da_browse/da_browse.test.js b/test/unit/blocks/browse/da_browse/da_browse.test.js new file mode 100644 index 0000000..a40c155 --- /dev/null +++ b/test/unit/blocks/browse/da_browse/da_browse.test.js @@ -0,0 +1,53 @@ +/* + eslint-disable no-underscore-dangle +*/ +import { expect } from '@esm-bundle/chai'; + +// This is needed to make a dynamic import work that is indirectly referenced +// from da-browse.js +const { setNx } = await import('../../../../../scripts/utils.js'); +setNx('/bheuaark/', { hostname: 'localhost' }); + +const { default: DaBrowse } = await import('../../../../../blocks/browse/da-browse/da-browse.js'); + +describe('Browse', () => { + it('Pasted item uses the target URL', async () => { + const daBrowse = new DaBrowse(); + + const fetchedArgs = []; + const mockFetch = async (url, opts) => { + fetchedArgs.push({ url, opts }); + return { ok: true }; + }; + + const item = { + path: '/myorg/mysite/myroot/srcdir/d1.html', + ext: 'html', + isChecked: true, + name: 'd1', + }; + daBrowse._listItems = []; + daBrowse._selectedItems = [item]; + daBrowse.details = { fullpath: '/myorg/mysite/myroot/destdir' }; + + const orgFetch = window.fetch; + try { + window.fetch = mockFetch; + await daBrowse.handlePaste(); + + expect(daBrowse._listItems.length).to.equal(1); + expect(daBrowse._listItems[0].path).to.equal('/myorg/mysite/myroot/destdir/d1.html'); + expect(daBrowse._listItems[0].ext).to.equal('html'); + expect(daBrowse._listItems[0].isChecked).to.be.false; + expect(daBrowse._listItems[0].name).to.equal('d1'); + expect(daBrowse._canPaste).to.be.false; + + expect(fetchedArgs.length).to.equal(1); + expect(fetchedArgs[0].url).to.equal('https://admin.da.live/copy/myorg/mysite/myroot/srcdir/d1.html'); + expect(fetchedArgs[0].opts.body.get('destination')).to.equal('/myorg/mysite/myroot/destdir/d1.html'); + expect(fetchedArgs[0].opts.method).to.equal('POST'); + } finally { + window.fetch = orgFetch; + } + }); +});