gristlabs_grist-core/test/nbrowser/FillLinkedRecords.ntest.js
George Gevoian 0cadb93d25 (core) Update dependencies
Summary:
Changes the minimum version of Node to 18, and updates the Docker images and GitHub workflows to build Grist with Node 18.

Also updates various dependencies and scripts to support building running tests with arm64 builds of Node.

Test Plan: Existing tests.

Reviewers: paulfitz

Reviewed By: paulfitz

Differential Revision: https://phab.getgrist.com/D3968
2023-10-11 17:36:58 -04:00

153 lines
6.2 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);
const clipboard = gu.getLockableClipboard();
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]);
await clipboard.lockAndPerform(async (cb) => {
await cb.copy();
await gu.clickCell({col: 2, rowNum: 5});
await cb.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');
});
});