import path from 'node:path'
import { describe, expect, test, vi } from 'vitest'
import { sumByKey, setUnsupportedCommand, getLighthouseDriver } from '../src/utils.js'
import type { RequestPayload } from '../src/handler/network.js'
vi.mock('@wdio/logger', () => import(path.join(process.cwd(), '__mocks__', '@wdio/logger')))
vi.mock('fs', () => ({
readFileSync: vi.fn().mockReturnValue('1234\nsomepath'),
existsSync: vi.fn()
}))
vi.mock('lighthouse/lighthouse-core/gather/connections/cri.js', () => ({
default: class ChromeProtocol {
public _runJsonCommand = vi.fn().mockReturnValue(['foobar'])
public _connectToSocket = vi.fn()
public _sendCommandMock = vi.fn()
public on = vi.fn()
sendCommand (...args: any) {
this._sendCommandMock(...args)
return { sessionId: 'session 321' }
}
}
}))
test('sumByKey', () => {
expect(sumByKey([{
size: 1
} as unknown as RequestPayload, {
size: 2
} as unknown as RequestPayload, {
size: 3
} as unknown as RequestPayload], 'size')).toBe(6)
})
test('setUnsupportedCommand', () => {
const browser = { addCommand: vi.fn() }
setUnsupportedCommand(browser as unknown as WebdriverIO.Browser)
expect(browser.addCommand).toHaveBeenCalledWith('getMetrics', expect.any(Function))
const fn = browser.addCommand.mock.calls[0][1]
expect(fn).toThrow()
})
describe('getLighthouseDriver', () => {
test('should return a driver w/o creating new session', async () => {
const urlMock = vi.fn().mockReturnValue('ws://127.0.0.1:56513/devtools/browser/9aae0e34-86a9-4b0e-856b-d0d37009ddbb')
const session = {
connection: vi.fn().mockReturnValue({ url: urlMock })
}
const target = { _targetId: 'foobar321' }
const driver = await getLighthouseDriver(session as any, target as any)
expect(session.connection).toBeCalledTimes(1)
expect(urlMock).toBeCalledTimes(1)
expect(driver.constructor.name).toBe('Driver')
})
test('should create a new session', async () => {
const urlMock = vi.fn().mockReturnValue('ws://127.0.0.1:56513/session/9aae0e34-86a9-4b0e-856b-d0d37009ddbb/se/cdp')
const session = {
connection: vi.fn().mockReturnValue({ url: urlMock })
}
const target = {
asPage: vi.fn().mockReturnValue({
mainFrame: vi.fn().mockReturnValue({
_id: 'foobar321'
})
})
}
const driver = await getLighthouseDriver(session as any, target as any)
driver._connection.sendCommand('foobar')
expect(driver._connection._sendCommandMock.mock.calls).toMatchSnapshot()
})
})