qa-pwa
PWA testing: 5 skills (workbox-tests carrying the cache-strategy design reference, web-push-tests, service-worker-lifecycle-tests carrying the general Playwright SW harness, offline-fallback-tests, add-to-homescreen-flow-tests carrying the install-flow reference contract) and 1 agent (pwa-test-author, one Playwright spec per PWA surface) - the single home for service-worker, install-flow, and cache-strategy testing, distinct from qa-notifications' cross-channel push harness
Install this plugin
/plugin install qa-pwa@testland-qaPart of role bundle: qa-role-frontend
qa-pwa
Workbox recipes (with cache-strategy design), offline fallback patterns, web-push subscription lifecycle testing, the service-worker state machine plus the general Playwright SW harness, and the single install-flow skill (reference contract + per-PWA suite builder) - the single home for service-worker, install-flow, and cache-strategy testing, distinct from qa-notifications' cross-channel push harness
Components
| Type | Name | Description |
|---|---|---|
| skill | workbox-tests | Test Workbox-built service workers - recipes, precache manifest, workbox-window events, workbox-expiration and workbox-cacheable-response plugin gates; cache-strategy design (strategy per route type, TTL + invalidation) in references/ |
| skill | web-push-tests | Test browser web-push subscription lifecycle - pushManager.subscribe, VAPID JWT (ES256, aud/exp/sub per RFC 8292), pushsubscriptionchange, RFC 8030 410/413/429 handling, unsubscribe() |
| skill | service-worker-lifecycle-tests | Emit per-SW state-machine spec - parsed → installing → installed → activating → activated → redundant, waitUntil, skipWaiting + Clients.claim upgrade path; general Playwright SW harness + cache-strategy assertions in references/ |
| skill | offline-fallback-tests | Emit per-route offline test suite - walks Jake Archibald's eight cookbook recipes, layers Workbox offlineFallback(), pins Cache Storage / IndexedDB / Storage Manager choice |
| skill | add-to-homescreen-flow-tests | The install-flow skill: reference contract (installability gate, beforeinstallprompt handshake, per-platform paths, display-mode signal) in references/ + the per-PWA Add-to-Home-Screen suite builder with per-cell tests, iOS metadata, post-install MQ |
| agent | pwa-test-author | Author ONE Playwright spec per PWA surface - detects surface from manifest + service-worker registration, composes the matching qa-pwa skill, emits tests/pwa-<surface>.spec.ts; refuses on iOS Safari install-flow (no beforeinstallprompt) |
Install
/plugin marketplace add testland/qa
/plugin install qa-pwa@testland-qaSkills
add-to-homescreen-flow-tests
The single install-flow skill: the reference contract for the PWA install flow (installability gate fields, `beforeinstallprompt` handshake, per-platform paths - Android WebAPK / iOS Share menu / Firefox no-op - and the `display-mode` post-install signal, in references/install-flow-reference.md) plus the build-an-X workflow that emits the Add-to-Home-Screen suite. Walks the four-stage timeline, emitting one test per gate cell per [web.dev/articles/install-criteria][install-criteria], the deferred-prompt → `prompt()` → `userChoice` chain per [web.dev/articles/customize-install][customize-install], the iOS Safari manual-metadata branch (`apple-touch-icon`) per [web.dev/learn/pwa/installation][learn-pwa], and the post-install `(display-mode: standalone)` MQ assertion. Output: a Playwright spec with per-stage cells plus a coverage matrix. Use when a PWA's manifest, icons, or install handler change, when install conversion drops at an unknown stage, or when triaging a flaky install assertion.
offline-fallback-tests
Build-an-X workflow that emits the offline-fallback test suite. Walks the eight Jake Archibald offline recipes per [web.dev/articles/offline-cookbook][off-cookbook] (`Cache only`, `Network only`, `Cache, falling back to network`, `Cache and network race`, `Network falling back to cache`, `Cache then network`, `Generic fallback`, `Service Worker side templating`), maps each recipe to its assertion shape, layers the Workbox `offlineFallback()` recipe per [developer.chrome.com/docs/workbox/modules/workbox-recipes][wb-recipes], and pins the offline storage strategy (Cache Storage vs IndexedDB vs Storage Manager `persist()`/`estimate()`) per [web.dev/learn/pwa/offline-data][off-data]. Output: a Playwright spec file with one test per route's chosen recipe + a coverage matrix mapping recipes to URL patterns. Use when a route's SW caching behavior is being chosen or changed, or when a "doesn't work offline" report needs the failing route's recipe localized.
service-worker-lifecycle-tests
Build-an-X workflow that emits per-SW state-transition tests covering the six `ServiceWorkerState` values per [w3c-github-io/ServiceWorker][sw-spec] (`parsed → installing → installed → activating → activated → redundant`), the `install` / `activate` / `fetch` event handlers per [MDN Service Worker API][mdn-sw], `event.waitUntil()` lifetime extension, `ServiceWorkerGlobalScope.skipWaiting()` and `Clients.claim()` upgrade-path semantics, the `statechange` event on `ServiceWorker` objects, `ServiceWorkerRegistration.update()`, and `navigator.serviceWorker.controller` checks. Output: a Playwright spec file with one test per transition plus a clean upgrade-path test (v1 active → v2 installed/waiting → v2 activated, with claim()). The general Playwright SW harness, `service-worker-mock` unit tests, and cache-strategy assertions live in references/. Use when authoring the baseline lifecycle spec, when a deploy leaves users stuck on the old service worker, or when a site's caching / offline behavior is uncovered.
web-push-tests
Test the browser web-push subscription lifecycle - `pushManager.subscribe({ userVisibleOnly, applicationServerKey })` per [W3C Push API][w3c-push] returning a `PushSubscription` with `endpoint` + `keys.p256dh` + `keys.auth` + optional `expirationTime`; the `pushsubscriptionchange` service-worker event on refresh / revoke / expiry; the `push` event delivery with `PushMessageData`; VAPID auth per RFC 8292 (ES256 JWT, `aud` / `exp` ≤ 24h / `sub`); RFC 8030 push-service responses (201 Created, 410 Gone for expired endpoints, 413 Payload Too Large, 429); and `unsubscribe()` cleanup. Use when a PWA ships web-push and the subscription lifecycle needs release-gate coverage - scoped to the browser Push API, not to cross-channel delivery over native APNs / FCM.
workbox-tests
Test Workbox-built service workers - pin behavior of the named recipes (`pageCache`, `staticResourceCache`, `imageCache`, `googleFontsCache`, `offlineFallback`, `warmStrategyCache`) per [developer.chrome.com/docs/workbox/modules/workbox-recipes][wb-recipes]; validate `workbox-precaching` manifest injection (`__WB_MANIFEST` revisioning); assert `workbox-routing` route handler matches; assert `workbox-expiration` and `workbox-cacheable-response` plugin gates; and verify the `workbox-window` registration helper events (`installed`, `waiting`, `controlling`, `activated`). Cache-strategy design (which strategy per route type, TTL + version-bump invalidation, migrating a hand-rolled sw.js to Workbox) lives in references/cache-strategy-design.md. Use when a project ships (or is adopting) a Workbox service worker and its strategy choices or recipe behavior need pinning against refactors or a version upgrade.