import path from 'node:path' import { describe, it, expect, beforeEach, vi, beforeAll, afterAll, afterEach } from 'vitest' import type { Label, Parameter, Link, StepResult } from 'allure-js-commons' import { Status, LabelName, LinkType, Stage } from 'allure-js-commons' import { temporaryDirectory } from 'tempy' /** * this is not a real package and only used to utilize helper * methods without having to ignore them for test coverage */ import { clean, getResults, mapBy } from './helpers/wdio-allure-helper' import AllureReporter from '../src/reporter.js' import { linkPlaceholder } from '../src/constants.js' import { runnerEnd, runnerStart } from './__fixtures__/runner.js' import * as cucumberHelper from './__fixtures__/cucumber.js' import * as attachmentHelper from './__fixtures__/attachment.js' import { commandStart, commandEnd } from './__fixtures__/command.js' vi.mock('@wdio/reporter', () => import(path.join(process.cwd(), '__mocks__', '@wdio/reporter'))) let processOn: any beforeAll(() => { processOn = process.on.bind(process) process.on = vi.fn() }) afterAll(() => { process.on = processOn }) describe('reporter option "useCucumberStepReporter" set to true', () => { let outputDir: any let reporter: any let allureResult: Record let allureContainer: Record describe('reporter option "disableWebdriverStepsReporting" set to true', () => { describe('Passing tests', () => { outputDir = temporaryDirectory() beforeAll(() => { const reporter = new AllureReporter({ outputDir, useCucumberStepReporter: true, disableWebdriverStepsReporting: true, issueLinkTemplate: `https://github.com/webdriverio/webdriverio/issues/${linkPlaceholder}`, tmsLinkTemplate: `https://webdriver.io/${linkPlaceholder}` }) reporter.onRunnerStart(runnerStart()) reporter.onSuiteStart(cucumberHelper.featureStart()) reporter.onSuiteStart(cucumberHelper.scenarioStart()) reporter.onHookStart(cucumberHelper.hookStart()) reporter.onHookEnd(cucumberHelper.hookEnd()) reporter.onTestStart(cucumberHelper.testStart()) reporter.onBeforeCommand(commandStart()) reporter.onAfterCommand(commandEnd()) reporter.onTestPass() reporter.onHookStart(cucumberHelper.hookStart()) reporter.addAttachment(attachmentHelper.xmlAttachment()) reporter.onHookEnd(cucumberHelper.hookEnd()) const suiteResults: any = { tests: [cucumberHelper.testPass()], hooks: new Array(2).fill(cucumberHelper.hookEnd()) } reporter.onSuiteEnd(cucumberHelper.scenarioEnd(suiteResults)) reporter.onSuiteEnd(cucumberHelper.featureEnd(suiteResults)) reporter.onRunnerEnd(runnerEnd()) const { results, containers } = getResults(outputDir) expect(results).toHaveLength(1) expect( results[0].steps.find( (step: StepResult) => step.attachments.length, ).attachments, ).toHaveLength(1) expect(containers).toHaveLength(1) allureResult = results[0] allureContainer = containers[0] }) afterAll(() => { clean(outputDir) }) it('should report one suite', () => { expect(allureContainer.name).toEqual('MyFeature') }) it('should detect passed test case', () => { expect(allureResult.name).toEqual('MyScenario') expect(allureResult.status).toEqual(Status.PASSED) }) it('should detect analytics labels in test case', () => { const labels = mapBy