gristlabs_grist-core/test/nbrowser/Views.ntest.js
Alex Hall 166312be3a (core) Add dialog with options to allow downloading without history or data
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
2023-08-18 15:38:24 +02: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-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');
});
});