// apps/web/e2e/smoke.spec.ts // 기본 스모크 테스트 — 인증 없이 접근 가능한 라우트 확인. // // 실행: // npm install -D @playwright/test --workspace=@d3ro/web // npx playwright install chromium --with-deps // npm run test:e2e --workspace=@d3ro/web import { test, expect } from '@playwright/test' test.describe('Smoke: unauthenticated access', () => { test('루트(/)는 /login으로 리다이렉트된다 (Supabase 미설정 시)', async ({ page }) => { await page.goto('/') await page.waitForURL(/\/login/, { timeout: 10000 }) expect(page.url()).toContain('/login') }) test('/login 페이지가 로드되고 D3RO VOICE 로고가 표시된다', async ({ page }) => { await page.goto('/login') await expect(page.getByText(/D3RO VOICE/i)).toBeVisible({ timeout: 10000 }) }) test('/login에 Google/GitHub OAuth 버튼이 보인다', async ({ page }) => { await page.goto('/login') await expect(page.getByRole('button', { name: /Google/i })).toBeVisible() await expect(page.getByRole('button', { name: /GitHub/i })).toBeVisible() }) test('/dashboard는 미로그인 시 /login으로 리다이렉트', async ({ page }) => { await page.goto('/dashboard') await page.waitForURL(/\/login/, { timeout: 10000 }) expect(page.url()).toContain('/login') }) test('/meetings도 미로그인 시 /login으로 리다이렉트', async ({ page }) => { await page.goto('/meetings') await page.waitForURL(/\/login/, { timeout: 10000 }) expect(page.url()).toContain('/login') }) test('/accept-invite?token=bogus는 페이지 로드 (에러 메시지 표시)', async ({ page }) => { await page.goto('/accept-invite?token=bogus') await expect(page.getByText(/TEAM INVITE/i)).toBeVisible({ timeout: 10000 }) }) })