🏡 index : quine-global/webdriverio.git

import { describe, expect, vi, afterEach, it } from 'vitest'

import { getValue, setValue, setPort, setResourcePool, getValueFromPool, addValueToPool } from '../src/client.js'
import SharedStoreService from '../src/service.js'
import { CUSTOM_CAP } from '../src/constants.js'
import type { SharedStoreServiceCapabilities } from '../src/types.js'

vi.mock('../src/client', () => ({
    getValue: vi.fn(),
    setValue: vi.fn(),
    setResourcePool: vi.fn(),
    getValueFromPool: vi.fn(),
    addValueToPool: vi.fn(),
    setPort: vi.fn(),
}))

describe('SharedStoreService', () => {
    const capabilities = {
        browserName: 'chrome',
        [CUSTOM_CAP]: 65209
    } as SharedStoreServiceCapabilities

    describe('sets port correctly', () => {
        it('using standard caps', async () => {
            new SharedStoreService(null as never, capabilities)
            expect(setPort).toBeCalledWith(65209)
        })

        it('using w3c caps', async () => {
            const c = { alwaysMatch: capabilities, firstMatch: [] }
            new SharedStoreService(null as never, c)
            expect(setPort).toBeCalledWith(65209)
        })

        it('using multiremote caps', async () => {
            new SharedStoreService(null as never, {
                browserA: { capabilities },
                browserB: { capabilities }
            })
            expect(setPort).toBeCalledWith(65209)
        })
    })

    it('beforeSession', () => {
        const storeService = new SharedStoreService(null as never, capabilities)
        const browser = { call: (fn: Function) => fn() }
        storeService.before({} as never, [] as never, browser as any)
        storeService['_browser']?.sharedStore.get('foobar')
        storeService['_browser']?.sharedStore.set('foo', 'bar')
        storeService['_browser']?.sharedStore.setResourcePool('foo', ['bar'])
        storeService['_browser']?.sharedStore.getValueFromPool('foo', { timeout: 1 })
        storeService['_browser']?.sharedStore.addValueToPool('foo', 'bar2')
        expect(getValue).toBeCalledWith('foobar')
        expect(setValue).toBeCalledWith('foo', 'bar')
        expect(setResourcePool).toBeCalledWith('foo', ['bar'])
        expect(getValueFromPool).toBeCalledWith('foo', { timeout: 1 })
        expect(addValueToPool).toBeCalledWith('foo', 'bar2')
    })

    afterEach(() => {
        vi.mocked(setPort).mockClear()
        vi.mocked(getValue).mockClear()
        vi.mocked(setValue).mockClear()
    })
})