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

68 lines
2.8 KiB
JavaScript
Raw Normal View History

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