mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
166312be3a
Summary: {F74398} Refactored the 'radio checkboxes' in the modal for deleting a page and reused them here. The option to download as a template already existed in the server code but wasn't being exercised by the frontend. Also added an option to remove just the history, which is the main motivation for this diff. Test Plan: Expanded the existing nbrowser test. Reviewers: paulfitz Reviewed By: paulfitz Differential Revision: https://phab.getgrist.com/D3999
144 lines
6.0 KiB
JavaScript
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-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.sendActions([['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');
|
|
});
|
|
});
|