import { describe, expect, it, vi } from 'vitest'
import ProtocolStub from '../src/protocol-stub.js'
import Multiremote from '../src/multiremote.js'
describe('reloadSession', () => {
it('should throw', () => {
expect(() => ProtocolStub.reloadSession()).toThrow()
})
})
describe('newSession', () => {
it('should add commands and flags', async () => {
const session = await ProtocolStub.newSession({
capabilities: {
'appium:deviceName': 'Some Device',
platformName: 'iOS',
foo: 'bar'
}
})
expect(Object.keys(session)).toHaveLength(21)
expect(session.isAndroid).toBe(false)
expect(session.isChrome).toBe(false)
expect(session.isChromium).toBe(false)
expect(session.isFirefox).toBe(false)
expect(session.isIOS).toBe(true)
expect(session.isMobile).toBe(true)
expect(session.isSauce).toBe(false)
expect(session.isBidi).toBe(false)
expect(session.isWindowsApp).toBe(false)
expect(session.isMacApp).toBe(false)
expect(session.capabilities).toEqual({
deviceName: 'Some Device',
platformName: 'iOS',
foo: 'bar'
})
})
})
describe('attachToSession', () => {
it('should throw if not multiremote', async () => {
const modifier = vi.fn()
expect(() => ProtocolStub.attachToSession({
sessionId: '1234',
capabilities: { browserName: 'chrome' }
} as never, modifier)).toThrow()
expect(modifier).not.toBeCalled()
})
it('should return newSession if modifier was not passed', async () => {
expect(() => ProtocolStub.attachToSession({ sessionId: '1234' } as never))
.toThrow()
})
it('should call modifier if multiremote', async () => {
const multiremote = new Multiremote()
multiremote.instances.instanceName = 'instance'
const session = await ProtocolStub.attachToSession(
undefined,
multiremote.modifier.bind(multiremote)
)
expect(session.capabilities).toBeUndefined()
expect(session.commandList).toHaveLength(0)
expect(session.instanceName).toBe('instance')
expect(() => session.addCommand()).toThrow()
expect(() => session.overwriteCommand()).toThrow()
})
})