From 4fb6a41f7a867c93c6dc3d94873f9874b2ae5801 Mon Sep 17 00:00:00 2001 From: joshwanf <17016446+joshwanf@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:41:13 -0400 Subject: [PATCH 1/6] Add data-testid property to UI buttons and update e2e tests with UI changes --- bin/run-e2e-tests | 100 ++++++++++++ .../components/homeScreen/NewScreenerForm.tsx | 1 + .../components/homeScreen/ProjectsList.tsx | 1 + .../src/components/project/FormEditorView.tsx | 3 + .../src/components/project/Publish.tsx | 1 + .../benefitList/BenefitList.tsx | 2 + .../benefitList/modals/AddNewBenefitModal.tsx | 1 + .../EligibilityCheckListView.tsx | 6 +- .../src/components/shared/BdtNavbar.tsx | 1 + e2e/tests/screener.spec.ts | 151 ++++++++++-------- e2e/tests/smokeTest.spec.ts | 21 +-- 11 files changed, 213 insertions(+), 75 deletions(-) create mode 100755 bin/run-e2e-tests diff --git a/bin/run-e2e-tests b/bin/run-e2e-tests new file mode 100755 index 00000000..8d6e4517 --- /dev/null +++ b/bin/run-e2e-tests @@ -0,0 +1,100 @@ +#!/usr/bin/env bash + +# Run the Playwright e2e suite against the local dev stack. +# +# This script temporarily replaces root emulator-data with the e2e fixture data +# and restores the previous emulator-data directory before exiting. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" +BACKUP_DIR="" +SERVICES_STARTED=0 + +cd "$PROJECT_ROOT" + +cleanup() { + local exit_code=$? + + if [ "$SERVICES_STARTED" -eq 1 ]; then + devbox services stop || true + fi + + rm -rf emulator-data + if [ -n "$BACKUP_DIR" ] && [ -d "$BACKUP_DIR/emulator-data" ]; then + mv "$BACKUP_DIR/emulator-data" emulator-data + rmdir "$BACKUP_DIR" 2>/dev/null || true + fi + + exit "$exit_code" +} + +trap cleanup EXIT + +ensure_env_file() { + local target="$1" + local example="$2" + + if [ ! -f "$target" ]; then + cp "$example" "$target" + fi +} + +wait_for_url() { + local name="$1" + local url="$2" + local max_attempts="${3:-90}" + local attempt=1 + + echo "Waiting for $name at $url" + while [ "$attempt" -le "$max_attempts" ]; do + if curl --silent --show-error --output /dev/null --max-time 2 "$url"; then + echo "$name is ready" + return 0 + fi + + sleep 1 + attempt=$((attempt + 1)) + done + + echo "Timed out waiting for $name at $url" >&2 + return 1 +} + +if ! command -v devbox >/dev/null 2>&1; then + echo "devbox is required. Install it with bin/install-devbox first." >&2 + exit 1 +fi + +ensure_env_file ".env" ".env.example" +ensure_env_file "builder-frontend/.env" "builder-frontend/.env.example" +ensure_env_file "builder-api/.env" "builder-api/.env.example" +ensure_env_file "library-api/.env" "library-api/.env.example" + +devbox run install-builder-frontend-ci + +devbox services stop || true + +if [ -d emulator-data ]; then + BACKUP_DIR="$(mktemp -d)" + mv emulator-data "$BACKUP_DIR/emulator-data" +fi + +cp -R e2e/e2e-emulator-data emulator-data + +devbox services up -b +SERVICES_STARTED=1 + +wait_for_url "Firestore emulator" "http://localhost:8080/" +wait_for_url "Storage emulator" "http://localhost:9199/" +wait_for_url "Auth emulator" "http://localhost:9099/" +wait_for_url "Library API" "http://localhost:8083/" +wait_for_url "builder frontend" "http://localhost:5173/" + +( + cd e2e + npm ci + npx playwright install + npx playwright test "$@" +) diff --git a/builder-frontend/src/components/homeScreen/NewScreenerForm.tsx b/builder-frontend/src/components/homeScreen/NewScreenerForm.tsx index 15f3794f..9959e941 100644 --- a/builder-frontend/src/components/homeScreen/NewScreenerForm.tsx +++ b/builder-frontend/src/components/homeScreen/NewScreenerForm.tsx @@ -44,6 +44,7 @@ export default function NewScreenerForm({}) { type="submit" variant="secondary" id="new-screener-submit" + data-testid="submit-new-screener-button" disabled={isLoading()} > Create diff --git a/builder-frontend/src/components/homeScreen/ProjectsList.tsx b/builder-frontend/src/components/homeScreen/ProjectsList.tsx index 040a1fb1..83268ce8 100644 --- a/builder-frontend/src/components/homeScreen/ProjectsList.tsx +++ b/builder-frontend/src/components/homeScreen/ProjectsList.tsx @@ -108,6 +108,7 @@ export default function ProjectsList() { build custom checks that meet your specific needs.