mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
07fcce548b
Summary: Adds support for importing .dsv files (an April Fools 2024 easter egg), and options for exporting .dsv and .tsv files from the Share menu. Test Plan: Browser and server tests. Reviewers: jarek Reviewed By: jarek Differential Revision: https://phab.getgrist.com/D4210
68 lines
2.8 KiB
JavaScript
68 lines
2.8 KiB
JavaScript
import { assert, driver } from 'mocha-webdriver';
|
|
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();
|
|
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');
|
|
// 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();
|
|
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');
|
|
// 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.
|
|
});
|