From 366a28aef5c58164426822325e9ca9d0d585259e Mon Sep 17 00:00:00 2001 From: Timothy Sullivan Date: Wed, 4 May 2022 10:52:32 -0700 Subject: [PATCH] add visualize test for tsvb --- .../reporting_examples/capture_test.ts | 2 +- .../apps/dashboard/reporting/screenshots.ts | 6 +- .../functional/apps/maps/reports/index.ts | 2 +- .../functional/apps/visualize/reporting.ts | 109 ++++++++++++++---- .../apps/visualize/reports/baseline/tsvb.png | Bin 0 -> 32263 bytes .../functional/page_objects/reporting_page.ts | 4 +- 6 files changed, 94 insertions(+), 29 deletions(-) create mode 100644 x-pack/test/functional/apps/visualize/reports/baseline/tsvb.png diff --git a/x-pack/test/examples/reporting_examples/capture_test.ts b/x-pack/test/examples/reporting_examples/capture_test.ts index 16162a15c3121..9024aae87172f 100644 --- a/x-pack/test/examples/reporting_examples/capture_test.ts +++ b/x-pack/test/examples/reporting_examples/capture_test.ts @@ -33,7 +33,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.reporting.clickGenerateReportButton(); const url = await PageObjects.reporting.getReportURL(60000); - const captureData = await PageObjects.reporting.getRawPdfReportData(url); + const captureData = await PageObjects.reporting.getRawScreenshotReportData(url); const pngSessionFilePath = await compareImages.writeToSessionFile( 'capture_test_baseline_a', diff --git a/x-pack/test/functional/apps/dashboard/reporting/screenshots.ts b/x-pack/test/functional/apps/dashboard/reporting/screenshots.ts index e7066f620bf74..d3ab035f5b224 100644 --- a/x-pack/test/functional/apps/dashboard/reporting/screenshots.ts +++ b/x-pack/test/functional/apps/dashboard/reporting/screenshots.ts @@ -161,7 +161,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.reporting.removeForceSharedItemsContainerSize(); const url = await PageObjects.reporting.getReportURL(60000); - const reportData = await PageObjects.reporting.getRawPdfReportData(url); + const reportData = await PageObjects.reporting.getRawScreenshotReportData(url); const reportFileName = 'small_dashboard_preserve_layout'; const sessionReportPath = await PageObjects.reporting.writeSessionReport( reportFileName, @@ -190,7 +190,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.reporting.removeForceSharedItemsContainerSize(); const url = await PageObjects.reporting.getReportURL(200000); - const reportData = await PageObjects.reporting.getRawPdfReportData(url); + const reportData = await PageObjects.reporting.getRawScreenshotReportData(url); const reportFileName = 'large_dashboard_preserve_layout'; const sessionReportPath = await PageObjects.reporting.writeSessionReport( reportFileName, @@ -285,7 +285,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { await PageObjects.reporting.removeForceSharedItemsContainerSize(); const url = await PageObjects.reporting.getReportURL(60000); - const reportData = await PageObjects.reporting.getRawPdfReportData(url); + const reportData = await PageObjects.reporting.getRawScreenshotReportData(url); sessionReportPath = await PageObjects.reporting.writeSessionReport( reportFileName, 'png', diff --git a/x-pack/test/functional/apps/maps/reports/index.ts b/x-pack/test/functional/apps/maps/reports/index.ts index 4e942b1e150ef..78bb1d604fd7c 100644 --- a/x-pack/test/functional/apps/maps/reports/index.ts +++ b/x-pack/test/functional/apps/maps/reports/index.ts @@ -20,7 +20,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { // helper function to check the difference between the new image and the baseline const measurePngDifference = async (fileName: string) => { const url = await PageObjects.reporting.getReportURL(60000); - const reportData = await PageObjects.reporting.getRawPdfReportData(url); + const reportData = await PageObjects.reporting.getRawScreenshotReportData(url); const sessionReportPath = await PageObjects.reporting.writeSessionReport( fileName, diff --git a/x-pack/test/functional/apps/visualize/reporting.ts b/x-pack/test/functional/apps/visualize/reporting.ts index 07ce3d9b23128..155b417732f3c 100644 --- a/x-pack/test/functional/apps/visualize/reporting.ts +++ b/x-pack/test/functional/apps/visualize/reporting.ts @@ -6,15 +6,19 @@ */ import expect from '@kbn/expect'; +import path from 'path'; import { FtrProviderContext } from '../../ftr_provider_context'; +const REPORTS_FOLDER = path.resolve(__dirname, 'reports'); + export default function ({ getService, getPageObjects }: FtrProviderContext) { const es = getService('es'); const esArchiver = getService('esArchiver'); const browser = getService('browser'); const log = getService('log'); + const config = getService('config'); const kibanaServer = getService('kibanaServer'); - const ecommerceSOPath = 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce.json'; + const reporting = getService('reporting'); const PageObjects = getPageObjects([ 'reporting', @@ -26,28 +30,42 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { ]); describe('Visualize Reporting Screenshots', () => { - before('initialize tests', async () => { - log.debug('ReportingPage:initTests'); - await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/reporting/ecommerce'); - await kibanaServer.importExport.load(ecommerceSOPath); + before(async () => { await browser.setWindowSize(1600, 850); - await kibanaServer.uiSettings.replace({ - 'timepicker:timeDefaults': - '{ "from": "2019-04-27T23:56:51.374Z", "to": "2019-08-23T16:18:51.821Z"}', - }); }); - after('clean up archives', async () => { - await esArchiver.unload('x-pack/test/functional/es_archives/reporting/ecommerce'); - await kibanaServer.importExport.unload(ecommerceSOPath); + after(async () => { await es.deleteByQuery({ index: '.reporting-*', refresh: true, body: { query: { match_all: {} } }, }); - await kibanaServer.uiSettings.unset('timepicker:timeDefaults'); }); describe('Print PDF button', () => { + const ecommerceSOPath = + 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce.json'; + + before('initialize tests', async () => { + log.debug('ReportingPage:initTests'); + await esArchiver.load('x-pack/test/functional/es_archives/reporting/ecommerce'); + await kibanaServer.importExport.load(ecommerceSOPath); + await kibanaServer.uiSettings.replace({ + 'timepicker:timeDefaults': + '{ "from": "2019-04-27T23:56:51.374Z", "to": "2019-08-23T16:18:51.821Z"}', + defaultIndex: '5193f870-d861-11e9-a311-0fa548c5f953', + }); + }); + after('clean up archives', async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/reporting/ecommerce'); + await kibanaServer.importExport.unload(ecommerceSOPath); + await es.deleteByQuery({ + index: '.reporting-*', + refresh: true, + body: { query: { match_all: {} } }, + }); + await kibanaServer.uiSettings.unset('timepicker:timeDefaults'); + }); + it('is available if new', async () => { await PageObjects.common.navigateToUrl('visualize', 'new', { useActualUrl: true }); await PageObjects.visualize.clickAggBasedVisualizations(); @@ -65,21 +83,68 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await PageObjects.reporting.openPdfReportingPanel(); expect(await PageObjects.reporting.isGenerateReportButtonDisabled()).to.be(null); }); + }); - it('downloaded PDF has OK status', async function () { - // Generating and then comparing reports can take longer than the default 60s timeout - this.timeout(180000); + describe('PNG reports: sample data created in 7.6', () => { + const reportFileName = 'tsvb'; + let sessionReportPath: string; - await PageObjects.common.navigateToApp('dashboard'); - await PageObjects.dashboard.loadSavedDashboard('Ecom Dashboard'); - await PageObjects.reporting.openPdfReportingPanel(); + before(async () => { + await kibanaServer.uiSettings.replace({ + defaultIndex: 'ff959d40-b880-11e8-a6d9-e546fe2bba5f', + }); + + await esArchiver.load('x-pack/test/functional/es_archives/reporting/ecommerce_76'); + await kibanaServer.importExport.load( + 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce_76.json' + ); + + log.debug('navigate to visualize'); + await PageObjects.common.navigateToApp('visualize'); + log.debug('load saved visualization'); + await PageObjects.visualize.loadSavedVisualization( + '[K7.6-eCommerce] Sold Products per Day', + { navigateToVisualize: false } + ); + log.debug('set time range'); + await PageObjects.timePicker.setAbsoluteRange( + 'Apr 15, 2022 @ 00:00:00.000', + 'May 22, 2022 @ 00:00:00.000' + ); + + log.debug('open png reporting panel'); + await PageObjects.reporting.openPngReportingPanel(); + log.debug('click generate report button'); await PageObjects.reporting.clickGenerateReportButton(); + log.debug('get the report download URL'); const url = await PageObjects.reporting.getReportURL(60000); - const res = await PageObjects.reporting.getResponse(url); + log.debug('download the report'); + const reportData = await PageObjects.reporting.getRawScreenshotReportData(url); + sessionReportPath = await PageObjects.reporting.writeSessionReport( + reportFileName, + 'png', + reportData, + REPORTS_FOLDER + ); + }); + + after(async () => { + await esArchiver.unload('x-pack/test/functional/es_archives/reporting/ecommerce_76'); + await kibanaServer.importExport.unload( + 'x-pack/test/functional/fixtures/kbn_archiver/reporting/ecommerce_76.json' + ); + }); + + it('PNG file matches the baseline image', async function () { + const percentDiff = await reporting.checkIfPngsMatch( + sessionReportPath, + PageObjects.reporting.getBaselineReportPath(reportFileName, 'png', REPORTS_FOLDER), + config.get('screenshots.directory'), + log + ); - expect(res.status).to.equal(200); - expect(res.get('content-type')).to.equal('application/pdf'); + expect(percentDiff).to.be.lessThan(0.09); }); }); }); diff --git a/x-pack/test/functional/apps/visualize/reports/baseline/tsvb.png b/x-pack/test/functional/apps/visualize/reports/baseline/tsvb.png new file mode 100644 index 0000000000000000000000000000000000000000..715e878312cd51bb8fac59a02f6e3cd950d9dc16 GIT binary patch literal 32263 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%0DV!CC1ocX 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 { - this.log.debug(`getRawPdfReportData for ${url}`); + async getRawScreenshotReportData(url: string): Promise { + this.log.debug(`getRawScreenshotReportData for ${url}`); const response = await this.getResponse(url); expect(response.body).to.be.a(Buffer); return response.body as Buffer;