mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
65 lines
2.5 KiB
TypeScript
65 lines
2.5 KiB
TypeScript
|
/**
|
||
|
* Test for pasting into a linked GridView.
|
||
|
*
|
||
|
* In particular, when multiple rows are selected in GridView, on switching to a different linked
|
||
|
* record, the selection should be cleared, or else paste will misbehave.
|
||
|
*/
|
||
|
import {assert, Key, WebElement} from 'mocha-webdriver';
|
||
|
import * as gu from 'test/nbrowser/gristUtils';
|
||
|
import {setupTestSuite} from 'test/nbrowser/testUtils';
|
||
|
|
||
|
describe('CopyPasteLinked', function() {
|
||
|
this.timeout(30000);
|
||
|
const cleanup = setupTestSuite();
|
||
|
const clipboard = gu.getLockableClipboard();
|
||
|
|
||
|
it('should clear internal selection when link record changes', async function() {
|
||
|
const mainSession = await gu.session().login();
|
||
|
await mainSession.tempDoc(cleanup, 'Landlord.grist');
|
||
|
await gu.getPageItem(/Current Signers/).click();
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
let cell: WebElement;
|
||
|
|
||
|
// Select a cell.
|
||
|
cell = await gu.getCell({section: 'Tenants', col: 'Tenant', rowNum: 1});
|
||
|
await cell.click();
|
||
|
assert.equal(await cell.getText(), 'John Malik');
|
||
|
|
||
|
await clipboard.lockAndPerform(async (cb) => {
|
||
|
// Copy the cell's value to the clipboard.
|
||
|
await cb.copy();
|
||
|
|
||
|
// Now select multiple cells.
|
||
|
await gu.sendKeys(Key.chord(Key.SHIFT, Key.DOWN), Key.chord(Key.SHIFT, Key.DOWN));
|
||
|
|
||
|
// Check that 3 cells are indeed selected.
|
||
|
assert.deepEqual(await gu.getVisibleGridCells({col: 'Tenant', rowNums: [1, 2, 3, 4],
|
||
|
mapper: (el) => el.matches('.selected')}),
|
||
|
[true, true, true, false]);
|
||
|
|
||
|
// Switch to a different Apartments row that drives the filtering in the Tenants section.
|
||
|
await gu.getCell({section: 'Apartments', col: 0, rowNum: 2}).click();
|
||
|
cell = await gu.getCell({section: 'Tenants', col: 'Tenant', rowNum: 1});
|
||
|
await cell.click();
|
||
|
assert.equal(await cell.getText(), 'Fred Brown');
|
||
|
|
||
|
// Paste the copied value. It doesn't work reliably in a test, so try until it works. (The
|
||
|
// reasons seems to be that 'body' has focus briefly, rather than Clipboard component.)
|
||
|
await gu.waitAppFocus();
|
||
|
await cb.paste();
|
||
|
});
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Check that only one value was copied, and that there are not multiple cells selected.
|
||
|
assert.deepEqual(await gu.getVisibleGridCells({col: 'Tenant', rowNums: [1, 2, 3, 4]}),
|
||
|
['John Malik', 'Fred Brown', 'Susan Sharp', 'Owen Sharp']);
|
||
|
assert.deepEqual(await gu.getVisibleGridCells({col: 'Tenant', rowNums: [1, 2, 3, 4],
|
||
|
mapper: (el) => el.matches('.selected')}),
|
||
|
[false, false, false, false]);
|
||
|
|
||
|
await gu.checkForErrors();
|
||
|
await gu.undo();
|
||
|
});
|
||
|
});
|