import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import test from 'node:test'; import { createWdioCucumberAdapter } from '@qacg/qk-test-analytics/adapters/wdio-cucumber'; test('the official WDIO/Cucumber adapter writes portable report data and evidence', async () => { const directory = fs.mkdtempSync(path.join(os.tmpdir(), 'qkforce-qkta-')); try { const reportsFile = path.join(directory, 'media-bucket', 'reports', 'current.json'); const adapter = createWdioCucumberAdapter({ capture: 'always', filePath: reportsFile, evidenceRoot: path.join(directory, 'media-bucket'), runId: 'run-contract', projectName: 'qkforce-framework-cwq' }); const scenario = { id: 'scenario-1', name: 'records analytics', tags: [{ name: '@smoke' }] }; const step = { id: 'step-1', keyword: 'Given ', text: 'a configured target' }; await adapter.hooks.before({ browserName: 'chrome' }, ['test/features/example.feature'], { capabilities: { browserName: 'chrome' }, takeScreenshot: async () => Buffer.from('qkforce').toString('base64') }); await adapter.hooks.beforeFeature('test/features/example.feature', { name: 'Analytics' }); await adapter.hooks.beforeScenario({ pickle: scenario }); await adapter.hooks.beforeStep(step, scenario); await adapter.hooks.afterStep(step, scenario, { passed: true, duration: 12 }); await adapter.hooks.afterScenario({ pickle: scenario }, { passed: true, duration: 25 }); await adapter.hooks.afterFeature('test/features/example.feature', { name: 'Analytics' }); await adapter.hooks.after(0); const report = JSON.parse(fs.readFileSync(reportsFile, 'utf8')); const execution = report['run-contract']; assert.equal(execution.execution_summary.project_name, 'qkforce-framework-cwq'); assert.equal(execution.Analytics['records analytics'].test_summary.status, 'PASSED'); assert.equal(execution.Analytics['records analytics']['a configured target'].status, 'PASSED'); assert.ok(fs.readdirSync(path.join(directory, 'media-bucket', 'screenshots')).some(name => name.endsWith('.png'))); } finally { fs.rmSync(directory, { recursive: true, force: true }); } });