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

283 lines
13 KiB
JavaScript
Raw Normal View History

/**
* This test suite is partially duplicated as `test/nbrowser/Summaries.ts`.
*/
import { assert } from 'mocha-webdriver';
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
describe('Summaries.ntest', function() {
const cleanup = test.setupTestSuite(this);
gu.bigScreen();
before(async function() {
await gu.supportOldTimeyTestCode();
await gu.useFixtureDoc(cleanup, "CC_Summaries.grist", true);
await gu.toggleSidePanel('left', 'open');
});
afterEach(function() {
return gu.checkForErrors();
});
it('should contain two summary tables', async function() {
// Switch to Summaries view.
await gu.actions.selectTabView('Summaries');
await gu.getVisibleGridCells(0, [1]);
// Check a few numbers from 'By Category' section.
assert.deepEqual(await gu.getGridValues({section: 'By Category', rowNums: [2, 10], cols: [0, 2]}),
[ 'Business Services-Mailing & Shipping', '341.84',
'Merchandise & Supplies-Internet Purchase', '1023.47' ]);
// Check a few numbers from 'Credit/Debit By Category' section.
assert.deepEqual(await gu.getGridValues({section: 'Credit/Debit By Category', rowNums: [3, 9],
cols: [1, 3]}),
[ 'Fees & Adjustments-Fees & Adjustments', '-472.03',
'Business Services-Office Supplies', '526.45' ]);
assert.deepEqual(await gu.getGridValues({section: 'Credit/Debit By Category', rowNums: [3, 9],
cols: [0], mapper: e => e.find('.widget_checkmark').getCssValue('display') }),
[ 'block',
'none' ]);
});
it('should allow updating summary group-by columns', async function() {
// Open side-pane.
await gu.openSidePane('view');
await $('.test-config-data').click();
await gu.actions.viewSection('By Category').selectSection();
// Check some values in the data.
assert.deepEqual(await gu.getGridValues({rowNums: [2, 12], cols: [0, 1, 2]}),
[ 'Business Services-Mailing & Shipping', '6', '341.84',
'Merchandise & Supplies-Pharmacies', '4', '42.19' ]);
// Verify that multiselect only shows "Category".
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), ["Category"]);
// Add another field, "Date".
await $('.test-pwc-editDataSelection').click();
await $(`.test-wselect-column:contains(Date)`).click();
// Cancel, and verify contents of multiselect.
await gu.sendKeys($.ESCAPE);
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), ["Category"]);
// Add another field, "Date", again.
await $('.test-pwc-editDataSelection').click();
await $(`.test-wselect-column:contains(Date)`).click();
// Save, and verify contents of multiselect.
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
// Verify contents of multiselect.
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), ["Date", "Category"]);
// Wait for data to load, and verify the data.
assert.deepEqual(await gu.getGridValues({rowNums: [2, 12], cols: [0, 1, 2, 3]}),
[ '2015-02-12', '', '1', '-4462.48',
'2015-02-13', 'Business Services-Mailing & Shipping', '1', '147.00' ]);
// Remove both "Date" and "Category", and save.
await $('.test-pwc-editDataSelection').click();
await $('.test-wselect-column[class*=-selected]:contains(Date)').click();
await $('.test-wselect-column[class*=-selected]:contains(Category)').click();
await $('.test-wselect-addBtn').click();
await gu.waitForServer();
// Verify contents of multiselect.
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), []);
// Wait for data to load, and verify the data (a single line of totals).
assert.deepEqual(await gu.getGridValues({rowNums: [1], cols: [0, 1]}),
['208', '3540.60']);
// Undo, and verify contents of multiselect.
await gu.undo();
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), ["Date", "Category"]);
// Undo, and verify contents of multiselect.
await gu.undo();
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), ["Category"]);
// Verify that contents is what we started with.
assert.deepEqual(await gu.getGridValues({rowNums: [2, 12], cols: [0, 1, 2]}),
[ 'Business Services-Mailing & Shipping', '6', '341.84',
'Merchandise & Supplies-Pharmacies', '4', '42.19' ]);
});
// This test has been migrated to `test/nbrowser/Summaries.ts`
it('should allow detaching a summary table', async function() {
// Detach a summary section, make sure it shows correct data, and has live formulas, but
// doesn't auto-add rows. Then undo and make sure we go back to a summary table.
await gu.actions.viewSection('By Category').selectSection();
assert.deepEqual(await gu.actions.getTabs().array().text(), ['Summaries', 'Sheet1']);
await $('.test-detach-button').click()
await gu.waitForServer();
await assert.equal(await $(".test-pwc-groupedBy").isDisplayed(), false);
// Verify that the title of the section has changed.
assert.equal(await $('.active_section .test-viewsection-title').parent().text(),
'By Category');
assert.deepEqual(await gu.actions.getTabs().array().text(), ['Summaries', 'Sheet1', 'Table1']);
// Verify that contents of the section.
assert.deepEqual(await gu.getGridValues({rowNums: [2, 12], cols: [0, 1, 2]}),
[ 'Business Services-Mailing & Shipping', '6', '341.84',
'Merchandise & Supplies-Pharmacies', '4', '42.19' ]);
// See what the last row number is.
await gu.sendKeys([$.MOD, $.DOWN]);
assert.equal(await $('.active_section .gridview_data_row_num').last().text(), '19');
// Change a category in Transactions; it should affect formulas in existing rows of the
// detached table, but should not produce new rows.
await gu.clickCell({rowNum: 9, col: 2, section: 'Transactions'});
await gu.sendKeys('Hello', $.ENTER);
await gu.waitForServer();
// Check that number of rows is unchanged, but that formulas got updated in the affected row.
await gu.actions.viewSection('By Category').selectSection();
assert.equal(await $('.active_section .gridview_data_row_num').last().text(), '19');
await gu.sendKeys([$.MOD, $.UP]);
assert.deepEqual(await gu.getGridValues({rowNums: [2, 12], cols: [0, 1, 2]}),
[ 'Business Services-Mailing & Shipping', '5', '194.84',
'Merchandise & Supplies-Pharmacies', '4', '42.19' ]);
// Undo everything. Make sure we have our summary table back.
await gu.undo(3);
assert.equal(await $('.active_section .test-viewsection-title').parent().text(),
'By Category');
assert.deepEqual(await $('.test-pwc-groupedBy-col').array().text(), ["Category"]);
assert.deepEqual(await gu.actions.getTabs().array().text(), ['Summaries', 'Sheet1']);
});
it('should allow adding summaries by date', async function() {
// Add Summary table by Date column.
await gu.actions.viewSection('By Category').selectSection();
await gu.actions.addNewSummarySection('Sheet1', ['Date', 'Category'], 'Table', 'By Date/Category');
// Check a couple of values.
await gu.actions.viewSection('By Date/Category').selectSection();
await gu.sendKeys([$.MOD, $.DOWN]); // Go to the end.
assert.deepEqual(await gu.getGridValues({section: 'By Date/Category', rowNums:[151], cols:[0, 1, 3]}),
[ '2015-12-04', 'Travel-Lodging', '3021.54' ]);
});
it('should update summary values when values change', async function() {
// Change a value in Transactions, and check that numbers changed.
await gu.actions.viewSection('Transactions').selectSection();
await gu.getCell(1, 9).click();
await gu.waitAppFocus();
await gu.sendKeys('947.00', $.ENTER); // Change 147.00 -> 947.00
assert.equal(await gu.getCell(1, 9).text(), '947.00');
await gu.sendKeys([$.MOD, $.DOWN], $.UP); // Go to the last row (but not the "add row").
await gu.sendKeys('677.40', $.ENTER); // Change 177.40 -> 677.40
await gu.waitForServer();
// Check changes in the two affected sections.
assert.deepEqual(await gu.getGridValues({section: 'By Category', rowNums: [2, 10], cols: [0, 2]}),
[ 'Business Services-Mailing & Shipping', '1141.84', // <--- this changes
'Merchandise & Supplies-Internet Purchase', '1023.47' ]);
assert.deepEqual(await gu.getGridValues({section: 'By Date/Category', rowNums:[151], cols:[0, 1, 3]}),
[ '2015-12-04', 'Travel-Lodging', '3521.54' ]);
// Undo both changes, and check that summarized values got restored.
await $(".test-undo").click();
await $(".test-undo").click();
await gu.waitForServer();
assert.deepEqual(await gu.getGridValues({section: 'By Category', rowNums: [2, 10], cols: [0, 2]}),
[ 'Business Services-Mailing & Shipping', '341.84',
'Merchandise & Supplies-Internet Purchase', '1023.47' ]);
assert.deepEqual(await gu.getGridValues({section: 'By Date/Category', rowNums:[151], cols:[0, 1, 3]}),
[ '2015-12-04', 'Travel-Lodging', '3021.54' ]);
});
it('should update summary values when key columns change', async function() {
// Change a category in Transactions, and check that numbers changed.
await gu.actions.viewSection('Transactions').selectSection();
await gu.sendKeys([$.MOD, $.DOWN]); // Go to the end.
await gu.getCell(2, 208).click();
await gu.waitAppFocus();
await gu.sendKeys('Merchandise & Supplies-Internet Purchase', $.ENTER);
assert.equal(await gu.getCell(2, 208).text(), 'Merchandise & Supplies-Internet Purchase');
await gu.waitForServer();
// Check that numbers changed in two affected summary tables.
assert.deepEqual(await gu.getGridValues({section: 'By Category', rowNums: [2, 10], cols: [0, 2]}),
[ 'Business Services-Mailing & Shipping', '341.84',
'Merchandise & Supplies-Internet Purchase', '1200.87' ]); // Up by 177.40
assert.deepEqual(await gu.getGridValues({section: 'By Date/Category',
rowNums:[151, 152], cols:[0, 1, 3]}),
[ '2015-12-04', 'Travel-Lodging', '2844.14', // Down by 177.40
'2015-12-04', 'Merchandise & Supplies-Internet Purchase', '177.40' ]); // New row
// Undo and check that summarized values got restored.
await $(".test-undo").click();
await gu.waitForServer();
assert.deepEqual(await gu.getGridValues({section: 'By Category', rowNums: [2, 10], cols: [0, 2]}),
[ 'Business Services-Mailing & Shipping', '341.84',
'Merchandise & Supplies-Internet Purchase', '1023.47' ]);
assert.deepEqual(await gu.getGridValues({section: 'By Date/Category', rowNums:[151], cols:[0, 1, 3]}),
[ '2015-12-04', 'Travel-Lodging', '3021.54' ]);
// Check that the newly-added row is gone.
await gu.actions.viewSection('By Date/Category').selectSection();
await assert.equal(await gu.getGridLastRowText(), '151');
});
it('should update summary values when records get added', async function() {
// Add a record.
await gu.actions.viewSection('Transactions').selectSection();
await gu.addRecord(['2016-01-01', '100', 'Business Services-Office Supplies']);
await gu.waitForServer();
assert.equal(await gu.getGridLastRowText(), '210');
assert.deepEqual(await gu.getGridValues({cols: [0, 1, 2], rowNums: [209]}),
['2016-01-01', '100.00', 'Business Services-Office Supplies']);
// Check that numbers have changed.
assert.deepEqual(await gu.getGridValues({section: 'Credit/Debit By Category', rowNums: [2, 3, 9],
cols: [1, 3]}),
[ 'Business Services-Office Supplies', '-4.56', // <-- no change
'Fees & Adjustments-Fees & Adjustments', '-472.03',
'Business Services-Office Supplies', '626.45' ]); // <-- does change
assert.deepEqual(await gu.getGridValues({section: 'Credit/Debit By Category', rowNums: [2, 3, 9],
cols: [0], mapper: e => e.find('.widget_checkmark').getCssValue('display')}),
[ 'block',
'block',
'none']); // <-- does change
// Go to last data record.
await gu.sendKeys([$.MOD, $.UP]);
await gu.sendKeys([$.MOD, $.DOWN]);
await gu.sendKeys([$.UP]);
// Delete the new record, and check that values are the same as before.
await gu.sendKeys([$.MOD, $.DELETE]);
await gu.confirm(true, true); // confirm and remember.
await gu.waitForServer();
assert.deepEqual(await gu.getGridValues({section: 'Credit/Debit By Category', rowNums: [2, 3, 9],
cols: [1, 3]}),
[ 'Business Services-Office Supplies', '-4.56',
'Fees & Adjustments-Fees & Adjustments', '-472.03',
'Business Services-Office Supplies', '526.45' ]);
assert.deepEqual(await gu.getGridValues({section: 'Credit/Debit By Category', rowNums: [2, 3, 9],
cols: [0], mapper: e => e.find('.widget_checkmark').getCssValue('display')}),
[ 'block',
'block',
'none' ]);
});
});