mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
149 lines
6.1 KiB
JavaScript
149 lines
6.1 KiB
JavaScript
|
import { assert } from 'mocha-webdriver';
|
||
|
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
|
||
|
|
||
|
/**
|
||
|
* This test verifies that when a section is auto-filtered using section-linking, newly added
|
||
|
* records automatically get assigned the filter value.
|
||
|
*/
|
||
|
describe('FillLinkedRecords.ntest', function() {
|
||
|
const cleanup = test.setupTestSuite(this);
|
||
|
|
||
|
gu.bigScreen();
|
||
|
|
||
|
before(async function() {
|
||
|
await gu.supportOldTimeyTestCode();
|
||
|
await gu.useFixtureDoc(cleanup, "Favorite_Films.grist", true);
|
||
|
await gu.toggleSidePanel("left", "close");
|
||
|
});
|
||
|
|
||
|
afterEach(function() {
|
||
|
return gu.checkForErrors();
|
||
|
});
|
||
|
|
||
|
it('should auto-fill values when typing into add-row', async function() {
|
||
|
await gu.openSidePane('view');
|
||
|
await $('.test-config-data').click();
|
||
|
await gu.actions.selectTabView('All');
|
||
|
|
||
|
// Link the sections first since the sample document start with no links.
|
||
|
// Connect Friends -> Films
|
||
|
await gu.getSection('Films record').click();
|
||
|
await $('.test-right-select-by').click();
|
||
|
await $('.test-select-row:contains(Friends record)').click();
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Connect Films -> Performances grid
|
||
|
await gu.getSection('Performances record').click();
|
||
|
await $('.test-right-select-by').click();
|
||
|
await $('.test-select-row:contains(Films record)').click();
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Connect Films -> Performances detail
|
||
|
await gu.getSection('Performances detail').click();
|
||
|
await $('.test-right-select-by').click();
|
||
|
await $('.test-select-row:contains(Films record)').click();
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Now pick a movie, and select the Performances grid.
|
||
|
await gu.clickCell({section: 'Films record', col: 0, rowNum: 2});
|
||
|
await gu.actions.viewSection('Performances record').selectSection();
|
||
|
|
||
|
// It should have just two records initially, with an Add-New row.
|
||
|
assert.equal(await gu.getGridLastRowText(), '3');
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1], rowNums: [2, 3]}), [
|
||
|
'Robin Wright', 'Forrest Gump',
|
||
|
'', '']);
|
||
|
|
||
|
// Add a record, and ensure it shows up, and has Film auto-filled in.
|
||
|
await gu.userActionsCollect(true);
|
||
|
await gu.addRecord(['Rebecca Williams']);
|
||
|
await gu.userActionsVerify([
|
||
|
["AddRecord", "Performances", null, {"Actor": "Rebecca Williams", "Film": 2}]
|
||
|
]);
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1], rowNums: [2, 3]}), [
|
||
|
'Robin Wright', 'Forrest Gump',
|
||
|
'Rebecca Williams', 'Forrest Gump']);
|
||
|
assert.equal(await gu.getGridLastRowText(), '4');
|
||
|
});
|
||
|
|
||
|
it('should auto-fill values when inserting records', async function() {
|
||
|
// Click another movie, and check the values we see.
|
||
|
await gu.clickCell({section: 'Films record', col: 0, rowNum: 5});
|
||
|
await gu.actions.viewSection('Performances record').selectSection();
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1], rowNums: [1, 2]}), [
|
||
|
'Christian Bale', 'The Dark Knight',
|
||
|
'Heath Ledger', 'The Dark Knight'
|
||
|
]);
|
||
|
assert.equal(await gu.getGridLastRowText(), '3');
|
||
|
|
||
|
// Add a couple of records in Performances grid using keyboard shortcuts.
|
||
|
await gu.clickCell({col: 0, rowNum: 3});
|
||
|
await gu.sendKeys([$.MOD, $.SHIFT, $.ENTER]);
|
||
|
await gu.clickCell({col: 0, rowNum: 1});
|
||
|
await gu.sendKeys([$.MOD, $.ENTER]);
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Verify they are shown where expected with Film filled in.
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1], rowNums: [1, 2, 3, 4]}), [
|
||
|
'Christian Bale', 'The Dark Knight',
|
||
|
'', 'The Dark Knight',
|
||
|
'Heath Ledger', 'The Dark Knight',
|
||
|
'', 'The Dark Knight',
|
||
|
]);
|
||
|
assert.equal(await gu.getGridLastRowText(), '5');
|
||
|
|
||
|
// Add a record in Performances detail using keyboard shortcuts.
|
||
|
await gu.actions.viewSection('Performances detail').selectSection();
|
||
|
assert.deepEqual(await gu.getDetailValues({cols: ['Actor', 'Film'], rowNums: [1]}),
|
||
|
['Christian Bale', 'The Dark Knight']);
|
||
|
await gu.sendKeys([$.MOD, $.ENTER]);
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Verify the record is shown with Film filled in, and added to the grid section too.
|
||
|
// Note: rowNum needs to be 1 now for card views without row numbers shown.
|
||
|
assert.deepEqual(await gu.getDetailValues({cols: ['Actor', 'Film'], rowNums: [1]}),
|
||
|
['', 'The Dark Knight']);
|
||
|
|
||
|
await gu.actions.viewSection('Performances record').selectSection();
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1], rowNums: [1, 2, 3, 4, 5]}), [
|
||
|
'Christian Bale', 'The Dark Knight',
|
||
|
'', 'The Dark Knight',
|
||
|
'', 'The Dark Knight',
|
||
|
'Heath Ledger', 'The Dark Knight',
|
||
|
'', 'The Dark Knight',
|
||
|
]);
|
||
|
assert.equal(await gu.getGridLastRowText(), '6');
|
||
|
|
||
|
// Undo the record insertions.
|
||
|
await gu.undo(3);
|
||
|
});
|
||
|
|
||
|
it('should auto-fill when pasting data', async function() {
|
||
|
// Click a movie, and check the values we expect to start with.
|
||
|
await gu.clickCell({section: 'Films record', col: 0, rowNum: 6});
|
||
|
await gu.actions.viewSection('Performances record').selectSection();
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1, 2], rowNums: [1, 4]}), [
|
||
|
'Chris Evans', 'The Avengers', 'Steve Rogers',
|
||
|
'Scarlett Johansson', 'The Avengers', 'Natasha Romanoff',
|
||
|
]);
|
||
|
assert.equal(await gu.getGridLastRowText(), '5');
|
||
|
|
||
|
// Copy a range of three values, and paste them into the Add-New row.
|
||
|
await gu.clickCell({col: 2, rowNum: 1});
|
||
|
await gu.sendKeys([$.SHIFT, $.DOWN, $.DOWN], $.COPY);
|
||
|
await gu.clickCell({col: 2, rowNum: 5});
|
||
|
await gu.sendKeys($.PASTE);
|
||
|
await gu.waitForServer();
|
||
|
|
||
|
// Verify that three new rows now show up, with Film auto-filled.
|
||
|
assert.deepEqual(await gu.getGridValues({cols: [0, 1, 2], rowNums: [1, 4, 5, 6, 7]}), [
|
||
|
'Chris Evans', 'The Avengers', 'Steve Rogers',
|
||
|
'Scarlett Johansson', 'The Avengers', 'Natasha Romanoff',
|
||
|
'', 'The Avengers', 'Steve Rogers',
|
||
|
'', 'The Avengers', 'Tony Stark',
|
||
|
'', 'The Avengers', 'Bruce Banner',
|
||
|
]);
|
||
|
assert.equal(await gu.getGridLastRowText(), '8');
|
||
|
});
|
||
|
});
|