2023-06-27 06:11:08 +00:00
|
|
|
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');
|
2023-08-18 10:54:03 +00:00
|
|
|
await $(".test-option-page").click();
|
2023-06-27 06:11:08 +00:00
|
|
|
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.
|
2023-07-07 08:54:01 +00:00
|
|
|
await gu.sendActions([['RemoveTable', 'Table4']]);
|
2023-06-27 06:11:08 +00:00
|
|
|
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');
|
|
|
|
});
|
|
|
|
});
|