diff --git a/web/scripts/dev_run.sh b/web/scripts/dev_run.sh index 785db87..a6ec072 100755 --- a/web/scripts/dev_run.sh +++ b/web/scripts/dev_run.sh @@ -169,4 +169,25 @@ run_with_label "$COLOR_APP" "app " uv run granian --interface asgi --host 1 run_with_label "$COLOR_WORKER" "worker" uv run python -u -m padelnomics.worker run_with_label "$COLOR_CSS" "css " make css-watch +# Open a private/incognito browser window once the server is ready. +# Polls /auth/dev-login until it responds, then launches the browser. +( + DEV_URL="http://localhost:5000/auth/dev-login?email=dev@localhost" + for i in $(seq 1 20); do + sleep 0.5 + if curl -s -o /dev/null -w "%{http_code}" "$DEV_URL" 2>/dev/null | grep -qE "^[23]"; then + break + fi + done + if command -v google-chrome >/dev/null 2>&1; then + google-chrome --incognito "$DEV_URL" &>/dev/null & + elif command -v chromium >/dev/null 2>&1; then + chromium --incognito "$DEV_URL" &>/dev/null & + elif command -v chromium-browser >/dev/null 2>&1; then + chromium-browser --incognito "$DEV_URL" &>/dev/null & + elif command -v firefox >/dev/null 2>&1; then + firefox --private-window "$DEV_URL" &>/dev/null & + fi +) & + wait diff --git a/web/src/padelnomics/admin/routes.py b/web/src/padelnomics/admin/routes.py index 8e83dbc..a5945fa 100644 --- a/web/src/padelnomics/admin/routes.py +++ b/web/src/padelnomics/admin/routes.py @@ -2973,9 +2973,9 @@ async def outreach_import(): await execute( """INSERT INTO suppliers (name, slug, country_code, region, category, website, - tier, outreach_status, created_at) - VALUES (?, ?, ?, 'Europe', ?, ?, 'free', 'prospect', ?)""", - (name, slug, country_code, category, website, now), + contact_email, tier, outreach_status, created_at) + VALUES (?, ?, ?, 'Europe', ?, ?, ?, 'free', 'prospect', ?)""", + (name, slug, country_code, category, website, contact_email, now), ) existing_emails.add(contact_email) imported += 1 diff --git a/web/tests/test_outreach.py b/web/tests/test_outreach.py index e72bd8a..6e46c5e 100644 --- a/web/tests/test_outreach.py +++ b/web/tests/test_outreach.py @@ -393,11 +393,14 @@ class TestCSVImport: assert resp.status_code == 302 rows = await core.fetch_all( - "SELECT name, outreach_status FROM suppliers WHERE outreach_status = 'prospect'" + "SELECT name, contact_email, outreach_status FROM suppliers WHERE outreach_status = 'prospect'" ) - names = {r["name"] for r in rows} - assert "BuildCo" in names - assert "CourtTech" in names + by_name = {r["name"]: r for r in rows} + assert "BuildCo" in by_name + assert "CourtTech" in by_name + # contact_email must be persisted (regression: was silently dropped) + assert by_name["BuildCo"]["contact_email"] == "build@example.com" + assert by_name["CourtTech"]["contact_email"] == "court@example.com" async def test_import_deduplicates_by_email(self, admin_client, db): await _insert_supplier(db, name="Existing", contact_email="dupe@example.com", outreach_status=None)