gristlabs_grist-core/test/nbrowser/ToggleColumns.ts
Dmitry S 5c67e12aa5 (core) When a checkbox is clicked on a new record, set default values determined by linking
Summary: Fixes a bug (reported in https://community.getgrist.com/t/bug-toggle-column-in-linking-widget-not-triggering-default-value/1657)

Test Plan: Added a test case that fails without this fix.

Reviewers: georgegevoian

Reviewed By: georgegevoian

Differential Revision: https://phab.getgrist.com/D3699
2022-11-10 14:34:40 -05:00

91 lines
3.4 KiB
TypeScript

import {assert, driver} from 'mocha-webdriver';
import * as gu from 'test/nbrowser/gristUtils';
import {Session} from 'test/nbrowser/gristUtils';
import {setupTestSuite} from 'test/nbrowser/testUtils';
describe('ToggleColumns', function() {
this.timeout(20000);
const cleanup = setupTestSuite({team: true});
let session: Session;
let docId: string;
before(async function() {
session = await gu.session().teamSite.login();
docId = await session.tempNewDoc(cleanup, 'ToggleColumns', {load: false});
// Set up a table Src, and table Items which links to Src and has a boolean column.
const api = session.createHomeApi();
await api.applyUserActions(docId, [
['AddTable', 'Src', [{id: 'A', type: 'Text'}]],
['BulkAddRecord', 'Src', [null, null, null], {A: ['a', 'b', 'c']}],
['AddTable', 'Items', [
{id: 'A', type: 'Ref:Src'},
{id: 'Chk', type: 'Bool'},
// An extra text column reflects the boolean for simpler checking of the values.
{id: 'Chk2', isFormula: true, formula: '$Chk'},
]],
['BulkAddRecord', 'Items', [null, null, null], {A: [1, 1, 3]}],
]);
await session.loadDoc(`/doc/${docId}`);
// Set up a page with linked widgets.
await gu.addNewPage('Table', 'Src');
await gu.addNewSection('Table', 'Items', {selectBy: /Src/i});
});
it('should fill in values determined by linking when checkbox is clicked', async function() {
// Test the behavior with a checkbox.
await verifyToggleBehavior();
});
it('should fill in values determined by linking when switch widget is clicked', async function() {
// Now switch the widget to the "Switch" widget, and test again.
await gu.toggleSidePanel('right', 'open');
await driver.find('.test-right-tab-field').click();
await gu.setFieldWidgetType("Switch");
await verifyToggleBehavior();
});
async function verifyToggleBehavior() {
// Selecting a cell in Src should show only linked values in Items.
await gu.getCell({section: 'Src', col: 'A', rowNum: 1}).click();
assert.deepEqual(await gu.getVisibleGridCells({section: 'Items', cols: ['A', 'Chk2'], rowNums: [1, 2, 3]}), [
'Src[1]', 'false',
'Src[1]', 'false',
'', '',
]);
// Click on the cell in the "Add Row" of Items. Because the checkbox is centered in the cell,
// the click should toggle it.
await gu.getCell({section: 'Items', col: 'Chk', rowNum: 3}).click();
await gu.waitForServer();
// Check that there is a new row, properly linked.
assert.deepEqual(await gu.getVisibleGridCells({section: 'Items', cols: ['A', 'Chk2'], rowNums: [1, 2, 3, 4]}), [
'Src[1]', 'false',
'Src[1]', 'false',
'Src[1]', 'true',
'', '',
]);
// Try another row of table Src. It should have its own Items (initially none).
await gu.getCell({section: 'Src', col: 'A', rowNum: 2}).click();
assert.deepEqual(await gu.getVisibleGridCells({section: 'Items', cols: ['A', 'Chk2'], rowNums: [1]}),
['', '']);
// Click checkbox in "Add Row" of Items again.
await gu.getCell({section: 'Items', col: 'Chk', rowNum: 1}).click();
await gu.waitForServer();
// Check that we see the new row, with the value determined by linking (column 'A') set correctly.
assert.deepEqual(await gu.getVisibleGridCells({section: 'Items', cols: ['A', 'Chk2'], rowNums: [1, 2]}), [
'Src[2]', 'true',
'', '',
]);
await gu.undo(2);
}
});