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