Skip to content

Automatic tests#114

Open
ClementPasteau wants to merge 20 commits into
mainfrom
automatic-tests
Open

Automatic tests#114
ClementPasteau wants to merge 20 commits into
mainfrom
automatic-tests

Conversation

@ClementPasteau

Copy link
Copy Markdown
Contributor

No description provided.

ClementPasteau and others added 20 commits July 17, 2026 16:30
- GitHub Action on the automatic-tests branch: checks out GDevelop
  (automatic-tests branch), runs the static selector check, then plays
  every tutorial with Playwright against the editor dev server.
- A video of each tutorial being played is uploaded as artifact (14 days),
  for passing and failing runs alike, along with traces and screenshots.
- Known broken tutorials (flingGame, plinkoMultiplier) are played and
  recorded but expected to fail; the selector check skips them via --ignore.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Wait for menus/submenus to render when following the bold texts of a
  tooltip through a split menu button (2-players preview), and dismiss
  stray menus before retrying a preview launch.
- Dispatch a direct click on the tooltip button when it never stabilizes
  (tooltip anchored to the bouncing avatar), with bounded timeouts.
- Set a global actionTimeout so no action can ever block until the test
  timeout.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The tooltip is anchored to the bouncing avatar and never stops moving, so
a regular Playwright click (which waits for stability) intermittently
times out, especially on slow CI machines. Wait for visibility, then
click at the element's current coordinates.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The tutorial tooltip hides itself when an error boundary is displayed or
when another dialog is stacked above the one hosting the highlighted
element: include both in the failure message to diagnose CI-only
failures.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sharpen failure diagnostics (dialog count, element presence, tooltip
text) and dump each tooltip popper's computed visibility and buttons
when a clickOnTooltipButton step cannot find its button, to diagnose the
remaining CI-only tilemapPlatformer failure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…enus

When a modal dialog is open, Material UI sets aria-hidden on the other
root containers including the tutorial tooltip popper: the visible
button is then absent from the accessibility tree and getByRole cannot
find it. Use a CSS + text locator instead. Also give submenus more time
to render on slow CI machines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A submenu closes 75ms after the pointer leaves its parent menu item
(MaterialUIMenuImplementation): moving the mouse from the parent to a
submenu item can close the submenu before the click lands on slow CI
machines. Dispatch the click without any pointer movement instead, and
use a CSS locator (menus can be aria-hidden when a dialog is open).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
When a click is intercepted by a dialog that does not contain the
element the tutorial points to (e.g. an error alert opened above the
object editor on CI), close it like a user would and log its content.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Convert Playwright's webm recordings to mp4 (H.264) on CI so they play
  natively on macOS (QuickTime/Quick Look).
- Split the artifact: 'tutorial-videos' (small, videos + screenshots)
  and 'test-traces' (heavy, ~50MB per failed test, failures only).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ffmpeg is not preinstalled on current ubuntu-latest runner images.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
ffmpeg reads stdin by default, swallowing the piped find output inside
the while loop and corrupting the remaining file paths.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- joystick: mapProjectData referenced the undeclared key 'level' instead
  of 'gameScene' (it only worked through the orchestrator's fallback to
  the first scene).
- plinkoMultiplier's #project-manager-drawer-close selectors are
  actually valid: DrawerTopBar builds its close button id from its own
  id. Teach the checker this pattern; only flingGame remains ignored.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Log in with the dev test account through the tutorial's own flow: when
  an absenceOfElement step targets an existing element (e.g. #login-now),
  click it and complete the login dialog that opens.
- Follow 'Right click ... and select **X**' tooltips: open the context
  menu and click the bold menu items.
- Drop as many instances as instancesCount requires, at spread positions.
- Verify filled values stick and retype like a user when the editor
  resets an uncontrolled input (variables list).
- Dismiss unexpected dialogs whenever a step fails to advance (the dev
  leaderboard-creation 404 dialog is expected: template leaderboards
  only exist in production).
- plinkoMultiplier is no longer expected to fail; only flingGame remains.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Three Playwright projects matching the editor's responsive thresholds:
  desktop (1600x900), tablet (1024x768), mobile (844x390 landscape).
- CI runs them as parallel matrix jobs, each uploading its own
  tutorial-videos-<project> and test-traces-<project> artifacts.
- Mobile player adaptations, mirroring real user behavior: select then
  drag with the drop in the visible canvas area, reopen the objects
  drawer when the object is hidden, and search a virtualized list for
  the expected item using the tooltip's bold text.
- tilemapPlatformer is marked known broken on mobile: at the tile
  painting step the properties drawer closes and the tutorial leaves the
  user without any guidance.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Check out GDevelop master (the orchestrator test-mode hook is being
  merged there) and run on pushes to main plus an hourly schedule, which
  catches editor changes breaking tutorials.
- Shorter artifact retention for scheduled runs (3 days vs 14).
- Ping Discord on failure when the TUTORIALS_CI_DISCORD_WEBHOOK secret
  is set.
- flingGame is fully skipped instead of expected-to-fail: there is no
  plan to fix it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
On pull requests, diff against the base branch and play only the
tutorials whose json changed — all of them when the test harness itself
changed, none when the changes concern neither.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A new push cancels the still-running workflow of the same pull request
or branch. The push trigger now only covers main: pull requests are
covered by the pull_request event (the automatic-tests entry caused
duplicate runs once the PR was opened).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Harness changes take precedence over the modified-tutorials filter: a
PR changing both e2e code and a tutorial was only playing that tutorial.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant