🏡 index : quine-global/webdriverio.git

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',
                // @ts-ignore not allowed but possible
                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()
        // @ts-ignore test scenario
        multiremote.instances.instanceName = 'instance'

        const session = await ProtocolStub.attachToSession(
            // @ts-expect-error
            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()
    })
})