gristlabs_grist-core/test/nbrowser/DetailView.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

149 lines
6.4 KiB
JavaScript

import { By, assert, driver } from 'mocha-webdriver';
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
describe("DetailView.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);
// Open the view tab.
await gu.openSidePane('view');
// Open the 'All' view
await gu.actions.selectTabView('All');
// close the side pane
await gu.toggleSidePanel('left', 'close');
});
afterEach(function() {
return gu.checkForErrors();
});
describe("DetailView.selection", function () {
before(async function() {
// Open the 'Performances' view
await gu.actions.viewSection('Performances detail').selectSection();
await $('.test-right-panel button:contains(Change Widget)').click();
await $('.test-wselect-type:contains(Card List)').click();
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
await gu.openSelectByForSection('Performances detail');
await driver.findContent('.test-select-row', /Performances record$/).click();
});
it('should mark detail-view row as selected when its out of focus', async function() {
// Focus on Performances record, second row
await gu.actions.viewSection('Performances record').selectSection();
await gu.getCell({col: 'Film', rowNum: 2}).click();
//Check if only the second card in detail view is having selection class
const elements = await driver.findElements(By.css(".detailview_record_detail"));
const secondElement = await elements[1].getAttribute('class');
assert.isTrue(secondElement.includes('selected'));
const firstElement = await elements[0].getAttribute('class');
assert.isFalse(firstElement.includes('selected'));
});
});
it('should allow switching between card and detail view', async function() {
await gu.actions.viewSection('Performances detail').selectSection();
// Check that the detail cells have the correct values.
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1]), ['Tom Hanks']);
await $('.grist-single-record__menu .detail-right').click();
// rowNum is always 1 for detail cells now.
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1]), ['Tim Allen']);
// Swap to Card List view, check values.
await $('.test-right-panel button:contains(Change Widget)').click();
await $('.test-wselect-type:contains(Card List)').click();
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1, 2]),
['Tom Hanks', 'Tim Allen']);
// Swap back to Card view, re-check values.
await $('.test-right-panel button:contains(Change Widget)').click();
await $('.test-wselect-type:contains(Card)').click();
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1]), ['Tim Allen']);
await $('.grist-single-record__menu .detail-left').click();
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1]), ['Tom Hanks']);
});
it('should allow editing cells', async function() {
// Updates should be reflected in the detail floating rowModel cell.
await gu.sendKeys('Roger Federer', $.ENTER);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1]), ['Roger Federer']);
// Undo updates should be reflected as well.
await gu.sendKeys([$.MOD, 'z']);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1]), ['Tom Hanks']);
});
// Note: This is a test of a specific bug related to the detail rowModel being resized after
// being unset.
it('should allow row resize operations after switching section type', async function() {
// Switch to Card List view and enter a formula. This should cause the scrolly to resize all rows.
// If the detail view rowModel is wrongly resized, the action will fail.
await $('.test-right-panel button:contains(Change Widget)').click();
await $('.test-wselect-type:contains(Card List)').click();
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
await gu.sendKeys('=');
await $('.test-editor-tooltip-convert').click(); // Convert to a formula
await gu.sendKeys('100', $.ENTER);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Actor', [1, 2, 3, 4]),
['100', '100', '100', '100']);
});
it('should include an add record row', async function() {
// Should include an add record row which works in card view and detail view.
// Check that adding 'Jurassic Park' to the card view add record row adds it as a row.
await $('.g_record_detail:nth-child(14) .field_clip').eq(1).wait().click();
await gu.sendKeys('Jurassic Park', $.ENTER);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Film', [14]), ['Jurassic Park']);
// Check that adding 'Star Wars' to the detail view add record row adds it as a row.
await $('.test-right-panel button:contains(Change Widget)').click();
await $('.test-wselect-type:contains(Card)').click();
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
await $('.detail-add-btn').wait().click();
// Card view, so rowNum is now 1
await gu.getDetailCell('Film', 1).click();
await gu.sendKeys('Star Wars', $.ENTER);
await gu.waitForServer();
assert.deepEqual(await gu.getVisibleDetailCells('Film', [1]), ['Star Wars']);
// Should allow pasting into the add record row.
await gu.getDetailCell('Actor', 1).click();
await clipboard.lockAndPerform(async (cb) => {
await cb.copy();
await $('.detail-add-btn').click();
await gu.waitForServer();
// Paste '100' into the last field of the row and check that it is added as its own row.
await gu.getDetailCell('Character', 1).click();
await cb.paste();
});
await gu.waitForServer();
assert.deepEqual(await gu.getDetailCell('Character', 1).text(), '100');
// Should not throw errors when deleting the add record row.
await $('.detail-add-btn').click();
await gu.sendKeys([$.MOD, $.DELETE]);
// Errors will be detected in afterEach.
});
});