gristlabs_grist-core/test/nbrowser/Views.ntest.js

144 lines
6.0 KiB
JavaScript
Raw Normal View History

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');
});
});