Skip to content

Commit 3ee0fb1

Browse files
committed
fix(wdio-browserstack-service): refresh framework session id on reloadSession
1 parent 114c7ba commit 3ee0fb1

2 files changed

Lines changed: 41 additions & 0 deletions

File tree

packages/browserstack-service/src/service.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -762,6 +762,12 @@ export default class BrowserstackService implements Services.ServiceInstance {
762762
}
763763

764764
this._reloadHappened = true
765+
if (BrowserstackCLI.getInstance().isRunning()) {
766+
const instance = AutomationFramework.getTrackedInstance() as AutomationFrameworkInstance
767+
if (instance) {
768+
AutomationFramework.setState(instance, AutomationFrameworkConstants.KEY_FRAMEWORK_SESSION_ID, newSessionId)
769+
}
770+
}
765771

766772
const { setSessionName, setSessionStatus } = this._options
767773
const ignoreHooksStatus = this._options.testObservabilityOptions?.ignoreHooksStatus === true

packages/browserstack-service/tests/service.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import * as utils from '../src/util.js'
88
import InsightsHandler from '../src/insights-handler.js'
99
import { BrowserstackCLI } from '../src/cli/index.js'
1010
import * as bstackLogger from '../src/bstackLogger.js'
11+
import AutomationFramework from '../src/cli/frameworks/automationFramework.js'
12+
import { AutomationFrameworkConstants } from '../src/cli/frameworks/constants/automationFrameworkConstants.js'
1113

1214
const jasmineSuiteTitle = 'Jasmine__TopLevel__Suite'
1315
const sessionBaseUrl = 'https://api.browserstack.com/automate/sessions'
@@ -206,6 +208,39 @@ describe('onReload()', () => {
206208
})
207209
expect(service['_suiteTitle']).toEqual('my suite title')
208210
})
211+
212+
it('should update framework session id on tracked instance when CLI is running', async () => {
213+
const getInstanceSpy = vi.spyOn(BrowserstackCLI, 'getInstance').mockReturnValue({ isRunning: () => true } as any)
214+
const trackedInstance = {} as any
215+
const getTrackedInstanceSpy = vi.spyOn(AutomationFramework, 'getTrackedInstance').mockReturnValue(trackedInstance)
216+
const setStateSpy = vi.spyOn(AutomationFramework, 'setState').mockImplementation(() => {})
217+
const updateSpy = vi.spyOn(service, '_update').mockResolvedValue(undefined as any)
218+
const printSpy = vi.spyOn(service, '_printSessionURL').mockResolvedValue(undefined as any)
219+
service['_browser'] = browser
220+
221+
await service.onReload('1', '2')
222+
expect(setStateSpy).toHaveBeenCalledWith(trackedInstance, AutomationFrameworkConstants.KEY_FRAMEWORK_SESSION_ID, '2')
223+
224+
getInstanceSpy.mockRestore()
225+
getTrackedInstanceSpy.mockRestore()
226+
setStateSpy.mockRestore()
227+
updateSpy.mockRestore()
228+
printSpy.mockRestore()
229+
})
230+
231+
it('should not update framework session id when CLI is not running', async () => {
232+
const setStateSpy = vi.spyOn(AutomationFramework, 'setState').mockImplementation(() => {})
233+
const updateSpy = vi.spyOn(service, '_update').mockResolvedValue(undefined as any)
234+
const printSpy = vi.spyOn(service, '_printSessionURL').mockResolvedValue(undefined as any)
235+
service['_browser'] = browser
236+
237+
await service.onReload('1', '2')
238+
expect(setStateSpy).not.toHaveBeenCalled()
239+
240+
setStateSpy.mockRestore()
241+
updateSpy.mockRestore()
242+
printSpy.mockRestore()
243+
})
209244
})
210245

211246
describe('beforeSession', () => {

0 commit comments

Comments
 (0)