Add automated browser tests (webship-js BDD + Playwright) and GitLab CI jobs
### Problem/Motivation
The Web Releases module currently has no automated functional test coverage and no browser tests wired into its GitLab CI pipeline. Regressions in the product / release content types, in the releases-listing page per product, in pathauto aliases, in the default webreleases/default recipe install, and in access control can only be caught by manual clicking.
While bringing the recipe to a clean install state, two real bugs surfaced that no test would have caught:
- recipes/default/recipe.yml listed webpage:webpage in install: (invalid) and missed several modules referenced by the shipped config (views, link, image, pathauto, media), so the recipe failed validation.
- node.type.product and node.type.release shipped with a blank help: value, which Drupal 11's recipe config installer rejects with "This value should not be blank.".
- Recipes must explicitly config.import a module's config/install — RecipeRunner::installModule() puts the config installer into syncing mode, so adding webpage to install: alone did not create the Webpage content type.
### Proposed resolution
The Web Releases module currently has no automated functional test coverage and no browser tests wired into its GitLab CI pipeline. Regressions in the product / release content types, in the releases-listing page per product, in pathauto aliases, in the default webreleases/default recipe install, and in access control can only be caught by manual clicking.
While bringing the recipe to a clean install state, two real bugs surfaced that no test would have caught:
- recipes/default/recipe.yml listed webpage:webpage in install: (invalid) and missed several modules referenced by the shipped config (views, link, image, pathauto, media), so the recipe failed validation.
- node.type.product and node.type.release shipped with a blank help: value, which Drupal 11's recipe config installer rejects with "This value should not be blank.".
- Recipes must explicitly config.import a module's config/install — RecipeRunner::installModule() puts the config installer into syncing mode, so adding webpage to install: alone did not create the Webpage content type.
Proposed Resolution
Add a complete browser-test setup integrated into CI:
-
webship-js BDD suite (tests/features/) — 19 scenarios covering:
- Admin login
- Product content type (add form fields, create, alias)
- Release content type (add form fields, required-product validation, create with autocomplete)
- Releases view page per product
- Releases listing with 4 products × 10–20 seeded releases each, plus pagination
- Access control (anonymous vs. admin)
-
Custom step definitions (tests/step-definitions/webreleases.steps.js):
I am logged in as admin, I should see a/an "X" field,
I should see the button "X", select "X" from the "Y" autocomplete
(Drupal entity-reference autocomplete via keyboard), and
the product "X" has N releases (bulk seeding via
drush php:eval for the listing/pagination tests).
-
Playwright + Cucumber-js scaffolding — cucumber.js,
playwright.config.ts, .yarnrc.yml, selector files
for Claro / Gin, and a tests/{reports,screenshots,videos}/
artifact layout.
-
GitLab CI (.gitlab-ci.yml) — cspell,
eslint, stylelint validate jobs plus
webship-js-test, which extends .testing-job-base,
needs the drupalci composer job, installs Drupal +
webreleases, installs Node 20 + yarn deps + Playwright Chromium,
and runs cucumber-js --tags "not @wip" against the live site.
Artifacts (reports / screenshots / videos / JUnit) are kept for 7 days.
-
Recipe fixes — cleaned install: module list,
added config.import: webpage: '*', and gave
node.type.product / node.type.release non-blank
help: so the recipe installs cleanly on Drupal 11.
-
Default demo content (recipes/default/content/node/)
— two placeholder products, several releases, and a "Products" landing page
built on the webpage content type with a Layout-Builder block
embedding the products view. Exported with core
drush content:export (no default_content module
needed); imported by core's recipe content runner on install.
### Checkpoints
- [x] File an issue
- [x] Addition for a new supported feature
- [x] Testing to ensure no regression
- [x] Automated unit testing coverage
- [x] Automated functional testing coverage
- [ ] UX/UI designer responsibilities
- [ ] Readability
- [ ] Accessibility
- [ ] Performance
- [ ] Security
- [ ] Documentation
- [x] Reviewed by human
- [x] Code review by maintainers
- [x] Full testing and approval
- [x] Credit contributors
- [x] Review with the product owner
- [x] Release Notes
- [x] Release
### API changes
N/A
### Data model changes
N/A
### Release notes snippet
addition: [#3591427](https://git.drupalcode.org/project/webreleases/-/work_items/3591427) Add automated browser tests (webship-js BDD + Playwright) and GitLab CI jobs
issue