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

[browserstack-service] Add platform version integration data for skipped tests #11997

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 2 additions & 17 deletions packages/wdio-browserstack-service/src/insights-handler.ts
Expand Up @@ -11,7 +11,7 @@ import {
frameworkSupportsHook,
getCloudProvider, getFailureObject,
getGitMetaData,
getHookType,
getHookType, getPlatformVersion,
getScenarioExamples,
getUniqueIdentifier,
getUniqueIdentifierForCucumber,
Expand Down Expand Up @@ -871,25 +871,10 @@ class _InsightsHandler {
browser_version: this._platformMeta?.browserVersion,
platform: this._platformMeta?.platformName,
product: this._platformMeta?.product,
platform_version: this.getPlatformVersion()
platform_version: getPlatformVersion(this._userCaps as WebdriverIO.Capabilities)
}
}

private getPlatformVersion() {
const caps = (this._userCaps as WebdriverIO.Capabilities)
const bstackOptions = (this._userCaps as WebdriverIO.Capabilities)?.['bstack:options']
const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version']

for (const key of keys) {
if (bstackOptions && bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]) {
return bstackOptions?.[key as keyof Capabilities.BrowserStackCapabilities]
} else if (caps[key as keyof WebdriverIO.Capabilities]) {
return caps[key as keyof WebdriverIO.Capabilities]
}
}
return null
}

private getIdentifier (test: Frameworks.Test | ITestCaseHookParameter) {
if ('pickle' in test) {
return getUniqueIdentifierForCucumber(test)
Expand Down
10 changes: 9 additions & 1 deletion packages/wdio-browserstack-service/src/reporter.ts
Expand Up @@ -16,10 +16,11 @@ import {
getGitMetaData,
removeAnsiColors,
getHookType,
pushDataToQueue
pushDataToQueue, getPlatformVersion
} from './util.js'
import RequestQueueHandler from './request-handler.js'
import { BStackLogger } from './bstackLogger.js'
import type { Capabilities } from '@wdio/types'

class _TestReporter extends WDIOReporter {
private _capabilities: WebdriverIO.Capabilities = {}
Expand All @@ -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 WebdriverIO.Capabilities
this._userCaps = this.getUserCaps(runnerStats)
this._config = runnerStats.config as BrowserstackConfig & Options.Testrunner
this._sessionId = runnerStats.sessionId
if (typeof this._config.testObservability !== 'undefined') {
Expand All @@ -46,6 +49,10 @@ class _TestReporter extends WDIOReporter {
this.registerListeners()
}

private getUserCaps(runnerStats: RunnerStats) {
return runnerStats.instanceOptions[runnerStats.sessionId].capabilities
}

registerListeners () {
if (this._config?.framework !== 'jasmine') {
return
Expand Down Expand Up @@ -257,6 +264,7 @@ class _TestReporter extends WDIOReporter {
browser: this._capabilities?.browserName,
browser_version: this._capabilities?.browserVersion,
platform: this._capabilities?.platformName,
platform_version: getPlatformVersion(this._userCaps as WebdriverIO.Capabilities)
}
}

Expand Down
1 change: 1 addition & 0 deletions packages/wdio-browserstack-service/src/types.ts
Expand Up @@ -279,6 +279,7 @@ interface IntegrationObject {
browser_version?: string
platform?: string
product?: string
platform_version?: string
}

interface TestCodeBody {
Expand Down
15 changes: 15 additions & 0 deletions packages/wdio-browserstack-service/src/util.ts
Expand Up @@ -1203,3 +1203,18 @@ export function setupExitHandlers() {
}
})
}

export function getPlatformVersion(caps: WebdriverIO.Capabilities) {
const bstackOptions = (caps)?.['bstack:options']
const keys = ['platformVersion', 'platform_version', 'osVersion', 'os_version']

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 WebdriverIO.Capabilities]) {
return String(caps[key as keyof WebdriverIO.Capabilities])
}
}
return undefined
}

