2024-03-20 13:58:24 +00:00
|
|
|
import { assert, driver } from 'mocha-webdriver';
|
2023-06-27 06:11:08 +00:00
|
|
|
import { $, gu, test } from 'test/nbrowser/gristUtil-nbrowser';
|
|
|
|
|
|
|
|
const fse = require('fs-extra');
|
|
|
|
const path = require('path');
|
|
|
|
const axios = require('axios');
|
|
|
|
|
|
|
|
// Authentication headers to include into axios requests.
|
|
|
|
const headers = {Authorization: 'Bearer api_key_for_userz'};
|
|
|
|
|
|
|
|
describe('Export.ntest', function() {
|
|
|
|
const cleanup = test.setupTestSuite(this);
|
|
|
|
const pathsExpected = {
|
|
|
|
base: path.resolve(gu.fixturesRoot, "export-csv", "CCTransactions.csv"),
|
|
|
|
sorted: path.resolve(gu.fixturesRoot, "export-csv", "CCTransactions-DBA-desc.csv")
|
|
|
|
};
|
|
|
|
let dataExpected = {};
|
|
|
|
|
|
|
|
before(async function() {
|
|
|
|
await gu.supportOldTimeyTestCode();
|
|
|
|
await gu.useFixtureDoc(cleanup, "CCTransactions.grist", true);
|
|
|
|
|
|
|
|
// Read the expected contents before the test case starts, to simplify the promises there.
|
|
|
|
// (don't really need that simplification any more though).
|
|
|
|
for (const [key, fname] of Object.entries(pathsExpected)) {
|
|
|
|
dataExpected[key] = await fse.readFile(fname, {encoding: 'utf8'});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
afterEach(function() {
|
|
|
|
return gu.checkForErrors();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should export correct data', async function() {
|
|
|
|
await $('.test-tb-share').click();
|
|
|
|
// Once the menu opens, get the href of the link.
|
|
|
|
await $('.grist-floating-menu').wait();
|
2024-03-20 13:58:24 +00:00
|
|
|
const submenu = $('.test-tb-share-option:contains(Export as...)');
|
|
|
|
await driver.withActions(a => a.move({origin: submenu.elem()}));
|
|
|
|
const href = await $('.grist-floating-menu a:contains(Comma Separated Values)').wait()
|
|
|
|
.getAttribute('href');
|
2023-06-27 06:11:08 +00:00
|
|
|
// Download the data at the link and compare to expected.
|
|
|
|
const resp = await axios.get(href, {responseType: 'text', headers});
|
|
|
|
assert.equal(resp.headers['content-disposition'],
|
|
|
|
'attachment; filename="CCTransactions.csv"');
|
|
|
|
assert.equal(resp.data, dataExpected.base);
|
|
|
|
await $('.test-tb-share').click();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should respect active sort', async function() {
|
|
|
|
await gu.openColumnMenu('Doing Business As');
|
|
|
|
await $('.grist-floating-menu .test-sort-dsc').click()
|
|
|
|
await $('.test-tb-share').click();
|
|
|
|
// Once the menu opens, get the href of the link.
|
|
|
|
await $('.grist-floating-menu').wait();
|
2024-03-20 13:58:24 +00:00
|
|
|
const submenu = $('.test-tb-share-option:contains(Export as...)');
|
|
|
|
await driver.withActions(a => a.move({origin: submenu.elem()}));
|
|
|
|
const href = await $('.grist-floating-menu a:contains(Comma Separated Values)').wait()
|
|
|
|
.getAttribute('href');
|
2023-06-27 06:11:08 +00:00
|
|
|
// Download the data at the link and compare to expected.
|
|
|
|
const resp = await axios.get(href, {responseType: 'text', headers});
|
|
|
|
assert.equal(resp.data, dataExpected.sorted);
|
|
|
|
});
|
|
|
|
|
|
|
|
// TODO: We should have a test case with multiple sections on the screen, that checks that
|
|
|
|
// export runs for the currently selected section.
|
|
|
|
});
|