fix(tests): iteration 15

This commit is contained in:
Mohamed Boudra
2026-03-13 13:43:34 +07:00
parent b5102e7d7e
commit 40ebd1b730
3 changed files with 58 additions and 17 deletions
@@ -194,7 +194,9 @@ export async function readScrollMetrics(page: Page): Promise<ScrollMetrics> {
} }
export async function scrollUpFromBottom(page: Page, pixels: number): Promise<void> { export async function scrollUpFromBottom(page: Page, pixels: number): Promise<void> {
await page.getByTestId("agent-chat-scroll").evaluate( const scrollViewport = page.getByTestId("agent-chat-scroll");
await expect(scrollViewport).toHaveCount(1, { timeout: 30000 });
await scrollViewport.evaluate(
(root: Element, amount: number) => { (root: Element, amount: number) => {
const rootElement = root as HTMLElement; const rootElement = root as HTMLElement;
const candidates = [rootElement, ...Array.from(rootElement.querySelectorAll("*"))]; const candidates = [rootElement, ...Array.from(rootElement.querySelectorAll("*"))];
@@ -210,9 +212,31 @@ export async function scrollUpFromBottom(page: Page, pixels: number): Promise<vo
scrollElement.scrollHeight - scrollElement.clientHeight scrollElement.scrollHeight - scrollElement.clientHeight
); );
scrollElement.scrollTop = Math.max(0, bottomOffset - amount); scrollElement.scrollTop = Math.max(0, bottomOffset - amount);
scrollElement.dispatchEvent(new Event("scroll", { bubbles: true }));
}, },
pixels pixels
); );
if ((await readScrollMetrics(page)).distanceFromBottom > NEAR_BOTTOM_THRESHOLD_PX) {
return;
}
const box = await scrollViewport.boundingBox();
if (!box) {
return;
}
await page.mouse.move(box.x + box.width / 2, box.y + Math.min(box.height / 2, 24));
let remaining = Math.max(0, pixels);
while (remaining > 0) {
const delta = Math.min(240, remaining);
await page.mouse.wheel(0, -delta);
remaining -= delta;
if ((await readScrollMetrics(page)).distanceFromBottom > NEAR_BOTTOM_THRESHOLD_PX) {
return;
}
}
} }
export async function waitForAgentReady(page: Page, expectedTailText?: string): Promise<void> { export async function waitForAgentReady(page: Page, expectedTailText?: string): Promise<void> {
+21 -7
View File
@@ -27,15 +27,29 @@ export default defineConfig({
}, },
}, },
resolve: { resolve: {
alias: { alias: [
"@": path.resolve(__dirname, "src"), {
"@server": path.resolve(__dirname, "../server/src"), find: /^@getpaseo\/relay\/e2ee$/,
replacement: path.resolve(__dirname, "../relay/src/e2ee.ts"),
},
{
find: /^@getpaseo\/relay$/,
replacement: path.resolve(__dirname, "../relay/src/index.ts"),
},
{ find: "@", replacement: path.resolve(__dirname, "src") },
{ find: "@server", replacement: path.resolve(__dirname, "../server/src") },
// Point to the ESM build so Vite can transform its imports and apply the // Point to the ESM build so Vite can transform its imports and apply the
// react alias below (the CJS build uses require('react') which bypasses // react alias below (the CJS build uses require('react') which bypasses
// Vite alias resolution). // Vite alias resolution).
"react-native": path.resolve(rootNodeModules, "react-native-web/dist/index.js"), {
react: path.resolve(appNodeModules, "react"), find: "react-native",
"react-dom": path.resolve(appNodeModules, "react-dom"), replacement: path.resolve(rootNodeModules, "react-native-web/dist/index.js"),
}, },
{ find: "react", replacement: path.resolve(appNodeModules, "react") },
{
find: "react-dom",
replacement: path.resolve(appNodeModules, "react-dom"),
},
],
}, },
}); });
+12 -9
View File
@@ -13,21 +13,24 @@
"exports": { "exports": {
".": { ".": {
"types": "./dist/index.d.ts", "types": "./dist/index.d.ts",
"node": "./dist/index.js", "default": [
"import": "./src/index.ts", "./dist/index.js",
"default": "./src/index.ts" "./src/index.ts"
]
}, },
"./e2ee": { "./e2ee": {
"types": "./dist/e2ee.d.ts", "types": "./dist/e2ee.d.ts",
"node": "./dist/e2ee.js", "default": [
"import": "./src/e2ee.ts", "./dist/e2ee.js",
"default": "./src/e2ee.ts" "./src/e2ee.ts"
]
}, },
"./cloudflare": { "./cloudflare": {
"types": "./dist/cloudflare-adapter.d.ts", "types": "./dist/cloudflare-adapter.d.ts",
"node": "./dist/cloudflare-adapter.js", "default": [
"import": "./src/cloudflare-adapter.ts", "./dist/cloudflare-adapter.js",
"default": "./src/cloudflare-adapter.ts" "./src/cloudflare-adapter.ts"
]
} }
}, },
"scripts": { "scripts": {