15 changes: 13 additions & 2 deletions packages/wdio-browserstack-service/tests/insights-handler.test.ts
@@ -1,7 +1,7 @@
/// <reference path="../../webdriverio/src/@types/async.d.ts" />
import path from 'node:path'

import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
import { describe, expect, it, vi, beforeEach, afterEach, beforeAll, afterAll } from 'vitest'
import got from 'got'
import logger from '@wdio/logger'
import type { StdLog } from '../src/index.js'
Expand Down Expand Up @@ -607,14 +607,25 @@ describe('afterHook', () => {

describe('getIntegrationsObject', () => {
let insightsHandler: InsightsHandler
let getPlatformVersionSpy

beforeAll(() => {
getPlatformVersionSpy = vi.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' })
})

beforeEach(() => {
insightsHandler = new InsightsHandler(browser, false, 'framework')
insightsHandler['_platformMeta'] = { caps: {}, sessionId: '', browserName: '', browserVersion: '', platformName: '', product: '' }
})

it('return hash', () => {
expect(insightsHandler['getIntegrationsObject']()).toBeInstanceOf(Object)
const integrationsObject = insightsHandler['getIntegrationsObject']()
expect(integrationsObject).toBeInstanceOf(Object)
expect(integrationsObject.platform_version).toEqual('some version')
})

afterAll(() => {
getPlatformVersionSpy.mockReset()
})
})

Expand Down
29 changes: 28 additions & 1 deletion packages/wdio-browserstack-service/tests/reporter.test.ts
@@ -1,6 +1,6 @@
import path from 'node:path'
import logger from '@wdio/logger'
import { describe, expect, it, vi, beforeEach, afterEach } from 'vitest'
import { describe, expect, it, vi, beforeEach, afterEach, beforeAll, afterAll } from 'vitest'
import type { StdLog } from '../src/index.js'

import TestReporter from '../src/reporter.js'
Expand Down Expand Up @@ -136,6 +136,15 @@ describe('test-reporter', () => {
const uploadEventDataSpy = vi.spyOn(utils, 'uploadEventData').mockImplementation(() => Promise.resolve())
const getCloudProviderSpy = vi.spyOn(utils, 'getCloudProvider').mockReturnValue('browserstack')
vi.spyOn(requestQueueHandler, 'add').mockImplementation(() => { return { proceed: true, data: [{}], url: '' } })
let getPlatformVersionSpy

beforeAll(() => {
getPlatformVersionSpy = vi.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' })
})

afterAll(() => {
getPlatformVersionSpy.mockReset()
})

beforeEach(() => {
uploadEventDataSpy.mockClear()
Expand Down Expand Up @@ -200,6 +209,15 @@ describe('test-reporter', () => {
vi.spyOn(utils, 'getCloudProvider').mockReturnValue('browserstack')
vi.spyOn(requestQueueHandler, 'add').mockImplementation(() => { return { proceed: true, data: [{}], url: '' } })
let testStartStats = { ...testStats }
let getPlatformVersionSpy

beforeAll(() => {
getPlatformVersionSpy = vi.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' })
})

afterAll(() => {
getPlatformVersionSpy.mockReset()
})

beforeEach(() => {
reporter = new TestReporter({})
Expand Down Expand Up @@ -247,6 +265,15 @@ describe('test-reporter', () => {
vi.spyOn(utils, 'getCloudProvider').mockReturnValue('browserstack')
vi.spyOn(requestQueueHandler, 'add').mockImplementation(() => { return { proceed: true, data: [{}], url: '' } })
let testEndStats = { ...testStats }
let getPlatformVersionSpy

beforeAll(() => {
getPlatformVersionSpy = vi.spyOn(utils, 'getPlatformVersion').mockImplementation(() => { return 'some version' })
})

afterAll(() => {
getPlatformVersionSpy.mockReset()
})

beforeEach(() => {
reporter = new TestReporter({})
Expand Down