From c925ac9edde3b2835928fdae5692eb1073ca0345 Mon Sep 17 00:00:00 2001 From: amaanbs Date: Wed, 6 Mar 2024 19:15:12 +0530 Subject: [PATCH 1/7] add platform version --- .../src/insights-handler.ts | 9 ++++-- .../wdio-browserstack-service/src/reporter.ts | 10 ++++++- .../wdio-browserstack-service/src/service.ts | 9 +++++- .../wdio-browserstack-service/src/types.ts | 1 + .../wdio-browserstack-service/src/util.ts | 14 ++++++++++ .../tests/insight-handler.test.ts | 10 ++++++- .../tests/reporter.test.ts | 28 +++++++++++++++++++ 7 files changed, 76 insertions(+), 5 deletions(-) diff --git a/packages/wdio-browserstack-service/src/insights-handler.ts b/packages/wdio-browserstack-service/src/insights-handler.ts index 5603199f73c..41a481aba97 100644 --- a/packages/wdio-browserstack-service/src/insights-handler.ts +++ b/packages/wdio-browserstack-service/src/insights-handler.ts @@ -14,6 +14,7 @@ import { getCloudProvider, getGitMetaData, getHookType, + getPlatformVersion, getScenarioExamples, getUniqueIdentifier, getUniqueIdentifierForCucumber, @@ -47,8 +48,9 @@ class _InsightsHandler { scenariosStarted: false, steps: [] } + private _userCaps?: Capabilities.RemoteCapability = {} - constructor (private _browser: Browser<'async'> | MultiRemoteBrowser<'async'>, browserCaps?: Capabilities.Capabilities, isAppAutomate?: boolean, sessionId?: string, private _framework?: string) { + constructor (private _browser: Browser<'async'> | MultiRemoteBrowser<'async'>, browserCaps?: Capabilities.Capabilities, isAppAutomate?: boolean, sessionId?: string, private _framework?: string, _userCaps?: Capabilities.RemoteCapability) { this._requestQueueHandler.start() this._platformMeta = { @@ -60,6 +62,8 @@ class _InsightsHandler { product: isAppAutomate ? 'app-automate' : 'automate' } + this._userCaps = _userCaps + this.registerListeners() } @@ -858,7 +862,8 @@ class _InsightsHandler { browser: browserCaps?.browserName, browser_version: browserCaps?.browserVersion, platform: browserCaps?.platformName, - product: this._platformMeta?.product + product: this._platformMeta?.product, + platform_version: getPlatformVersion(this._userCaps as Capabilities.Capabilities) } } diff --git a/packages/wdio-browserstack-service/src/reporter.ts b/packages/wdio-browserstack-service/src/reporter.ts index 575883d1aea..2acfef76b68 100644 --- a/packages/wdio-browserstack-service/src/reporter.ts +++ b/packages/wdio-browserstack-service/src/reporter.ts @@ -15,7 +15,8 @@ import { o11yClassErrorHandler, removeAnsiColors, getHookType, - pushDataToQueue + pushDataToQueue, + getPlatformVersion } from './util' import RequestQueueHandler from './request-handler' @@ -34,9 +35,11 @@ class _TestReporter extends WDIOReporter { private _gitConfigured: boolean = false private _currentHook: CurrentRunInfo = {} private _currentTest: CurrentRunInfo = {} + private _userCaps?: Capabilities.RemoteCapability = {} async onRunnerStart (runnerStats: RunnerStats) { this._capabilities = runnerStats.capabilities as Capabilities.Capabilities + this._userCaps = this.getUserCaps(runnerStats) this._config = runnerStats.config as BrowserstackConfig & Options.Testrunner this._sessionId = runnerStats.sessionId if (typeof this._config.testObservability !== 'undefined') this._observability = this._config.testObservability @@ -52,6 +55,10 @@ class _TestReporter extends WDIOReporter { process.on(`bs:addLog:${process.pid}`, this.appendTestItemLog.bind(this)) } + private getUserCaps(runnerStats: RunnerStats) { + return runnerStats.instanceOptions[runnerStats.sessionId].capabilities + } + public async appendTestItemLog(stdLog: StdLog) { if (this._currentHook.uuid && !this._currentHook.finished) { stdLog.hook_run_uuid = this._currentHook.uuid @@ -239,6 +246,7 @@ class _TestReporter extends WDIOReporter { browser: this._capabilities?.browserName, browser_version: this._capabilities?.browserVersion, platform: this._capabilities?.platformName, + platform_version: getPlatformVersion(this._userCaps as Capabilities.Capabilities) } } diff --git a/packages/wdio-browserstack-service/src/service.ts b/packages/wdio-browserstack-service/src/service.ts index f7303b3bdf5..381b9e4ff7a 100644 --- a/packages/wdio-browserstack-service/src/service.ts +++ b/packages/wdio-browserstack-service/src/service.ts @@ -135,7 +135,14 @@ export default class BrowserstackService implements Services.ServiceInstance { try { if (this._observability) { patchConsoleLogs() - this._insightsHandler = new InsightsHandler(this._browser, this._browser.capabilities as Capabilities.Capabilities, this._isAppAutomate(), this._browser.sessionId as string, this._config.framework) + this._insightsHandler = new InsightsHandler( + this._browser, + this._browser.capabilities as Capabilities.Capabilities, + this._isAppAutomate(), + this._browser.sessionId as string, + this._config.framework, + this._caps + ) await this._insightsHandler.before() } diff --git a/packages/wdio-browserstack-service/src/types.ts b/packages/wdio-browserstack-service/src/types.ts index 7974c039f65..65613058082 100644 --- a/packages/wdio-browserstack-service/src/types.ts +++ b/packages/wdio-browserstack-service/src/types.ts @@ -277,6 +277,7 @@ interface IntegrationObject { browser_version?: string platform?: string product?: string + platform_version?: string } interface TestCodeBody { diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index 1b6d5bd3ddd..e43441a6d56 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1133,3 +1133,17 @@ export const ObjectsAreEqual = (object1: any, object2: any) => { } return true } + +export function getPlatformVersion(caps: Capabilities.Capabilities) { + const bstackOptions = (caps)?.['bstack:options'] + const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version', 'appium:platformVersion'] + + for (const key of keys) { + if (bstackOptions && bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) { + return String(bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) + } else if (caps[key as keyof Capabilities.Capabilities]) { + return String(caps[key as keyof Capabilities.Capabilities]) + } + } + return undefined +} diff --git a/packages/wdio-browserstack-service/tests/insight-handler.test.ts b/packages/wdio-browserstack-service/tests/insight-handler.test.ts index 96952c3e91a..70e974e08f4 100644 --- a/packages/wdio-browserstack-service/tests/insight-handler.test.ts +++ b/packages/wdio-browserstack-service/tests/insight-handler.test.ts @@ -739,7 +739,9 @@ describe('afterHook', () => { describe('getIntegrationsObject', () => { let insightsHandler: InsightsHandler + let getPlatformVersionSpy beforeAll(() => { + getPlatformVersionSpy = jest.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return "some version" }) insightsHandler = new InsightsHandler(browser, {} as any, false, 'sessionId', 'framework') insightsHandler['_platformMeta'] = { caps: {}, @@ -752,7 +754,9 @@ describe('getIntegrationsObject', () => { }) it('return hash', () => { - expect(insightsHandler['getIntegrationsObject']()).toBeInstanceOf(Object) + const integrationsObject = insightsHandler['getIntegrationsObject']() + expect(integrationsObject).toBeInstanceOf(Object) + expect(integrationsObject.platform_version).toEqual('some version') }) it('should fetch latest details', () => { @@ -762,6 +766,10 @@ describe('getIntegrationsObject', () => { expect(integrationsObject.session_id).toEqual('session-new') expect(integrationsObject.capabilities.os).toEqual('Windows') }) + + afterAll(() => { + getPlatformVersionSpy.mockClear() + }) }) describe('browserCommand', () => { diff --git a/packages/wdio-browserstack-service/tests/reporter.test.ts b/packages/wdio-browserstack-service/tests/reporter.test.ts index 3735050dafb..5960353636d 100644 --- a/packages/wdio-browserstack-service/tests/reporter.test.ts +++ b/packages/wdio-browserstack-service/tests/reporter.test.ts @@ -134,6 +134,16 @@ describe('test-reporter', () => { const getCloudProviderSpy = jest.spyOn(utils, 'getCloudProvider').mockReturnValue('browserstack') jest.spyOn(requestQueueHandler, 'add').mockImplementation(() => { return { proceed: true, data: [{}], url: '' } }) + let getPlatformVersionSpy + + beforeAll(() => { + getPlatformVersionSpy = jest.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' }) + }) + + afterAll(() => { + getPlatformVersionSpy.mockClear() + }) + beforeEach(() => { uploadEventDataSpy.mockClear() getCloudProviderSpy.mockClear() @@ -223,6 +233,15 @@ describe('test-reporter', () => { jest.spyOn(utils, 'getCloudProvider').mockReturnValue('browserstack') jest.spyOn(requestQueueHandler, 'add').mockImplementation(() => { return { proceed: true, data: [{}], url: '' } }) let testStartStats = { ...testStats } + let getPlatformVersionSpy + + beforeAll(() => { + getPlatformVersionSpy = jest.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' }) + }) + + afterAll(() => { + getPlatformVersionSpy.mockClear() + }) beforeEach(() => { reporter = new TestReporter({}) @@ -269,6 +288,15 @@ describe('test-reporter', () => { jest.spyOn(utils, 'getCloudProvider').mockReturnValue('browserstack') jest.spyOn(requestQueueHandler, 'add').mockImplementation(() => { return { proceed: true, data: [{}], url: '' } }) let testEndStats = { ...testStats } + let getPlatformVersionSpy + + beforeAll(() => { + getPlatformVersionSpy = jest.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' }) + }) + + afterAll(() => { + getPlatformVersionSpy.mockClear() + }) beforeEach(() => { reporter = new TestReporter({}) From 82447f4df1c844b6f7ff8a87fc2449dce69e72c5 Mon Sep 17 00:00:00 2001 From: amaanbs Date: Wed, 6 Mar 2024 19:16:56 +0530 Subject: [PATCH 2/7] ts lint fixes --- .../wdio-browserstack-service/src/util.ts | 22 +++++++++---------- .../tests/insight-handler.test.ts | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index e43441a6d56..022baae4ed2 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1135,15 +1135,15 @@ export const ObjectsAreEqual = (object1: any, object2: any) => { } export function getPlatformVersion(caps: Capabilities.Capabilities) { - const bstackOptions = (caps)?.['bstack:options'] - const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version', 'appium:platformVersion'] - - for (const key of keys) { - if (bstackOptions && bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) { - return String(bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) - } else if (caps[key as keyof Capabilities.Capabilities]) { - return String(caps[key as keyof Capabilities.Capabilities]) - } - } - return undefined + const bstackOptions = (caps)?.['bstack:options'] + const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version', 'appium:platformVersion'] + + for (const key of keys) { + if (bstackOptions && bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) { + return String(bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) + } else if (caps[key as keyof Capabilities.Capabilities]) { + return String(caps[key as keyof Capabilities.Capabilities]) + } + } + return undefined } diff --git a/packages/wdio-browserstack-service/tests/insight-handler.test.ts b/packages/wdio-browserstack-service/tests/insight-handler.test.ts index 70e974e08f4..ab93d038bd8 100644 --- a/packages/wdio-browserstack-service/tests/insight-handler.test.ts +++ b/packages/wdio-browserstack-service/tests/insight-handler.test.ts @@ -741,7 +741,7 @@ describe('getIntegrationsObject', () => { let insightsHandler: InsightsHandler let getPlatformVersionSpy beforeAll(() => { - getPlatformVersionSpy = jest.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return "some version" }) + getPlatformVersionSpy = jest.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' }) insightsHandler = new InsightsHandler(browser, {} as any, false, 'sessionId', 'framework') insightsHandler['_platformMeta'] = { caps: {}, From 2ff5c36d4ba4a9bbaf53268e8b662ead047a7172 Mon Sep 17 00:00:00 2001 From: amaanbs Date: Wed, 6 Mar 2024 21:01:47 +0530 Subject: [PATCH 3/7] fixes --- packages/wdio-browserstack-service/src/reporter.ts | 4 ++-- packages/wdio-browserstack-service/src/util.ts | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/wdio-browserstack-service/src/reporter.ts b/packages/wdio-browserstack-service/src/reporter.ts index 2acfef76b68..6bfef1cbb12 100644 --- a/packages/wdio-browserstack-service/src/reporter.ts +++ b/packages/wdio-browserstack-service/src/reporter.ts @@ -39,7 +39,7 @@ class _TestReporter extends WDIOReporter { async onRunnerStart (runnerStats: RunnerStats) { this._capabilities = runnerStats.capabilities as Capabilities.Capabilities - this._userCaps = this.getUserCaps(runnerStats) + this._userCaps = this.getUserCaps(runnerStats) as Capabilities.RemoteCapability | undefined this._config = runnerStats.config as BrowserstackConfig & Options.Testrunner this._sessionId = runnerStats.sessionId if (typeof this._config.testObservability !== 'undefined') this._observability = this._config.testObservability @@ -56,7 +56,7 @@ class _TestReporter extends WDIOReporter { } private getUserCaps(runnerStats: RunnerStats) { - return runnerStats.instanceOptions[runnerStats.sessionId].capabilities + return runnerStats.instanceOptions[runnerStats.sessionId]?.capabilities } public async appendTestItemLog(stdLog: StdLog) { diff --git a/packages/wdio-browserstack-service/src/util.ts b/packages/wdio-browserstack-service/src/util.ts index 022baae4ed2..d64494a5e0c 100644 --- a/packages/wdio-browserstack-service/src/util.ts +++ b/packages/wdio-browserstack-service/src/util.ts @@ -1134,7 +1134,10 @@ export const ObjectsAreEqual = (object1: any, object2: any) => { return true } -export function getPlatformVersion(caps: Capabilities.Capabilities) { +export const getPlatformVersion = o11yErrorHandler(function getPlatformVersion(caps: Capabilities.Capabilities) { + if (!caps) { + return undefined + } const bstackOptions = (caps)?.['bstack:options'] const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version', 'appium:platformVersion'] @@ -1146,4 +1149,4 @@ export function getPlatformVersion(caps: Capabilities.Capabilities) { } } return undefined -} +}) From 5f9a5c4289d3e47dbfed8431adabd12f27e75a0b Mon Sep 17 00:00:00 2001 From: amaanbs Date: Thu, 7 Mar 2024 04:08:52 +0530 Subject: [PATCH 4/7] add tests --- .../tests/util.test.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index 752c9e89d61..a5a7835aa08 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -2,6 +2,7 @@ import gitRepoInfo from 'git-repo-info' import got from 'got' import path from 'path' import logger from '@wdio/logger' +import type { Capabilities } from '@wdio/types' import * as utils from '../src/util' import type { Browser, MultiRemoteBrowser } from 'webdriverio' @@ -1410,3 +1411,27 @@ describe('ObjectsAreEqual', function () { expect(utils.ObjectsAreEqual({ 'a': true }, { 'b': false })).toEqual(false) }) }) + +describe('getPlatformVersion', () => { + it('should return undefined if no capabilities are provided', () => { + expect(utils.getPlatformVersion(null)).toBeUndefined(); + }); + + it('should return platform version from bstack:options if available', () => { + const caps: Capabilities.Capabilities = { + 'bstack:options': { + osVersion: '10.0' + }, + }; + + expect(utils.getPlatformVersion(caps)).toBe('10.0'); + }); + + it('should return undefined if no platform version is found', () => { + const caps: Capabilities.Capabilities = { + browserName: 'chrome', + }; + + expect(utils.getPlatformVersion(caps)).toBeUndefined(); + }); +}); From 626ed797c4d6845fd6dd9c76d5e7df396c0a53d2 Mon Sep 17 00:00:00 2001 From: amaanbs Date: Thu, 7 Mar 2024 04:09:42 +0530 Subject: [PATCH 5/7] ts-lint fixes --- .../tests/util.test.ts | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index a5a7835aa08..c7b9bbf7dd2 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1413,25 +1413,25 @@ describe('ObjectsAreEqual', function () { }) describe('getPlatformVersion', () => { - it('should return undefined if no capabilities are provided', () => { - expect(utils.getPlatformVersion(null)).toBeUndefined(); - }); - - it('should return platform version from bstack:options if available', () => { - const caps: Capabilities.Capabilities = { - 'bstack:options': { - osVersion: '10.0' - }, - }; - - expect(utils.getPlatformVersion(caps)).toBe('10.0'); - }); - - it('should return undefined if no platform version is found', () => { - const caps: Capabilities.Capabilities = { - browserName: 'chrome', - }; - - expect(utils.getPlatformVersion(caps)).toBeUndefined(); - }); + it('should return undefined if no capabilities are provided', () => { + expect(utils.getPlatformVersion(null)).toBeUndefined(); + }); + + it('should return platform version from bstack:options if available', () => { + const caps: Capabilities.Capabilities = { + 'bstack:options': { + osVersion: '10.0' + }, + }; + + expect(utils.getPlatformVersion(caps)).toBe('10.0'); + }); + + it('should return undefined if no platform version is found', () => { + const caps: Capabilities.Capabilities = { + browserName: 'chrome', + }; + + expect(utils.getPlatformVersion(caps)).toBeUndefined(); + }); }); From 1c05a3c2f07ba9151c0672084e68b0b0a8fd24b9 Mon Sep 17 00:00:00 2001 From: amaanbs Date: Thu, 7 Mar 2024 04:10:22 +0530 Subject: [PATCH 6/7] ts-lint fixes --- .../wdio-browserstack-service/tests/util.test.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index c7b9bbf7dd2..99e2a618483 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1414,24 +1414,24 @@ describe('ObjectsAreEqual', function () { describe('getPlatformVersion', () => { it('should return undefined if no capabilities are provided', () => { - expect(utils.getPlatformVersion(null)).toBeUndefined(); - }); + expect(utils.getPlatformVersion(null)).toBeUndefined() + }) it('should return platform version from bstack:options if available', () => { const caps: Capabilities.Capabilities = { 'bstack:options': { osVersion: '10.0' }, - }; + } - expect(utils.getPlatformVersion(caps)).toBe('10.0'); + expect(utils.getPlatformVersion(caps)).toBe('10.0') }); it('should return undefined if no platform version is found', () => { const caps: Capabilities.Capabilities = { browserName: 'chrome', - }; + } - expect(utils.getPlatformVersion(caps)).toBeUndefined(); - }); -}); + expect(utils.getPlatformVersion(caps)).toBeUndefined() + }) +}) From c2fdd9187fdde224f7b3b93bd1a992d719f332e5 Mon Sep 17 00:00:00 2001 From: amaanbs Date: Thu, 7 Mar 2024 04:10:39 +0530 Subject: [PATCH 7/7] ts-lint fixes --- packages/wdio-browserstack-service/tests/util.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wdio-browserstack-service/tests/util.test.ts b/packages/wdio-browserstack-service/tests/util.test.ts index 99e2a618483..5571b87e011 100644 --- a/packages/wdio-browserstack-service/tests/util.test.ts +++ b/packages/wdio-browserstack-service/tests/util.test.ts @@ -1425,7 +1425,7 @@ describe('getPlatformVersion', () => { } expect(utils.getPlatformVersion(caps)).toBe('10.0') - }); + }) it('should return undefined if no platform version is found', () => { const caps: Capabilities.Capabilities = {