forgejo/tests
Mathieu Fenniak 86ce1477c1 test(e2e): improve reliability of workflow list dynamic refresh test (#9059)
The "refresh does not break interacting with open drop-downs" is flaky.  It attempts to verify that a refresh of the "Actions" list page does not occur when the user is currently navigating the dropdowns on the page, as htmx would replace their dropdowns mid-action.  It does this by clicking on the dropdowns, verifying the dropdown text is visible, simulating a refresh, and verifying that the dropdown text is still visible.

Example failure log:
```
  1) [chromium] › tests/e2e/actions.test.e2e.ts:173:3 › workflow list dynamic refresh › refresh does not break interacting with open drop-downs

    Error: Timed out 3000ms waiting for expect(locator).toBeVisible()

    Locator: getByText('Waiting')
    Expected: visible
    Received: hidden
    Call log:
      - Expect "toBeVisible" with timeout 3000ms
      - waiting for getByText('Waiting')
        7 × locator resolved to <a class="item" href="?workflow=test-dispatch.yml&actor=0&status=5">↵⇆⇆⇆⇆⇆⇆⇆Waiting↵⇆⇆⇆⇆⇆⇆</a>
          - unexpected value "hidden"

      194 |     await expect(page.getByText('Failure')).toBeVisible();
      195 |     await simulatePollingInterval(page);
    > 196 |     await expect(page.getByText('Waiting')).toBeVisible();
          |                                             ^
      197 |     await expect(page.getByText('Failure')).toBeVisible();
      198 |
      199 |     // Actor dropdown
        at /workspace/forgejo/forgejo/tests/e2e/actions.test.e2e.ts:196:45
```

The dropdown list stops refreshes if there are any `[aria-expanded=true]` elements on the page:
ab6ea6a743/templates/repo/actions/list.tmpl (L31-L33)

But fomantic doesn't set the `aria-expanded` attribute immediately on mouseup; it delays for up to 100ms:
f8a332c2e6/web_src/js/modules/fomantic/dropdown.js (L241-L246)

The easiest fix is to align the test's expectations with the underlying code, which is to verify that the `aria-expanded=true` element is present in the test before proceeding with the simulated refresh.

Before this change, this test would fail as frequently as 10-out-of-10 in local runs, but usually more around 70% (albeit closer to 0% in a playwright ui).  After this change, I've executed the test with zero failures in 100 back-to-back runs with `npx playwright test ./tests/e2e/actions.test.e2e.ts --project chromium --repeat-each 100`.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/9059
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Mathieu Fenniak <mathieu@fenniak.net>
Co-committed-by: Mathieu Fenniak <mathieu@fenniak.net>
2025-08-30 01:38:38 +02:00
..
e2e test(e2e): improve reliability of workflow list dynamic refresh test (#9059) 2025-08-30 01:38:38 +02:00
fuzz chore: branding import path (#7337) 2025-03-27 19:40:14 +00:00
gitea-lfs-meta
gitea-repositories-meta fix(ui): move file rename notice to before pagination (#8818) 2025-08-10 21:35:34 +02:00
integration fix(ui): restore code search types (#9053) 2025-08-29 18:56:54 +02:00
testdata/data add model viewer for .glb (GLTF) model in file view (#8111) 2025-06-21 14:42:35 +02:00
mysql.ini.tmpl feat(logger): rename settings for consistency and remove obsolete settings (#8667) 2025-08-01 10:55:05 +02:00
pgsql.ini.tmpl chore(docs): add instructions to run S3 tests locally (#8895) 2025-08-15 08:54:09 +02:00
sqlite.ini.tmpl feat(logger): rename settings for consistency and remove obsolete settings (#8667) 2025-08-01 10:55:05 +02:00
test_utils.go fix: CreateDeclarativeRepo should allow merging PRs when PRs are enabled 2025-08-11 12:55:25 +02:00