Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add host and thread labels for cucumberjs (fixes #454) #459

Merged
merged 10 commits into from
Aug 4, 2022
2 changes: 2 additions & 0 deletions packages/allure-cucumberjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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"
Expand Down
7 changes: 7 additions & 0 deletions packages/allure-cucumberjs/src/CucumberJSAllureReporter.ts
Original file line number Diff line number Diff line change
@@ -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";
Expand Down Expand Up @@ -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;
Expand All @@ -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<string, messages.GherkinDocument> = new Map();
private readonly featureMap: Map<string, messages.Feature> = new Map();
private readonly scenarioMap: Map<string, messages.Scenario> = new Map();
Expand Down Expand Up @@ -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");

Expand Down
11 changes: 11 additions & 0 deletions packages/allure-cucumberjs/test/specs/allure_cucumberjs_test.ts
Original file line number Diff line number Diff line change
@@ -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";

Expand Down Expand Up @@ -354,19 +357,26 @@ 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);

const language = results.tests[0].labels.find((label) => label.name === LabelName.LANGUAGE);
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");
Expand All @@ -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");
Expand Down
115 changes: 112 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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"
Expand All @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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
Expand Down