Skip to content

Commit

Permalink
[Reporting] Fix and test for Listing of Reports
Browse files Browse the repository at this point in the history
  • Loading branch information
tsullivan committed Aug 5, 2020
1 parent c655f50 commit b44d21d
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 62 deletions.
10 changes: 8 additions & 2 deletions x-pack/plugins/reporting/server/routes/jobs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,13 @@ export function registerJobInfoRoutes(reporting: ReportingCore) {
router.get(
{
path: `${MAIN_ENTRY}/list`,
validate: false,
validate: {
query: schema.object({
page: schema.string({ defaultValue: '0' }),
size: schema.string({ defaultValue: '10' }),
ids: schema.maybe(schema.string()),
}),
},
},
userHandler(async (user, context, req, res) => {
// ensure the async dependencies are loaded
Expand All @@ -50,7 +56,7 @@ export function registerJobInfoRoutes(reporting: ReportingCore) {
page: queryPage = '0',
size: querySize = '10',
ids: queryIds = null,
} = req.query as ListQuery;
} = req.query as ListQuery; // NOTE: type inference is not working here. userHandler breaks it?
const page = parseInt(queryPage, 10) || 0;
const size = Math.min(100, parseInt(querySize, 10) || 10);
const jobIds = queryIds ? queryIds.split(',') : null;
Expand Down
2 changes: 1 addition & 1 deletion x-pack/test/functional/apps/reporting_management/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@ import { FtrProviderContext } from '../../ftr_provider_context';
export default ({ loadTestFile }: FtrProviderContext) => {
describe('reporting management app', function () {
this.tags('ciGroup7');
loadTestFile(require.resolve('./report_delete_pagination'));
loadTestFile(require.resolve('./report_listing'));
});
};

This file was deleted.

118 changes: 118 additions & 0 deletions x-pack/test/functional/apps/reporting_management/report_listing.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/

import expect from '@kbn/expect';
import { WebElementWrapper } from 'test/functional/services/lib/web_element_wrapper';
import { FtrProviderContext } from '../../ftr_provider_context';

const getTableTextFromElement = async (tableEl: WebElementWrapper) => {
const rows = await tableEl.findAllByCssSelector('tbody tr');
return (
await Promise.all(
rows.map(async (row) => {
return await row.getVisibleText();
})
)
).join('\n');
};

export default ({ getPageObjects, getService }: FtrProviderContext) => {
const pageObjects = getPageObjects(['common', 'reporting']);
const log = getService('log');
const retry = getService('retry');
const security = getService('security');

const testSubjects = getService('testSubjects');
const esArchiver = getService('esArchiver');

describe('Listing of Reports', function () {
before(async () => {
await security.testUser.setRoles(['kibana_admin', 'reporting_user']);
await esArchiver.load('empty_kibana');
});

beforeEach(async () => {
// to reset the data after deletion testing
await esArchiver.load('reporting/archived_reports');
await pageObjects.common.navigateToApp('reporting');
await testSubjects.existOrFail('reportJobListing', { timeout: 200000 });
});

after(async () => {
await esArchiver.unload('empty_kibana');
await security.testUser.restoreDefaults();
});

afterEach(async () => {
await esArchiver.unload('reporting/archived_reports');
});

it('Confirm single report deletion works', async () => {
log.debug('Checking for reports.');
await retry.try(async () => {
await testSubjects.click('checkboxSelectRow-k9a9xlwl0gpe1457b10rraq3');
});
const deleteButton = await testSubjects.find('deleteReportButton');
await retry.waitFor('delete button to become enabled', async () => {
return await deleteButton.isEnabled();
});
await deleteButton.click();
await testSubjects.exists('confirmModalBodyText');
await testSubjects.click('confirmModalConfirmButton');
await retry.try(async () => {
await testSubjects.waitForDeleted('checkboxSelectRow-k9a9xlwl0gpe1457b10rraq3');
});
});

it('Paginates content', async () => {
const previousButton = await testSubjects.find('pagination-button-previous');

// previous CAN NOT be clicked
expect(await previousButton.getAttribute('disabled')).to.be('true');

// scan page 1
let tableText = await getTableTextFromElement(await testSubjects.find('reportJobListing'));
const PAGE_CONTENT_1 = `[Logs] File Type Scatter Plot\nvisualization\n2020-04-21 @ 07:01 PM\ntest_user\nCompleted at 2020-04-21 @ 07:02 PM
[Logs] File Type Scatter Plot\nvisualization\n2020-04-21 @ 07:01 PM\ntest_user\nCompleted at 2020-04-21 @ 07:02 PM
[Logs] Heatmap\nvisualization\n2020-04-21 @ 07:00 PM\ntest_user\nCompleted at 2020-04-21 @ 07:01 PM
[Logs] Heatmap\nvisualization\n2020-04-21 @ 07:00 PM\ntest_user\nCompleted at 2020-04-21 @ 07:01 PM
[Flights] Flight Delays\nvisualization\n2020-04-21 @ 07:00 PM\ntest_user\nCompleted at 2020-04-21 @ 07:01 PM
[Flights] Flight Delays\nvisualization\n2020-04-21 @ 07:00 PM\ntest_user\nCompleted at 2020-04-21 @ 07:01 PM
pdf\ndashboard\n2020-04-21 @ 07:00 PM\ntest_user\nCompleted at 2020-04-21 @ 07:00 PM
pdf\ndashboard\n2020-04-21 @ 07:00 PM\ntest_user\nCompleted at 2020-04-21 @ 07:00 PM
[Flights] Flight Cancellations\nvisualization\n2020-04-21 @ 06:59 PM\ntest_user\nCompleted at 2020-04-21 @ 07:00 PM
[Flights] Markdown Instructions\nvisualization\n2020-04-21 @ 06:59 PM\ntest_user\nCompleted at 2020-04-21 @ 07:00 PM`;
expect(tableText).to.be(PAGE_CONTENT_1);

// click page 2
await testSubjects.click('pagination-button-1');

// previous CAN be clicked
expect(await previousButton.getAttribute('disabled')).to.be(null);

// scan page 2
tableText = await getTableTextFromElement(await testSubjects.find('reportJobListing'));
const PAGE_CONTENT_2 = `[eCommerce] Revenue Tracking\ncanvas workpad\n2020-04-21 @ 06:58 PM\ntest_user\nCompleted at 2020-04-21 @ 06:59 PM
[Logs] Web Traffic\ncanvas workpad\n2020-04-21 @ 06:58 PM\ntest_user\nCompleted at 2020-04-21 @ 06:59 PM
[Flights] Overview\ncanvas workpad\n2020-04-21 @ 06:58 PM\ntest_user\nCompleted at 2020-04-21 @ 06:59 PM
[eCommerce] Revenue Dashboard\ndashboard\n2020-04-21 @ 06:57 PM\ntest_user\nCompleted at 2020-04-21 @ 06:58 PM
[Logs] Web Traffic\ndashboard\n2020-04-21 @ 06:57 PM\ntest_user\nCompleted at 2020-04-21 @ 06:58 PM
[Flights] Global Flight Dashboard\ndashboard\n2020-04-21 @ 06:56 PM\ntest_user\nCompleted at 2020-04-21 @ 06:57 PM
[Flights] Global Flight Dashboard\ndashboard\n2020-04-21 @ 06:56 PM\ntest_user\nCompleted at 2020-04-21 @ 06:57 PM
report4csv\n2020-04-21 @ 06:55 PM\ntest_user\nCompleted at 2020-04-21 @ 06:56 PM - Max size reached\nreport3csv\n2020-04-21 @ 06:55 PM
test_user\nCompleted at 2020-04-21 @ 06:55 PM - Max size reached\nreport2csv\n2020-04-21 @ 06:54 PM\ntest_user\nCompleted at 2020-04-21 @ 06:55 PM - Max size reached`;
expect(tableText).to.be(PAGE_CONTENT_2);

// click page 3
await testSubjects.click('pagination-button-2');

// scan page 3
tableText = await getTableTextFromElement(await testSubjects.find('reportJobListing'));
const PAGE_CONTENT_3 = `report1csv\n2020-04-21 @ 06:54 PM\ntest_user\nCompleted at 2020-04-21 @ 06:54 PM - Max size reached`;
expect(tableText).to.be(PAGE_CONTENT_3);
});
});
};

0 comments on commit b44d21d

Please sign in to comment.