import path from 'node:path'
import { vi, describe, it, expect, afterEach, beforeEach } from 'vitest'
import { yargs } from 'yargs'
import { remote } from 'webdriverio'
import { handler, builder } from '../../src/commands/repl.js'
vi.mock('@wdio/utils', () => {
let syncSupport = false
return {
HOOK_DEFINITION: {},
default: {
setSyncSupport: (val: boolean) => (syncSupport = val),
get hasWdioSyncSupport () {
return syncSupport
}
}
}
})
vi.mock('repl')
vi.mock('yargs')
vi.mock('webdriverio', () => import(path.join(process.cwd(), '__mocks__', 'webdriverio')))
describe('repl commandDir', () => {
it('should call debug command', async () => {
const client = await handler({ browserName: 'chrome' } as any) as any
expect(client.debug).toHaveBeenCalledTimes(1)
expect(client.deleteSession).toHaveBeenCalledTimes(1)
})
it('it should properly build command', () => {
builder(yargs)
expect(yargs.options).toHaveBeenCalled()
expect(yargs.example).toHaveBeenCalled()
expect(yargs.epilogue).toHaveBeenCalled()
expect(yargs.help).toHaveBeenCalled()
})
afterEach(() => {
delete global.$
delete global.$$
delete global.browser
})
})
describe('Command: repl', () => {
beforeEach(() => {
vi.mocked(remote).mockClear()
})
it('should attach global variables', async () => {
await handler({} as any)
expect(global.$).not.toBeUndefined()
expect(global.$$).not.toBeUndefined()
expect(global.browser).not.toBeUndefined()
})
it('should set the correct browser', async () => {
await handler({ option: 'foobar' } as any)
expect(remote).toHaveBeenCalledWith({ capabilities: { browserName: 'foobar' }, option: 'foobar' } as any)
})
afterEach(() => {
delete global.$
delete global.$$
delete global.browser
})
})