From 98fbb71cf351486a55969f2687161046146ef7c8 Mon Sep 17 00:00:00 2001 From: Priyanka Gadhiya Date: Wed, 30 Apr 2025 13:53:12 +0530 Subject: [PATCH 1/5] SDK-2738 Added changes to skip test if skip is called --- .../src/insights-handler.ts | 23 ++++++++++++++-- .../wdio-browserstack-service/src/reporter.ts | 26 +++++++++++++++++-- .../wdio-browserstack-service/src/util.ts | 13 ++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/packages/wdio-browserstack-service/src/insights-handler.ts b/packages/wdio-browserstack-service/src/insights-handler.ts index e4a2c122f70..827857d9b78 100644 --- a/packages/wdio-browserstack-service/src/insights-handler.ts +++ b/packages/wdio-browserstack-service/src/insights-handler.ts @@ -22,7 +22,8 @@ import { isUndefined, o11yClassErrorHandler, removeAnsiColors, - getObservabilityProduct + getObservabilityProduct, + generateHashCodeFromFields } from './util.js' import type { TestData, @@ -395,7 +396,20 @@ class _InsightsHandler { finishedAt: (new Date()).toISOString() } this.flushCBTDataQueue() - this.listener.testFinished(this.getRunData(test, 'TestRunFinished', result)) + var testData = this.getRunData(test, 'TestRunFinished', result) + this.listener.testFinished(testData) + const testFinishHashCode = generateHashCodeFromFields( + [testData.integrations?.browserstack?.browser ?? '', + testData.integrations?.browserstack?.browser_version ?? '', + testData.integrations?.browserstack?.platform ?? '', + testData.integrations?.browserstack?.session_id ?? '', + testData.integrations?.capabilities ?? {}, + testData.file_name ?? '', + testData.scopes ?? [], + testData.name ?? '' + ] + ) + TestReporter.hashCodeToHandleTestSkip[testFinishHashCode] = testData.uuid ?? '' } /** @@ -660,6 +674,11 @@ class _InsightsHandler { } if ((eventType === 'TestRunFinished' || eventType === 'HookRunFinished') && results) { + testData.integrations = {} + if (this._browser && this._platformMeta) { + const provider = getCloudProvider(this._browser) + testData.integrations[provider] = this.getIntegrationsObject() + } const { error, passed } = results if (!passed) { testData.result = (error && error.message && error.message.includes('sync skip; aborting execution')) ? 'ignore' : 'failed' diff --git a/packages/wdio-browserstack-service/src/reporter.ts b/packages/wdio-browserstack-service/src/reporter.ts index ad99aae993d..96c8c1ce8b7 100644 --- a/packages/wdio-browserstack-service/src/reporter.ts +++ b/packages/wdio-browserstack-service/src/reporter.ts @@ -15,7 +15,9 @@ import { getGitMetaData, removeAnsiColors, getHookType, - getPlatformVersion + getPlatformVersion, + isObjectEmpty, + generateHashCodeFromFields } from './util.js' import { BStackLogger } from './bstackLogger.js' import type { Capabilities } from '@wdio/types' @@ -35,6 +37,8 @@ class _TestReporter extends WDIOReporter { public static currentTest: CurrentRunInfo = {} private _userCaps?: Capabilities.ResolvedTestrunnerCapabilities = {} private listener = Listener.getInstance() + public static hashCodeToHandleTestSkip: Record = {} + async onRunnerStart (runnerStats: RunnerStats) { this._capabilities = runnerStats.capabilities as WebdriverIO.Capabilities @@ -213,7 +217,25 @@ class _TestReporter extends WDIOReporter { testStats.start ||= new Date() testStats.end ||= new Date() - this.listener.testFinished(await this.getRunData(testStats, 'TestRunSkipped')) + var testData = await this.getRunData(testStats, 'TestRunSkipped') + const testFinishHashCode = generateHashCodeFromFields( + [testData.integrations?.browserstack?.browser ?? '', + testData.integrations?.browserstack?.browser_version ?? '', + testData.integrations?.browserstack?.platform ?? '', + testData.integrations?.browserstack?.session_id ?? '', + testData.integrations?.capabilities ?? {}, + testData.file_name ?? '', + testData.scopes ?? [], + testData.name ?? '' + ] + ) + if (_TestReporter.hashCodeToHandleTestSkip != null && !isObjectEmpty(_TestReporter.hashCodeToHandleTestSkip) && testFinishHashCode in _TestReporter.hashCodeToHandleTestSkip) { + if (_TestReporter.hashCodeToHandleTestSkip[testFinishHashCode] != '') { + testData.uuid = _TestReporter.hashCodeToHandleTestSkip[testFinishHashCode] + } + } + + this.listener.testFinished(testData) } async getRunData(testStats: TestStats | HookStats, eventType: string) { diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index f7e1d4b6725..fd1a05cc193 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1,4 +1,5 @@ import { hostname, platform, type, version, arch } from 'node:os' +import crypto from 'crypto'; import fs from 'node:fs' import zlib from 'node:zlib' import { format, promisify } from 'node:util' @@ -1621,3 +1622,15 @@ export async function executeAccessibilityScript( })(${arg ? JSON.stringify(arg) : ''})` ) } + +export function generateHashCodeFromFields(fields: Array) { + const serialize = (value: {}) => { + if (value && typeof value === 'object') { + return JSON.stringify(value, Object.keys(value).sort()); + } + return String(value); + }; + + const serialized = fields.map(serialize).join('|'); + return crypto.createHash('sha256').update(serialized).digest('hex'); +} From 796cd3e5e8d3c7f49207941aa093337390a013ef Mon Sep 17 00:00:00 2001 From: Priyanka Gadhiya Date: Fri, 9 May 2025 10:15:36 +0530 Subject: [PATCH 2/5] SDK-2738 Added lint fixes --- .../src/insights-handler.ts | 17 +++++++++-------- .../wdio-browserstack-service/src/reporter.ts | 3 +-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/wdio-browserstack-service/src/insights-handler.ts b/packages/wdio-browserstack-service/src/insights-handler.ts index 827857d9b78..10036647c28 100644 --- a/packages/wdio-browserstack-service/src/insights-handler.ts +++ b/packages/wdio-browserstack-service/src/insights-handler.ts @@ -396,16 +396,17 @@ class _InsightsHandler { finishedAt: (new Date()).toISOString() } this.flushCBTDataQueue() - var testData = this.getRunData(test, 'TestRunFinished', result) + const testData = this.getRunData(test, 'TestRunFinished', result) this.listener.testFinished(testData) const testFinishHashCode = generateHashCodeFromFields( - [testData.integrations?.browserstack?.browser ?? '', - testData.integrations?.browserstack?.browser_version ?? '', - testData.integrations?.browserstack?.platform ?? '', - testData.integrations?.browserstack?.session_id ?? '', - testData.integrations?.capabilities ?? {}, - testData.file_name ?? '', - testData.scopes ?? [], + [ + testData.integrations?.browserstack?.browser ?? '', + testData.integrations?.browserstack?.browser_version ?? '', + testData.integrations?.browserstack?.platform ?? '', + testData.integrations?.browserstack?.session_id ?? '', + testData.integrations?.capabilities ?? {}, + testData.file_name ?? '', + testData.scopes ?? [], testData.name ?? '' ] ) diff --git a/packages/wdio-browserstack-service/src/reporter.ts b/packages/wdio-browserstack-service/src/reporter.ts index 96c8c1ce8b7..98481acf5da 100644 --- a/packages/wdio-browserstack-service/src/reporter.ts +++ b/packages/wdio-browserstack-service/src/reporter.ts @@ -39,7 +39,6 @@ class _TestReporter extends WDIOReporter { private listener = Listener.getInstance() public static hashCodeToHandleTestSkip: Record = {} - async onRunnerStart (runnerStats: RunnerStats) { this._capabilities = runnerStats.capabilities as WebdriverIO.Capabilities this._userCaps = this.getUserCaps(runnerStats) @@ -217,7 +216,7 @@ class _TestReporter extends WDIOReporter { testStats.start ||= new Date() testStats.end ||= new Date() - var testData = await this.getRunData(testStats, 'TestRunSkipped') + const testData = await this.getRunData(testStats, 'TestRunSkipped') const testFinishHashCode = generateHashCodeFromFields( [testData.integrations?.browserstack?.browser ?? '', testData.integrations?.browserstack?.browser_version ?? '', From 42b87e96c719ca3e26e2589267499617eb8d542b Mon Sep 17 00:00:00 2001 From: Priyanka Gadhiya Date: Fri, 9 May 2025 10:27:31 +0530 Subject: [PATCH 3/5] Added lint fixes --- .../wdio-browserstack-service/src/reporter.ts | 19 ++++++++++--------- .../wdio-browserstack-service/src/util.ts | 10 +++++----- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/wdio-browserstack-service/src/reporter.ts b/packages/wdio-browserstack-service/src/reporter.ts index 98481acf5da..745fda6c02e 100644 --- a/packages/wdio-browserstack-service/src/reporter.ts +++ b/packages/wdio-browserstack-service/src/reporter.ts @@ -218,18 +218,19 @@ class _TestReporter extends WDIOReporter { testStats.end ||= new Date() const testData = await this.getRunData(testStats, 'TestRunSkipped') const testFinishHashCode = generateHashCodeFromFields( - [testData.integrations?.browserstack?.browser ?? '', - testData.integrations?.browserstack?.browser_version ?? '', - testData.integrations?.browserstack?.platform ?? '', - testData.integrations?.browserstack?.session_id ?? '', - testData.integrations?.capabilities ?? {}, - testData.file_name ?? '', - testData.scopes ?? [], + [ + testData.integrations?.browserstack?.browser ?? '', + testData.integrations?.browserstack?.browser_version ?? '', + testData.integrations?.browserstack?.platform ?? '', + testData.integrations?.browserstack?.session_id ?? '', + testData.integrations?.capabilities ?? {}, + testData.file_name ?? '', + testData.scopes ?? [], testData.name ?? '' ] ) - if (_TestReporter.hashCodeToHandleTestSkip != null && !isObjectEmpty(_TestReporter.hashCodeToHandleTestSkip) && testFinishHashCode in _TestReporter.hashCodeToHandleTestSkip) { - if (_TestReporter.hashCodeToHandleTestSkip[testFinishHashCode] != '') { + if (_TestReporter.hashCodeToHandleTestSkip !== null && !isObjectEmpty(_TestReporter.hashCodeToHandleTestSkip) && testFinishHashCode in _TestReporter.hashCodeToHandleTestSkip) { + if (_TestReporter.hashCodeToHandleTestSkip[testFinishHashCode] !== '') { testData.uuid = _TestReporter.hashCodeToHandleTestSkip[testFinishHashCode] } } diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index fd1a05cc193..c5f8b1a2696 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1,5 +1,5 @@ import { hostname, platform, type, version, arch } from 'node:os' -import crypto from 'crypto'; +import crypto from 'crypto' import fs from 'node:fs' import zlib from 'node:zlib' import { format, promisify } from 'node:util' @@ -1626,11 +1626,11 @@ export async function executeAccessibilityScript( export function generateHashCodeFromFields(fields: Array) { const serialize = (value: {}) => { if (value && typeof value === 'object') { - return JSON.stringify(value, Object.keys(value).sort()); + return JSON.stringify(value, Object.keys(value).sort()) } - return String(value); + return String(value) }; - const serialized = fields.map(serialize).join('|'); - return crypto.createHash('sha256').update(serialized).digest('hex'); + const serialized = fields.map(serialize).join('|') + return crypto.createHash('sha256').update(serialized).digest('hex') } From 259a071dd04917880dd2c54563f9e489bd001eaa Mon Sep 17 00:00:00 2001 From: Priyanka Gadhiya Date: Fri, 9 May 2025 10:30:19 +0530 Subject: [PATCH 4/5] SDK-2738 Added lint fixes --- packages/wdio-browserstack-service/src/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index c5f8b1a2696..63a3e20e19b 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1629,7 +1629,7 @@ export function generateHashCodeFromFields(fields: Array) { return JSON.stringify(value, Object.keys(value).sort()) } return String(value) - }; + } const serialized = fields.map(serialize).join('|') return crypto.createHash('sha256').update(serialized).digest('hex') From 8f14b48385ba22c2559cbdc65011426ceb372bad Mon Sep 17 00:00:00 2001 From: Priyanka Gadhiya Date: Fri, 9 May 2025 10:41:58 +0530 Subject: [PATCH 5/5] crypto import linting fix --- packages/wdio-browserstack-service/src/util.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index 63a3e20e19b..fea0465e301 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1,5 +1,5 @@ import { hostname, platform, type, version, arch } from 'node:os' -import crypto from 'crypto' +import crypto from 'node:crypto' import fs from 'node:fs' import zlib from 'node:zlib' import { format, promisify } from 'node:util'