diff --git a/packages/allure-cucumberjs/package.json b/packages/allure-cucumberjs/package.json index f7599a95c..97af4c4f9 100644 --- a/packages/allure-cucumberjs/package.json +++ b/packages/allure-cucumberjs/package.json @@ -24,6 +24,7 @@ "@types/glob": "^7.1.4", "@types/mocha": "^9.0.0", "@types/node": "^16.7.8", + "@types/sinon": "^10.0.11", "@types/verror": "^1.10.3", "allure-mocha": "workspace:packages/allure-mocha", "chai": "^4.3.4", @@ -36,6 +37,7 @@ "path": "^0.12.7", "prettier": "^2.3.2", "rimraf": "^3.0.2", + "sinon": "^14.0.0", "ts-node": "^10.2.1", "typescript": "^4.4.2", "verror": "^1.10.0" diff --git a/packages/allure-cucumberjs/src/CucumberJSAllureReporter.ts b/packages/allure-cucumberjs/src/CucumberJSAllureReporter.ts index b85f8477f..c055afe28 100644 --- a/packages/allure-cucumberjs/src/CucumberJSAllureReporter.ts +++ b/packages/allure-cucumberjs/src/CucumberJSAllureReporter.ts @@ -1,3 +1,5 @@ +import os from "os"; +import process from "process"; import { World as CucumberWorld, Formatter } from "@cucumber/cucumber"; import { IFormatterOptions } from "@cucumber/cucumber/lib/formatter"; import TestCaseHookDefinition from "@cucumber/cucumber/lib/models/test_case_hook_definition"; @@ -40,6 +42,8 @@ export class CucumberJSAllureFormatterConfig { links?: LinkMatcher[]; } +const { ALLURE_HOST_NAME, ALLURE_THREAD_NAME } = process.env; + export class CucumberJSAllureFormatter extends Formatter { public readonly allureInterface: Allure; currentAfter: ExecutableItemWrapper | null = null; @@ -52,6 +56,7 @@ export class CucumberJSAllureFormatter extends Formatter { private readonly labelsMathers: LabelMatcher[]; private readonly linksMatchers: LinkMatcher[]; private stepStack: AllureStep[] = []; + private hostname: string = ALLURE_HOST_NAME || os.hostname(); private readonly documentMap: Map = new Map(); private readonly featureMap: Map = new Map(); private readonly scenarioMap: Map = new Map(); @@ -233,6 +238,8 @@ export class CucumberJSAllureFormatter extends Formatter { this.testCaseTestStepsResults.set(data.id, []); currentTest.name = pickle.name; + currentTest?.addLabel(LabelName.HOST, this.hostname); + currentTest?.addLabel(LabelName.THREAD, ALLURE_THREAD_NAME || process.getuid().toString()); currentTest?.addLabel(LabelName.LANGUAGE, "javascript"); currentTest?.addLabel(LabelName.FRAMEWORK, "cucumberjs"); diff --git a/packages/allure-cucumberjs/test/specs/allure_cucumberjs_test.ts b/packages/allure-cucumberjs/test/specs/allure_cucumberjs_test.ts index 4d0963879..7e8748d54 100644 --- a/packages/allure-cucumberjs/test/specs/allure_cucumberjs_test.ts +++ b/packages/allure-cucumberjs/test/specs/allure_cucumberjs_test.ts @@ -1,5 +1,8 @@ +import os from "os"; +import process from "process"; import { LabelName, Status } from "allure-js-commons"; import { expect } from "chai"; +import sinon from "sinon"; import { ITestFormatterOptions, runFeatures } from "../helpers/formatter_helpers"; import { buildSupportCodeLibrary } from "../helpers/runtime_helpers"; @@ -354,6 +357,9 @@ describe("CucumberJSAllureReporter", () => { }); it("should create labels", async () => { + sinon.stub(os, "hostname").returns("127.0.0.1"); + sinon.stub(process, "getuid").returns(123); + const results = await runFeatures(dataSet.withTags); expect(results.tests).length(1); @@ -361,12 +367,16 @@ describe("CucumberJSAllureReporter", () => { const framework = results.tests[0].labels.find((label) => label.name === LabelName.FRAMEWORK); const feature = results.tests[0].labels.find((label) => label.name === LabelName.FEATURE); const suite = results.tests[0].labels.find((label) => label.name === LabelName.SUITE); + const host = results.tests[0].labels.find((label) => label.name === LabelName.HOST); + const thread = results.tests[0].labels.find((label) => label.name === LabelName.THREAD); const tags = results.tests[0].labels.filter((label) => label.name === LabelName.TAG); expect(language?.value).eq("javascript"); expect(framework?.value).eq("cucumberjs"); expect(feature?.value).eq("a"); expect(suite?.value).eq("b"); + expect(host?.value).eq("127.0.0.1"); + expect(thread?.value).eq("123"); expect(tags).length(2); expect(tags[0].value).eq("@foo"); expect(tags[1].value).eq("@bar"); @@ -390,6 +400,7 @@ describe("CucumberJSAllureReporter", () => { expect(results.tests).length(1); const { links, labels } = results.tests[0]; + expect(links).length(2); expect(links[0].type).eq("issue"); expect(links[0].url).eq("https://example.org/issues/1"); diff --git a/yarn.lock b/yarn.lock index 1f6700a31..b6e968b65 100644 --- a/yarn.lock +++ b/yarn.lock @@ -964,7 +964,7 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.7.0": +"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.3": version: 1.8.3 resolution: "@sinonjs/commons@npm:1.8.3" dependencies: @@ -973,6 +973,15 @@ __metadata: languageName: node linkType: hard +"@sinonjs/fake-timers@npm:>=5, @sinonjs/fake-timers@npm:^9.1.2": + version: 9.1.2 + resolution: "@sinonjs/fake-timers@npm:9.1.2" + dependencies: + "@sinonjs/commons": ^1.7.0 + checksum: 7d3aef54e17c1073101cb64d953157c19d62a40e261a30923fa1ee337b049c5f29cc47b1f0c477880f42b5659848ba9ab897607ac8ea4acd5c30ddcfac57fca6 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^6.0.1": version: 6.0.1 resolution: "@sinonjs/fake-timers@npm:6.0.1" @@ -982,6 +991,24 @@ __metadata: languageName: node linkType: hard +"@sinonjs/samsam@npm:^6.1.1": + version: 6.1.1 + resolution: "@sinonjs/samsam@npm:6.1.1" + dependencies: + "@sinonjs/commons": ^1.6.0 + lodash.get: ^4.4.2 + type-detect: ^4.0.8 + checksum: a09b0914bf573f0da82bd03c64ba413df81a7c173818dc3f0a90c2652240ac835ef583f4d52f0b215e626633c91a4095c255e0669f6ead97241319f34f05e7fc + languageName: node + linkType: hard + +"@sinonjs/text-encoding@npm:^0.7.1": + version: 0.7.1 + resolution: "@sinonjs/text-encoding@npm:0.7.1" + checksum: 130de0bb568c5f8a611ec21d1a4e3f80ab0c5ec333010f49cfc1adc5cba6d8808699c8a587a46b0f0b016a1f4c1389bc96141e773e8460fcbb441875b2e91ba7 + languageName: node + linkType: hard + "@teppeis/multimaps@npm:2.0.0": version: 2.0.0 resolution: "@teppeis/multimaps@npm:2.0.0" @@ -1262,6 +1289,22 @@ __metadata: languageName: node linkType: hard +"@types/sinon@npm:^10.0.11": + version: 10.0.11 + resolution: "@types/sinon@npm:10.0.11" + dependencies: + "@types/sinonjs__fake-timers": "*" + checksum: 196f3e26985dca5dfb593592e4b64463e536c047a9f43aa2b328b16024a3b0e3fb27b7a3f3972c6ef75749f55012737eb6c63a1c2e9782b7fe5cbbd25f75fd62 + languageName: node + linkType: hard + +"@types/sinonjs__fake-timers@npm:*": + version: 8.1.2 + resolution: "@types/sinonjs__fake-timers@npm:8.1.2" + checksum: bbc73a5ab6c0ec974929392f3d6e1e8db4ebad97ec506d785301e1c3d8a4f98a35b1aa95b97035daef02886fd8efd7788a2fa3ced2ec7105988bfd8dce61eedd + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -1554,6 +1597,7 @@ __metadata: "@types/glob": ^7.1.4 "@types/mocha": ^9.0.0 "@types/node": ^16.7.8 + "@types/sinon": ^10.0.11 "@types/verror": ^1.10.3 allure-js-commons: "workspace:*" allure-mocha: "workspace:packages/allure-mocha" @@ -1567,6 +1611,7 @@ __metadata: path: ^0.12.7 prettier: ^2.3.2 rimraf: ^3.0.2 + sinon: ^14.0.0 ts-node: ^10.2.1 typescript: ^4.4.2 verror: ^1.10.0 @@ -2979,6 +3024,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.0.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -4767,6 +4819,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + languageName: node + linkType: hard + "isarray@npm:1.0.0, isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -5494,6 +5553,13 @@ __metadata: languageName: node linkType: hard +"just-extend@npm:^4.0.2": + version: 4.2.1 + resolution: "just-extend@npm:4.2.1" + checksum: ff9fdede240fad313efeeeb68a660b942e5586d99c0058064c78884894a2690dc09bba44c994ad4e077e45d913fef01a9240c14a72c657b53687ac58de53b39c + languageName: node + linkType: hard + "kind-of@npm:^3.0.2, kind-of@npm:^3.0.3, kind-of@npm:^3.2.0": version: 3.2.2 resolution: "kind-of@npm:3.2.2" @@ -5678,6 +5744,13 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -6179,6 +6252,19 @@ __metadata: languageName: node linkType: hard +"nise@npm:^5.1.1": + version: 5.1.1 + resolution: "nise@npm:5.1.1" + dependencies: + "@sinonjs/commons": ^1.8.3 + "@sinonjs/fake-timers": ">=5" + "@sinonjs/text-encoding": ^0.7.1 + just-extend: ^4.0.2 + path-to-regexp: ^1.7.0 + checksum: d8be29e84a014743c9a10f428fac86f294ac5f92bed1f606fe9b551e935f494d8e0ce1af8a12673c6014010ec7f771f2d48aa5c8e116f223eb4f40c5e1ab44b3 + languageName: node + linkType: hard + "no-case@npm:^3.0.4": version: 3.0.4 resolution: "no-case@npm:3.0.4" @@ -6728,6 +6814,15 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:^1.7.0": + version: 1.8.0 + resolution: "path-to-regexp@npm:1.8.0" + dependencies: + isarray: 0.0.1 + checksum: 709f6f083c0552514ef4780cb2e7e4cf49b0cc89a97439f2b7cc69a608982b7690fb5d1720a7473a59806508fc2dae0be751ba49f495ecf89fd8fbc62abccbcd + languageName: node + linkType: hard + "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" @@ -7534,6 +7629,20 @@ __metadata: languageName: node linkType: hard +"sinon@npm:^14.0.0": + version: 14.0.0 + resolution: "sinon@npm:14.0.0" + dependencies: + "@sinonjs/commons": ^1.8.3 + "@sinonjs/fake-timers": ^9.1.2 + "@sinonjs/samsam": ^6.1.1 + diff: ^5.0.0 + nise: ^5.1.1 + supports-color: ^7.2.0 + checksum: b2aeeb0cdc2cd30f904ccbcd60bae4e1b3dcf3aeeface09c1832db0336be0dbaa461f3b91b769bed84f05c83d45d5072a9da7ee14bc7289daeda2a1214fe173c + languageName: node + linkType: hard + "sisteransi@npm:^1.0.5": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -7999,7 +8108,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0": +"supports-color@npm:^7.0.0, supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: @@ -8307,7 +8416,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15