kibana/x-pack/test/functional/apps/canvas/reports.ts
Tim Sullivan bf1ef87b35
[8.18] [Canvas/PDF report] Allow canvas to generate PDF report (#224309) (#224339)
# Backport

This will backport the following commits from `main` to `8.18`:
- [[Canvas/PDF report] Allow canvas to generate PDF report
(#224309)](https://github.com/elastic/kibana/pull/224309)

<!--- Backport version: 10.0.1 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Tim
Sullivan","email":"tsullivan@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-06-17T22:47:22Z","message":"[Canvas/PDF
report] Allow canvas to generate PDF report (#224309)\n\n##
Summary\n\nCloses
https://github.com/elastic/kibana/issues/224275\n\n**Context:** In
https://github.com/elastic/kibana/pull/222273, we added\nrestrictions to
the \"Reporting redirect app\" to make sure it could not\nbe abused by
using unexpected locator types (such as the short URL\nlocator or the
\"legacy\" locator type) when triggering redirects in the\nReporting
headless browser. The restrictions are on the basis of a list\nof
allowed locator types, which should be a list of every analytical
app\nthat supports Reporting.\n\n**Problem:** Unfortunately that added a
regression to Canvas PDF\nreporting, because the allow-list for locator
types neglected to include\nthe Canvas locator type.\n\nThis PR solves
the problem by adding the Canvas locator type to the set\nof allowed
locator types.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"f5dee1347f019d4e98a45070eeb80356453a9827","branchLabelMapping":{"^v9.1.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","backport:version","v8.15.6","v9.1.0","v8.19.0","v7.17.29","v9.0.3","v8.18.3","v8.17.8"],"title":"[Canvas/PDF
report] Allow canvas to generate PDF
report","number":224309,"url":"https://github.com/elastic/kibana/pull/224309","mergeCommit":{"message":"[Canvas/PDF
report] Allow canvas to generate PDF report (#224309)\n\n##
Summary\n\nCloses
https://github.com/elastic/kibana/issues/224275\n\n**Context:** In
https://github.com/elastic/kibana/pull/222273, we added\nrestrictions to
the \"Reporting redirect app\" to make sure it could not\nbe abused by
using unexpected locator types (such as the short URL\nlocator or the
\"legacy\" locator type) when triggering redirects in the\nReporting
headless browser. The restrictions are on the basis of a list\nof
allowed locator types, which should be a list of every analytical
app\nthat supports Reporting.\n\n**Problem:** Unfortunately that added a
regression to Canvas PDF\nreporting, because the allow-list for locator
types neglected to include\nthe Canvas locator type.\n\nThis PR solves
the problem by adding the Canvas locator type to the set\nof allowed
locator types.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"f5dee1347f019d4e98a45070eeb80356453a9827"}},"sourceBranch":"main","suggestedTargetBranches":["8.15","7.17","9.0","8.18","8.17"],"targetPullRequestStates":[{"branch":"8.15","label":"v8.15.6","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/224309","number":224309,"mergeCommit":{"message":"[Canvas/PDF
report] Allow canvas to generate PDF report (#224309)\n\n##
Summary\n\nCloses
https://github.com/elastic/kibana/issues/224275\n\n**Context:** In
https://github.com/elastic/kibana/pull/222273, we added\nrestrictions to
the \"Reporting redirect app\" to make sure it could not\nbe abused by
using unexpected locator types (such as the short URL\nlocator or the
\"legacy\" locator type) when triggering redirects in the\nReporting
headless browser. The restrictions are on the basis of a list\nof
allowed locator types, which should be a list of every analytical
app\nthat supports Reporting.\n\n**Problem:** Unfortunately that added a
regression to Canvas PDF\nreporting, because the allow-list for locator
types neglected to include\nthe Canvas locator type.\n\nThis PR solves
the problem by adding the Canvas locator type to the set\nof allowed
locator types.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"f5dee1347f019d4e98a45070eeb80356453a9827"}},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/224335","number":224335,"state":"OPEN"},{"branch":"7.17","label":"v7.17.29","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"9.0","label":"v9.0.3","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.18","label":"v8.18.3","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.17","label":"v8.17.8","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}]
BACKPORT-->
2025-06-18 17:47:29 +02:00

78 lines
2.8 KiB
TypeScript

/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import expect from '@kbn/expect';
import { FtrProviderContext } from '../../ftr_provider_context';
export default function ({ getService, getPageObjects }: FtrProviderContext) {
const es = getService('es');
const kibanaServer = getService('kibanaServer');
const browser = getService('browser');
const log = getService('log');
const security = getService('security');
const { reporting, canvas } = getPageObjects(['reporting', 'canvas']);
const archive = 'x-pack/test/functional/fixtures/kbn_archiver/canvas/reports';
describe('Canvas PDF Report Generation', () => {
before('initialize tests', async () => {
log.debug('ReportingPage:initTests');
await security.role.create('test_canvas_user', {
elasticsearch: { cluster: [], indices: [], run_as: [] },
kibana: [
{
spaces: ['*'],
base: [],
feature: { canvas: ['read'] },
},
],
});
await security.testUser.setRoles([
'test_canvas_user',
'reporting_user', // NOTE: the built-in role granting full reporting access is deprecated. See xpack.reporting.roles.enabled
]);
await kibanaServer.importExport.load(archive);
await browser.setWindowSize(1600, 850);
});
after('clean up archives', async () => {
await kibanaServer.importExport.unload(archive);
await es.deleteByQuery({
index: '.reporting-*',
refresh: true,
body: { query: { match_all: {} } },
});
});
describe('Print PDF button', () => {
it('creates a PDF with correct response headers', async function () {
// Generating and then comparing reports can take longer than the default 60s timeout
this.timeout(180000);
await canvas.goToListingPage();
await canvas.loadFirstWorkpad('The Very Cool Workpad for PDF Tests');
await reporting.openShareMenuItem('PDF Reports');
await reporting.clickGenerateReportButton();
const url = await reporting.getReportURL(60000);
const res = await reporting.getResponse(url ?? '');
expect(res.status).to.equal(200);
expect(res.get('content-type')).to.equal('application/pdf');
expect(res.get('content-disposition')).to.equal(
'attachment; filename=The%20Very%20Cool%20Workpad%20for%20PDF%20Tests.pdf'
);
const jobId = await reporting.getReportJobId(60000);
const reportInfo = await reporting.getReportInfo(jobId);
// verify "completed" status (no warnings)
expect(reportInfo).to.have.property('status', 'completed');
});
});
});
}