UNPKG

cucumber-html-report-generator

Version:

Generate beautiful cucumberjs html reports for multiple instances (browsers / devices)

177 lines (157 loc) 4.05 kB
import * as lodash from 'lodash'; import type { Metadata } from './feature'; import { Status } from './status'; export interface ModuleResults { _id?: any; passed: number; failed: number; undefined: number; skipped: number; pending: number; ambiguous: number; total: number; passedPercentage: string; failedPercentage: string; undefinedPercentage: string; skippedPercentage: string; pendingPercentage: string; ambiguousPercentage: string; status: Status; statusIcon?: string; time: string; timeInNanoSeconds: number; } export interface FeatureModuleResults extends ModuleResults { various: number; variousPercentage: string; } export interface OverviewResults { duration: number; durationHHMMSS: string; } export interface ReportResultsOverview extends OverviewResults { _id?: any; result: Result[]; duration: number; durationHHMMSS: string; metadata?: Metadata[]; date: Date; resultStatusesJoined: string; } export interface FeatureResultsOverview extends OverviewResults { result: Result[]; } export interface ScenarioResultsOverview extends OverviewResults { status: Status; isFirstScenarioOutline?: boolean; } export interface StepResultsOverview extends OverviewResults { status: Status; error_message?: string; icon: string; title: string; color: string; } export interface FeatureResults { overview: FeatureResultsOverview; scenarios: ModuleResults; steps: ModuleResults; } export interface ScenarioResults { overview: ScenarioResultsOverview; before: OverviewResults; after: OverviewResults; steps: ModuleResults; } export interface ReportResults { overview: ReportResultsOverview; features: FeatureModuleResults; scenarios: ModuleResults; steps: ModuleResults; } export interface BeforeOrAfterOverviewResults extends OverviewResults { status: Status; } export interface BeforeOrAfterResults { overview: BeforeOrAfterOverviewResults; } export const featureModuleResultsInitializer = (): FeatureModuleResults => lodash.cloneDeep( { ambiguous: 0, ambiguousPercentage: '', failed: 0, failedPercentage: '', passed: 0, passedPercentage: '', pending: 0, pendingPercentage: '', skipped: 0, skippedPercentage: '', status: Status.passed, time: '', timeInNanoSeconds: 0, total: 0, undefined: 0, undefinedPercentage: '', various: 0, variousPercentage: '' } ); export const moduleResultsInitializer = (): ModuleResults => lodash.cloneDeep( { ambiguous: 0, ambiguousPercentage: '', failed: 0, failedPercentage: '', passed: 0, passedPercentage: '', pending: 0, pendingPercentage: '', skipped: 0, skippedPercentage: '', status: Status.passed, time: '', timeInNanoSeconds: 0, total: 0, undefined: 0, undefinedPercentage: '', } ); export const beforeOrAfterOverviewInitializer = (): OverviewResults => lodash.cloneDeep( { duration: 0, durationHHMMSS: '', } ); export const overviewInitializer = (): ScenarioResultsOverview => lodash.cloneDeep( { duration: 0, durationHHMMSS: '', status: Status.passed } ); export const scenarioResultsInitializer = (): ScenarioResults => lodash.cloneDeep( { after: beforeOrAfterOverviewInitializer(), before: beforeOrAfterOverviewInitializer(), overview: overviewInitializer(), steps: moduleResultsInitializer() } ); export const featureResultsInitializer = (): FeatureResults => lodash.cloneDeep( { overview: { duration: 0, durationHHMMSS: '', result: [], }, scenarios: moduleResultsInitializer(), steps: moduleResultsInitializer() } ); export const reportResultsInitializer = (): ReportResults => lodash.cloneDeep( { features: featureModuleResultsInitializer(), overview: { date: new Date(), duration: 0, durationHHMMSS: '', metadata: <Metadata[]>[], metadataTitle: '', result: <Result[]>[], resultStatusesJoined: '' }, scenarios: moduleResultsInitializer(), steps: moduleResultsInitializer() } ); export interface Result { status: Status; icon: string; }