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

127 lines
3.8 KiB
JavaScript

/**
* NOTE: This test is migrated to new UI as test/nbrowser/GridOptions.ts.
* Remove this version once old UI is no longer supported.
*/
import { assert, driver } from 'mocha-webdriver';
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
describe("GridOptions.ntest", function() {
const cleanup = test.setupTestSuite(this);
// ====== Some Helpers ======
let secNames = ["COUNTRY", "CITY", "COUNTRYLANGUAGE"];
let switchTo = (i) =>
gu.actions.viewSection(secNames[i]).selectSection();
/* Test that styles on the given section match the specified flags
* sec: index into secNames
* hor/vert/zebra: boolean flags
*/
async function assertHVZ(sec, hor, vert, zebra) {
let testClasses =
['record-hlines', 'record-vlines', 'record-zebra'];
let flags = [hor, vert, zebra];
let cell = await gu.getCell({rowNum: 1, col: 0, section: secNames[sec]});
let row = await cell.findClosest('.record');
const rowClasses = await row.classList();
testClasses.forEach( (cls, i) => {
if(flags[i]) { assert.include(rowClasses, cls);}
else { assert.notInclude(rowClasses, cls); }
});
}
// ====== Prepare Document ======
before(async function() {
await gu.supportOldTimeyTestCode();
await gu.useFixtureDoc(cleanup, "World-v10.grist", true);
await $('.test-gristdoc').wait();
});
beforeEach(async function() {
//Prepare consistent view
await gu.actions.selectTabView("Country");
await gu.openSidePane('view');
await $(".test-grid-options").wait(assert.isDisplayed);
});
afterEach(function() {
return gu.checkForErrors();
});
// ====== MAIN TESTS ======
it('should only be visible on grid view/summary view', async function() {
let getOptions = () => $(".test-grid-options");
await assert.isPresent(getOptions());
// check that it doesnt show up in detail view
await gu.actions.viewSection("COUNTRY Card List").selectSection();
await assert.isPresent(getOptions(), false);
// check that it shows up on the grid-views
await gu.actions.viewSection("COUNTRY").selectSection();
await assert.isDisplayed(getOptions());
await gu.actions.viewSection("CITY").selectSection();
await assert.isDisplayed(getOptions());
await gu.actions.viewSection("COUNTRYLANGUAGE").selectSection();
await assert.isDisplayed(getOptions());
});
it('should set and persist styles on a grid', async function() {
// get handles on elements
let h = ".test-h-grid-button input";
let v = ".test-v-grid-button input";
let z = ".test-zebra-stripe-button input";
// should start with v+h gridlines, no zebra
await assertHVZ(0, true, true, false);
// change values on all the sections
await switchTo(0);
await $(z).scrollIntoView().click();
await switchTo(1);
await $(h).click();
await $(v).click();
await switchTo(2);
await $(h).click(); // turn off
await $(z).click(); // turn on
await gu.waitForServer();
await assertHVZ(0, true, true, true); // all on
await assertHVZ(1, false, false, false); // all off
await assertHVZ(2, false, true, true); // -h +v +z
// ensure that values persist after reload
await driver.navigate().refresh();
//await $.injectIntoPage();
await gu.waitForDocToLoad();
await assertHVZ(0, true, true, true); // all on
await assertHVZ(1, false, false, false); // all off
await assertHVZ(2, false, true, true); // -h +v +z
});
it('should set .record-even on even-numbered rows', async function() {
let rowClasses = row =>
gu.getCell({rowNum: row, col: 0}).closest('.record').classList();
await switchTo(0);
assert.notInclude(await rowClasses(1), 'record-even', "row 1 should be odd");
assert.include(await rowClasses(2), 'record-even', "row 2 should be even");
});
});