From 73818767466a03f345804fcc297f18f1e151bf82 Mon Sep 17 00:00:00 2001 From: hhhjin Date: Sun, 12 Apr 2026 16:36:33 +0900 Subject: [PATCH] test: add authenticated upload e2e flow --- .gitignore | 1 + .../upload-form/components/UploadView.tsx | 6 +- client/routes/index.tsx | 11 + e2e/auth.setup.ts | 32 +++ e2e/auth.shared.ts | 1 + e2e/authenticated-upload.spec.ts | 49 +++++ e2e/home.shared.ts | 8 + e2e/public-upload.spec.ts | 4 + playwright.config.ts | 18 +- server/index.ts | 2 + server/lib/test-auth.ts | 1 + server/routes/test-auth.route.ts | 204 ++++++++++++++++++ vite.config.ts | 36 ++-- 13 files changed, 353 insertions(+), 20 deletions(-) create mode 100644 e2e/auth.setup.ts create mode 100644 e2e/auth.shared.ts create mode 100644 e2e/authenticated-upload.spec.ts create mode 100644 e2e/home.shared.ts create mode 100644 server/lib/test-auth.ts create mode 100644 server/routes/test-auth.route.ts diff --git a/.gitignore b/.gitignore index 8ca8bbf..73a1cc0 100644 --- a/.gitignore +++ b/.gitignore @@ -172,6 +172,7 @@ dist .output playwright-report/ test-results/ +e2e/.auth/ .DS_Store diff --git a/client/features/upload-form/components/UploadView.tsx b/client/features/upload-form/components/UploadView.tsx index 015394d..4bc92bd 100644 --- a/client/features/upload-form/components/UploadView.tsx +++ b/client/features/upload-form/components/UploadView.tsx @@ -74,6 +74,10 @@ export function UploadView({ const selectedOverflowTheme = OVERFLOW_THEME_OPTIONS.find( (option) => option.value === selectedTheme, ); + const requiresTurnstile = + import.meta.env.PROD && + import.meta.env.VITE_PUBLIC_E2E !== "1" && + !isAuthenticated; useEffect(() => { if (isPermanent) { @@ -437,7 +441,7 @@ export function UploadView({ !selectedFile || isUploading || !!uploadError || - (import.meta.env.PROD && !turnstileToken) + (requiresTurnstile && !turnstileToken) } onClick={onUpload} > diff --git a/client/routes/index.tsx b/client/routes/index.tsx index 6b42ddc..e9676b4 100644 --- a/client/routes/index.tsx +++ b/client/routes/index.tsx @@ -95,6 +95,7 @@ export const Route = createFileRoute("/")({ function Home() { const { t, i18n } = useTranslation(); + const [isHomeReady, setIsHomeReady] = useState(false); const [expirationDays, setExpirationDays] = useState(30); const [selectedTheme, setSelectedTheme] = useState("default"); const [turnstileToken, setTurnstileToken] = useState(null); @@ -110,6 +111,10 @@ function Home() { const { data: session } = authClient.useSession(); + useEffect(() => { + setIsHomeReady(true); + }, []); + useEffect(() => { setExpirationDays((prev) => { // Logged in: default to Permanent (-1) if user hasn't changed it yet. @@ -237,6 +242,12 @@ function Home() { return ( <> +