Files
hermes-agent/apps/desktop/e2e/window-input.unit.test.ts

95 lines
2.7 KiB
TypeScript

import { createRequire } from 'node:module'
import { expect, test } from 'vitest'
const { prepareWindowForInput } = createRequire(import.meta.url)(
'../../../tests/install/e2e-assets/window-input.cjs',
)
test('does not finish when IPC reports 100% before the window factor settles', async () => {
let observations = 0
const previous = (globalThis as any).hermesDesktop
;(globalThis as any).hermesDesktop = { zoom: {
setPercent: () => undefined,
get: async () => ({ percent: 100 }),
} }
const appWindow = { evaluate: async (fn: any) => fn({ webContents: {
getZoomFactor: () => ++observations === 1 ? 0.9 : 1,
} }) }
const page = {
evaluate: async (fn: any) => fn(),
waitForTimeout: async () => undefined,
}
try {
await prepareWindowForInput({ browserWindow: async () => appWindow }, page)
expect(observations).toBeGreaterThan(1)
} finally {
;(globalThis as any).hermesDesktop = previous
}
})
test('reapplies zoom when startup overwrites the first request', async () => {
let requests = 0
let factor = 0.9
const previous = (globalThis as any).hermesDesktop
;(globalThis as any).hermesDesktop = { zoom: {
setPercent: () => { requests++;
if (requests > 1) {factor = 1} },
get: async () => ({ percent: factor * 100 }),
} }
const window = { evaluate: async (fn: any) => fn({ webContents: { getZoomFactor: () => factor } }) }
const page = {
evaluate: async (fn: any) => fn(),
waitForTimeout: async () => {
if (requests === 1) {throw new Error('startup overwrote zoom and the driver never reapplied it')}
},
}
try {
await prepareWindowForInput({ browserWindow: async () => window }, page)
expect(requests).toBeGreaterThan(1)
} finally {
;(globalThis as any).hermesDesktop = previous
}
})
test('awaits the zoom response instead of accepting a truthy Promise', async () => {
let reads = 0
let factor = 0.9
const zoom = {
setPercent: () => undefined,
get: async () => {
reads++
if (reads > 1) {factor = 1}
return { percent: factor * 100 }
},
}
const previous = (globalThis as any).hermesDesktop
;(globalThis as any).hermesDesktop = { zoom }
const window = { evaluate: async (fn: any) => fn({ webContents: { getZoomFactor: () => factor } }) }
const page = {
evaluate: async (fn: any) => fn(),
// Playwright 1.58 accepts the predicate's Promise before it resolves.
waitForFunction: async (fn: any) => { await fn() },
waitForTimeout: async () => undefined,
}
try {
await prepareWindowForInput({ browserWindow: async () => window }, page)
expect(reads).toBeGreaterThan(1)
expect(factor).toBe(1)
} finally {
;(globalThis as any).hermesDesktop = previous
}
})