Files

2.9 KiB

Smoke Test Harness

The scripts/agent/smoke-test.mjs script verifies critical application flows (login, relay connection, publishing, DM decryption) using a headless browser (Playwright) and a Node.js Nostr client.

It is designed to be lightweight, fast, and suitable for both local development and CI/CD pipelines.

Features

  • Ephemeral Keys: Generates fresh keys for every run; never touches your private keys.
  • Headless Browser: Uses Playwright to verify UI rendering and login state.
  • End-to-End Verification: Publishes events via Node.js client and verifies them in the browser, and vice-versa.
  • Artifact Generation: produces logs, JSON summaries, and screenshots on failure (or success).
  • Flexible Configuration: Supports local relays, external relays, and custom timeouts.

Usage

Local Development (Default)

Runs with a local ephemeral relay (port 8899) and starts the app with npx serve (port 8000).

npm run test:smoke
# OR
node scripts/agent/smoke-test.mjs

Custom Output Directory

node scripts/agent/smoke-test.mjs --out=artifacts/my-run

External Relays

To test against real relays (e.g., in a staging environment):

node scripts/agent/smoke-test.mjs --relays="wss://relay.example.com,wss://relay2.example.com" --serve=none --confirm-public

Note: When using public/external relays, you must provide --confirm-public to acknowledge that test data will be published. The test uses a unique d tag and ephemeral keys to minimize pollution, but always use test-specific relays when possible.

CLI Options

Option Type Default Description
--relays string ws://localhost:8899 Comma-separated list of relay URLs.
--serve string npx How to serve the app: npx, python, or none.
--out string artifacts Directory to save logs, screenshots, and summaries.
--timeout number 30 Timeout in seconds for UI and network operations.
--burst number 1 (Unused currently) Number of events to publish in burst.
--dry-run boolean false If true, skips publishing and browser interactions.
--confirm-public boolean false Required if non-localhost relays are used.

Artifacts

After a run, check the output directory (default artifacts/):

  • smoke-YYYYMMDD.log: Full execution log.
  • smoke-summary-YYYYMMDD.json: Structured summary (status, event IDs, pubkeys).
  • smoke-test-ui.png: Screenshot of the feed (success state).
  • smoke-fail-*.png: Screenshots captured upon failure (login or feed).

CI Integration

To run this in GitHub Actions or other CI:

- name: Install Playwright Browsers
  run: npx playwright install --with-deps chromium

- name: Build App
  run: npm run build

- name: Run Smoke Test
  run: node scripts/agent/smoke-test.mjs --serve=npx --timeout=60