diff --git a/frontend/e2e/letter.spec.ts b/frontend/e2e/letter.spec.ts index d9023a2..7ed1b5f 100644 --- a/frontend/e2e/letter.spec.ts +++ b/frontend/e2e/letter.spec.ts @@ -186,23 +186,24 @@ test.describe("Letter Drafting (Real Backend)", () => { await expect(page.getByText(/breaking the seal/i)).toBeHidden({ timeout: 10000, }); - // Check recipient on the front of the envelope await expect(page.getByText(new RegExp(recipientName, "i"))).toBeVisible(); - // Flip the envelope to the back (click the recipient name or the front div to flip) + // Flip the envelope to the back await page.getByText(new RegExp(recipientName, "i")).click(); + // Wait for flip transition (2s) + await page.waitForTimeout(2500); // Reveal the letter: click seal then click letter - // Wait for flip animation to progress - await page.getByAltText("Seal").waitFor({ state: "visible" }); - await page.getByAltText("Seal").click({ force: true }); + await page.getByAltText("Seal").click(); + // Wait for flap transition + await page.waitForTimeout(1500); // Click the letter to pull it out - await page.locator("#letter").click({ force: true }); + await page.locator("#letter").click(); // Wait for reveal transition - await expect(page.locator("#letter")).toBeHidden({ timeout: 15000 }); + await expect(page.locator("#letter")).toBeHidden({ timeout: 20000 }); // Also check if we are redirected to the Reader if we manually go to the Editor URL const readerUrl = page.url(); diff --git a/frontend/package.json b/frontend/package.json index 1d28cb0..7af9d67 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -16,7 +16,7 @@ "test:watch": "vitest", "test:coverage": "vitest run --coverage", "test:e2e": "playwright test", - "test:e2e:ui": "playwright test --ui" + "test:e2e:ui": "playwright test --ui --ui-host=0.0.0.0 --ui-port=43008" }, "dependencies": { "@fontsource-variable/jost": "^5.2.8", diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts index 95c106c..13007d3 100644 --- a/frontend/playwright.config.ts +++ b/frontend/playwright.config.ts @@ -14,7 +14,6 @@ const baseUrl = getBaseUrl( env.FRONTEND_PORT, ); -console.log(baseUrl); export default defineConfig({ timeout: 60000, expect: { @@ -61,7 +60,7 @@ export default defineConfig({ /* Run your local dev server before starting the tests */ webServer: { - command: "bun run dev -- --mode e2e", + command: "npm run dev -- --mode e2e", url: getBaseUrl( process.env.SSL_ENABLED === "true", process.env.FRONTEND_DOMAIN, diff --git a/frontend/src/components/ui/EnvelopeReveal.tsx b/frontend/src/components/ui/EnvelopeReveal.tsx index 3fc81d6..1e16296 100644 --- a/frontend/src/components/ui/EnvelopeReveal.tsx +++ b/frontend/src/components/ui/EnvelopeReveal.tsx @@ -20,6 +20,7 @@ export function EnvelopeReveal({ const flapCheckbox = useRef(null); const handleClick = () => { + if (revealLetter) return; setRevealLetter(true); setTimeout(() => { onRevealComplete(); @@ -45,7 +46,7 @@ export function EnvelopeReveal({ Seal
diff --git a/scripts/run-e2e.sh b/scripts/run-e2e.sh index 45850c6..4ed3f09 100755 --- a/scripts/run-e2e.sh +++ b/scripts/run-e2e.sh @@ -1,6 +1,8 @@ #!/bin/bash set -e +# Usage: ./run-e2e.sh [--docker] [--ui] + # Use podman if available. Not everyone has it CONTAINER_BIN=$(command -v podman || command -v docker) if [ -z "$CONTAINER_BIN" ]; then @@ -26,7 +28,7 @@ else exit 1 fi -# This cleans up containers. Very useful for local e2e to free system resources immediately. +# This cleans up django backend process and containers. Very useful for local e2e to free system resources immediately. cleanup() { echo "Cleaning up..." $CONTAINER_BIN rm -f "$DB_NAME" 2>/dev/null || true @@ -59,4 +61,22 @@ mkdir -p ./tmp/logs (cd backend && uv run manage.py serve) > ./tmp/logs/backend.log 2>&1 & BACKEND_PID=$! -cd frontend && bun run test:e2e "$@" +TEST_COMMAND="test:e2e" +MODE="local" + +for arg in "$@"; do + echo "$arg" + if [ "$arg" = "--ui" ]; then + TEST_COMMAND="test:e2e:ui" + fi + if [ "$arg" = "--docker" ]; then + MODE="docker" + fi +done + +# optionally using docker to run playwright since someone at microsoft thought it'd be nice to not support fedora :) +if [ $MODE = "docker" ]; then + $CONTAINER_BIN run --rm -it --network host -v $(pwd):/e2e:Z -w /e2e/frontend -p 43008:43008 mcr.microsoft.com/playwright:v1.59.1-noble npm run $TEST_COMMAND +else + cd frontend && bun run $TEST_COMMAND +fi