UNPKG

testbeats

Version:

Publish test results to Microsoft Teams, Google Chat, Slack and InfluxDB

85 lines (82 loc) 3.7 kB
const hyperlinks = require('./hyperlinks'); const mentions = require('./mentions'); const rp_analysis = require('./report-portal-analysis'); const rp_history = require('./report-portal-history'); const qc_test_summary = require('./quick-chart-test-summary'); const percy_analysis = require('./percy-analysis'); const metadata = require('./metadata'); const { AIFailureSummaryExtension } = require('./ai-failure-summary.extension'); const { SmartAnalysisExtension } = require('./smart-analysis.extension'); const { CIInfoExtension } = require('./ci-info.extension'); const { CustomExtension } = require('./custom.extension'); const { EXTENSION } = require('../helpers/constants'); const { checkCondition } = require('../helpers/helper'); const logger = require('../utils/logger'); const { ErrorClustersExtension } = require('./error-clusters.extension'); const { FailureAnalysisExtension } = require('./failure-analysis.extension'); const { BrowserstackExtension } = require('./browserstack.extension'); async function run(options) { const { target, result, hook } = options; /** * @type {import("..").IExtension[]} */ const extensions = target.extensions || []; for (let i = 0; i < extensions.length; i++) { const extension = extensions[i]; if (extension.enable === false || extension.enable === 'false') { continue; } const extension_runner = getExtensionRunner(extension, options); const extension_options = Object.assign({}, extension_runner.default_options, extension); if (extension_options.hook === hook) { if (await checkCondition({ condition: extension_options.condition, result, target, extension })) { extension.outputs = {}; options.extension = extension; try { await extension_runner.run(options); } catch (error) { logger.error(`Failed to run extension: ${error.message}`); logger.debug(`Extension details`, extension); logger.debug(`Error: `, error); } } } } } function getExtensionRunner(extension, options) { switch (extension.name) { case EXTENSION.HYPERLINKS: return hyperlinks; case EXTENSION.MENTIONS: return mentions; case EXTENSION.REPORT_PORTAL_ANALYSIS: return rp_analysis; case EXTENSION.REPORT_PORTAL_HISTORY: return rp_history; case EXTENSION.QUICK_CHART_TEST_SUMMARY: return qc_test_summary; case EXTENSION.PERCY_ANALYSIS: return percy_analysis; case EXTENSION.CUSTOM: return new CustomExtension(options.target, extension, options.result, options.payload, options.root_payload); case EXTENSION.METADATA: return metadata; case EXTENSION.CI_INFO: return new CIInfoExtension(options.target, extension, options.result, options.payload, options.root_payload); case EXTENSION.AI_FAILURE_SUMMARY: return new AIFailureSummaryExtension(options.target, extension, options.result, options.payload, options.root_payload); case EXTENSION.FAILURE_ANALYSIS: return new FailureAnalysisExtension(options.target, extension, options.result, options.payload, options.root_payload); case EXTENSION.SMART_ANALYSIS: return new SmartAnalysisExtension(options.target, extension, options.result, options.payload, options.root_payload); case EXTENSION.ERROR_CLUSTERS: return new ErrorClustersExtension(options.target, extension, options.result, options.payload, options.root_payload); case EXTENSION.BROWSERSTACK: return new BrowserstackExtension(options.target, extension, options.result, options.payload, options.root_payload); default: return require(extension.name); } } module.exports = { run }