CommerceOps QA Demo is a portfolio project that demonstrates end-to-end QA engineering on a small e-commerce application.
The project includes a working Angular frontend, a Node.js/PostgreSQL backend, and automated tests across browser, API, database, visual, webhook, and notification surfaces.
It is not a production commerce system. It is a demo app built to show how realistic workflows can be verified with durable backend, database, and visual evidence instead of relying only on UI messages.
- Angular 21 single-page application with customer, support, and operations roles
- Node.js API backed by PostgreSQL
- Deterministic seed data and reset flow for repeatable testing
- Customer flows for browsing, cart updates, coupons, shipping quotes, checkout, and orders
- Support and operations flows for order lookup, returns, refunds, inventory, fulfillment, and reports
- Browser-specific cases including Shadow DOM, an iframe payment form, and a canvas-rendered report
- Automated tests for browser behavior, API contracts, database integrity, visual assertions, webhooks, and notifications
- GitHub Actions workflows for the main host-runnable test surfaces
Many UI tests pass while missing the real source of truth. This project is designed around the opposite idea: each important workflow should be checked against something durable.
Examples:
- API tests validate business rules directly.
- Database tests verify persistence, constraints, and reset behavior.
- Browser tests cover interactions that only exist in the browser.
- Visual tests inspect canvas output as pixels.
- Webhook and notification tests verify signed integration behavior.
The failure-proof/ directory contains evidence that the tests are not just passing by coincidence.
It includes:
- a per-test failure matrix;
- sanitized raw failure logs;
- patch files for realistic regressions used to prove the tests fail for the right reasons.
These files are not part of the running application. They are included as review evidence for the test suite.
Start here:
| Area | Tools |
|---|---|
| Frontend | Angular 21, TypeScript |
| Backend | Node.js, PostgreSQL |
| Local services | Docker Compose |
| Browser tests | Playwright |
| API/database tests | pytest, OpenAPI validation, psycopg |
| Visual tests | OpenCV-based canvas checks |
| CI | GitHub Actions |
All demo accounts use the password commerce-demo.
| Role | Area | |
|---|---|---|
| Customer | customer@example.com |
Store, cart, checkout, orders |
| Support | support@example.com |
Order search, returns, refunds |
| Operations | ops@example.com |
Inventory, fulfillment, reports |
Requirements:
- Node.js compatible with
package.json - npm
- Docker with Compose
- Python 3.11+ for the Python test suites
Install dependencies:
npm install --no-package-lock
python3 -m venv .venv
.venv/bin/pip install -r e2e_test/requirements-test.txt
npx playwright install chromiumStart the app:
npm run db:up
npm run build
DATABASE_URL=postgresql://commerceops:commerceops@127.0.0.1:5432/commerceops npm startOpen:
http://localhost:4173
npm run check
npm run test:allnpm run test:all runs the host-runnable API, database, browser, visual, webhook, and notification suites through the local test orchestrator.
| Surface | Purpose |
|---|---|
| Browser | Login, role routing, checkout journeys, Shadow DOM, iframe, canvas reachability |
| API | Contract validation and backend business rules |
| Database | Persistence, constraints, reset behavior, API parity |
| Visual | Canvas report regression checks |
| Webhooks | Signature, idempotency, retry, and disabled-default behavior |
| Notifications | Signed receiver and outbound payload checks |
| Path | Purpose |
|---|---|
src/ |
Angular application |
server.js |
Node.js API and static file server |
db.js, db/schema.sql |
PostgreSQL persistence layer |
data/seed-state.json |
Deterministic seed data |
e2e_test/ |
Automated tests and local test doubles |
notify/ |
Optional notification receiver |
failure-proof/ |
Test-integrity evidence |
This repository is intended as a public QA engineering portfolio project.
It is not intended for real payments, real customer data, or production deployment.