gristlabs_grist-core/test/nbrowser/Views.ntest.js
Paul Fitzpatrick bcbf57d590 (core) bump mocha version to allow parallel tests; move more tests to core
Summary:
This uses a newer version of mocha in grist-core so that tests can be run in parallel. That allows more tests to be moved without slowing things down overall. Tests moved are venerable browser tests; only the ones that "just work" or worked without too much trouble to are moved, in order to keep the diff from growing too large. Will wrestle with more in follow up.

Parallelism is at the file level, rather than the individual test.

The newer version of mocha isn't needed for grist-saas repo; tests are parallelized in our internal CI by other means. I've chosen to allocate files to workers in a cruder way than our internal CI, based on initial characters rather than an automated process. The automated process would need some reworking to be compatible with mocha running in parallel mode.

Test Plan: this diff was tested first on grist-core, then ported to grist-saas so saas repo history will correctly track history of moved files.

Reviewers: jarek

Reviewed By: jarek

Subscribers: jarek

Differential Revision: https://phab.getgrist.com/D3927
2023-06-27 02:55:34 -04:00

144 lines
6.0 KiB
JavaScript

import { assert } from 'mocha-webdriver';
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
describe('Views.ntest', function() {
test.setupTestSuite(this);
before(async function() {
await gu.supportOldTimeyTestCode();
await gu.actions.createNewDoc();
});
afterEach(function() {
return gu.checkForErrors();
});
it('should allow adding and removing viewsections', async function() {
// Create two new viewsections
await gu.actions.addNewSection('Table1', 'Table');
var recordSection = $('.test-gristdoc .view_leaf').eq(0);
var gridSection = $('.test-gristdoc .view_leaf').eq(1);
// Check that the newest viewsection has focus
await assert.hasClass(gridSection, 'active_section');
await gu.actions.addNewSection('Table1', 'Card');
var cardSection = $('.test-gristdoc .view_leaf').eq(2);
assert.lengthOf(await $('.test-gristdoc .view_leaf').array(), 3);
// Check that the newest viewsection has focus
await assert.hasClass(cardSection, 'active_section');
// Click the second viewsection and check that it has focus
await gridSection.click();
await assert.hasClass(gridSection, 'active_section');
// Check that viewsection titles are correct and editable
var recordTitle = recordSection.find('.test-viewsection-title');
assert.equal(await recordTitle.text(), 'TABLE1');
await recordTitle.click();
await gu.renameActiveSection('foo');
assert.equal(await recordTitle.text(), 'foo');
// Delete the first viewsection and check that it`s gone
await gu.actions.viewSection('foo').selectMenuOption('viewLayout', 'Delete widget');
await gu.waitForServer();
assert.lengthOf(await $('.test-gristdoc .view_leaf').array(), 2);
});
it('should allow creating a view section for a new table', async function() {
assert.lengthOf(await $('.test-gristdoc .view_leaf').array(), 2);
await gu.actions.addNewSection('New', 'Card List');
var newTitle = $('.test-gristdoc .test-viewsection-title').eq(2).wait();
assert.equal(await newTitle.text(), 'TABLE2 Card List');
});
it('should not create two views when creating a new view for a new table', async function() {
// This is probably test for a bug. Currently adding new tables to an existing view
// doesn't produce new views.
assert.deepEqual(await $(`.test-docpage-label`).array().text(), ['Table1']);
await gu.actions.addNewView('New', 'Table');
assert.deepEqual(await $(`.test-docpage-label`).array().text(), ['Table1', 'Table3']);
});
it('should switch to a valid default view when the active view is deleted', async function() {
// This confirms a bug fix where the default view should change when the current
// default view is deleted
await gu.actions.selectTabView('Table1');
assert.equal(await gu.actions.getActiveTab().text(), 'Table1');
assert.deepEqual(await $(`.test-docpage-label`).array().text(), ['Table1', 'Table3']);
await gu.actions.tableView('Table1').selectOption('Remove');
await $(".test-removepage-option-page").click();
await $(".test-modal-confirm").click();
await gu.waitForServer();
assert.equal(await gu.actions.getActiveTab().text(), 'Table3');
assert.deepEqual(await $(`.test-docpage-label`).array().text(), ['Table3']);
});
it('should allow adding and removing summary view sections', async function() {
await gu.removeTable("Table1");
await gu.actions.addNewTable();
assert.equal(await gu.actions.getActiveTab().text(), 'Table1');
await gu.enterGridValues(0, 0, [
['a', 'a', 'b'],
['c', 'd', 'd'],
['1', '2', '3']
]);
await gu.actions.addNewSummarySection('Table1', ['A'], 'Table', 'Section Foo');
assert.deepEqual(await gu.getGridValues({
section: 'Section Foo',
rowNums: [1, 2],
cols: [0, 1, 2]
}), ['a', '2', '3', 'b', '1', '3']);
await gu.actions.viewSection('Section Foo').selectMenuOption('viewLayout', 'Delete widget');
await gu.waitForServer();
await gu.actions.addNewSummarySection('Table1', ['B'], 'Table', 'Section Foo');
assert.deepEqual(await gu.getGridValues({
section: 'Section Foo',
rowNums: [1, 2],
cols: [0, 1, 2]
}), ['c', '1', '1', 'd', '2', '5']);
});
it('should switch to a valid default section when the active section is deleted', async function() {
// This confirms a bug fix where the section should change when the active section is
// deleted, either directly or via the section's table being deleted.
// Reference: https://phab.getgrist.com/T327
await gu.actions.addNewSection('New', 'Table');
await gu.waitForServer();
await gu.getSection('TABLE4').click();
// Delete the section
await gu.actions.viewSection('TABLE4').selectMenuOption('viewLayout', 'Delete widget');
await gu.waitForServer();
// Assert that the default section (Table1 record) is now active.
assert.equal(await $('.active_section > .viewsection_title').text(), 'TABLE1');
// Assert that focus is returned to the deleted section on undo.
await gu.undo();
assert.equal(await $('.active_section > .viewsection_title').text(), 'TABLE4');
// Add a sorted column to the new table. The reported bug shows a symptom of the problem is
// errors thrown when a sorted column exists in the deleted table.
await gu.clickCellRC(0, 0);
await gu.sendKeys('b', $.ENTER);
await gu.waitForServer();
await gu.sendKeys('a', $.ENTER);
await gu.waitForServer();
await gu.sendKeys('c', $.ENTER);
await gu.waitForServer();
await gu.openColumnMenu('A');
await $(`.grist-floating-menu .test-sort-asc`).click();
// Delete the table.
await gu.removeTable("Table4");
await gu.actions.selectTabView('Table1');
// Assert that the default section (Table1 record) is now active.
assert.equal(await $('.active_section > .viewsection_title').text(), 'TABLE1');
// Again, assert that focus is returned to the deleted section on undo.
await gu.undo();
assert.equal(await $('.active_section > .viewsection_title').text(), 'TABLE4');
});
});