Adam пре 5 месеци
родитељ
комит
387ab78bf6
1 измењених фајлова са 32 додато и 5 уклоњено
  1. 32 5
      packages/app/e2e/session/session-review.spec.ts

+ 32 - 5
packages/app/e2e/session/session-review.spec.ts

@@ -101,12 +101,31 @@ async function waitMark(page: Parameters<typeof test>[0]["page"], file: string,
   )
 }
 
+async function spot(page: Parameters<typeof test>[0]["page"], file: string) {
+  return page.evaluate((file) => {
+    const view = document.querySelector('[data-slot="session-review-scroll"] .scroll-view__viewport')
+    if (!(view instanceof HTMLElement)) return null
+
+    const row = Array.from(document.querySelectorAll("h3")).find(
+      (node) => node instanceof HTMLElement && node.textContent?.includes(file),
+    )
+    if (!(row instanceof HTMLElement)) return null
+
+    const a = row.getBoundingClientRect()
+    const b = view.getBoundingClientRect()
+    return {
+      top: a.top - b.top,
+      y: view.scrollTop,
+    }
+  }, file)
+}
+
 test("review keeps scroll position after a live diff update", async ({ page, withProject }) => {
   test.setTimeout(180_000)
 
   const tag = `review-${Date.now()}`
   const list = files(tag)
-  const hit = list[list.length - 2]!
+  const hit = list[list.length - 4]!
   const next = `${tag}-live`
 
   await page.setViewportSize({ width: 1600, height: 1000 })
@@ -160,8 +179,9 @@ test("review keeps scroll position after a live diff update", async ({ page, wit
       await expect(row).toBeVisible()
       await row.evaluate((el) => el.scrollIntoView({ block: "center" }))
 
-      await expect.poll(() => view.evaluate((el) => el.scrollTop)).toBeGreaterThan(200)
-      const prev = await view.evaluate((el) => el.scrollTop)
+      await expect.poll(async () => (await spot(page, hit.file))?.y ?? 0).toBeGreaterThan(200)
+      const prev = await spot(page, hit.file)
+      if (!prev) throw new Error(`missing review row for ${hit.file}`)
 
       await patch(sdk, session.id, edit(hit.file, hit.mark, next))
 
@@ -179,8 +199,15 @@ test("review keeps scroll position after a live diff update", async ({ page, wit
       await waitMark(page, hit.file, next)
 
       await expect
-        .poll(async () => Math.abs((await view.evaluate((el) => el.scrollTop)) - prev), { timeout: 60_000 })
-        .toBeLessThanOrEqual(16)
+        .poll(
+          async () => {
+            const next = await spot(page, hit.file)
+            if (!next) return Number.POSITIVE_INFINITY
+            return Math.max(Math.abs(next.top - prev.top), Math.abs(next.y - prev.y))
+          },
+          { timeout: 60_000 },
+        )
+        .toBeLessThanOrEqual(32)
     })
   })
 })