Skip to content

test(e2e): overhaul the suite so every test can catch a real bug - #129

Merged
vazra merged 15 commits into
mainfrom
test/e2e-overhaul
Oct 11, 2026
Merged

vazra merged 15 commits into
mainfrom
test/e2e-overhaul

Conversation

@vazra

@vazra vazra commented Oct 11, 2026

Copy link
Copy Markdown
Owner

Every E2E spec was audited test by test. A test now stays only if it would fail when its feature breaks and Go tests or vitests can't show the same thing.

Result: 279 tests down to 125. All 125 pass locally (CI settings: image mirror + git sync). Warm-cache wall time is about 4 min; the last full CI run took 17.6 min.

Removed (154 tests):

  • tests that could not fail: static headings, conditional if (isVisible) assertions, try/catch soft-skips, [200,404]-style status checks;
  • duplicates of other E2E tests, Go handler tests or vitests;
  • empty skip stubs;
  • whole specs: 05, 03b, 13b, 31 (moved to a vitest), slow-app-templates;
  • 00-template-images, which hit Docker Hub on every push. It is now a script in the Templates workflow (on template changes and weekly).

Strengthened:

  • UI actions are checked against API, Docker, proxy and file state;
  • exact status codes;
  • fixed sleeps replaced with polling. 06-app-actions went from 126s to about 12s; it had three 30s loops polling a field with the wrong case;
  • the disaster-recovery spec (26a) was un-skipped and now passes;
  • the git sync conflict test was made deterministic, and the git sync spec runs in CI.

Infra:

  • login through the API (form login is tested only in 02);
  • shared helpers: isolated server, backups, metrics, users, proxy wait, recipe fixture;
  • MinIO and registry images come from the mirror;
  • teardown removes stacks leaked by failed specs, and the server log is uploaded with test-results/;
  • the server config moved to server-config.yaml, because config.yml clashed with SimpleDeploy's own global config file;
  • the README has a Test design rules section.

Product bugs found by the stricter tests, fixed in their own PRs: #119, #121-#128. They include:

  • backup hooks never ran;
  • disaster recovery deleted per-app config;
  • the alert rule form dropped the chosen app;
  • editing a user's role wiped their profile;
  • app names with dots or uppercase could not deploy;
  • 3 app templates and 25 service templates could not deploy, and the Woodpecker template was removed;
  • failed deploys showed no reason;
  • backup alerts were not scoped to their app;
  • a push that failed while the git remote was down was never retried.

vazra added 15 commits October 11, 2026 10:20
…ages, template image check off the per-push suite
…vate registry and DR specs

26a un-skipped: the old failures were test bugs (server config written over
the global sidecar at data_dir/config.yml, SIGTERM without waiting for the
flush, invalid role/metric). It now fails on a product bug: per-app sidecars
are pruned at boot before the reconciler re-creates app rows.
…tes as vitest, stronger archive/cleanup

- 30: one API loop over all app templates (validate-compose + docker compose
  config) plus Quick test mode for multi-endpoint templates; drops 21 UI tests
- 31 and slow-app-templates-deploy removed (vitest / templates matrix cover them)
- 95/99: assert teardown, proxy route removal, purge and delete via API state
- templates-deploy-all: no empty-200 probe passes, container check for
  probe:null templates, cleanup in finally, exact Valid compose locator
The bind-mounted temp dir is not visible to the colima VM, so registry:2
generated its own htpasswd and every login got 401.
@vazra
vazra merged commit 805406b into main Oct 11, 2026
13 checks passed
@vazra
vazra deleted the test/e2e-overhaul branch October 11, 2026 17:46
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