The landing page, download pages, invite page, assetlinks and installers existed in two or three places; only site/ and the Forgejo feed are served. - apps/api-server/wwwroot: delete the stale site build, download/invite pages, .well-known copy, legacy static admin and 1.0.0 binaries. The API no longer serves static files (UseStaticFiles/fallbacks and the apk/zip blocker removed); the Next admin is the only admin UI. - Delete 19 tracked installers/packages (~568 MiB) under site/public/releases, apps/web/public/releases and wwwroot/releases; .gitignore blocks them. - apps/web: delete the download/releases pages, desktop-release.ts, the download.html and assetlinks copies, and the accept-invite page (invites are only issued to the site's /accept-invite/). e2e specs call the /app base path and check the /download redirect instead. - scripts: delete the retired release/NAS site scripts, drop the web target from sync-version, and check assetlinks in site/public only. - Delete the unused Dockerfile.admin (apps/admin/Dockerfile is used). Policy: docs/REFACTOR_POLICY.md Wave 3, W3-5 and W3-6.
40 lines
1.6 KiB
TypeScript
40 lines
1.6 KiB
TypeScript
// 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('/app')
|
|
await page.waitForURL(/\/login/, { timeout: 10000 })
|
|
expect(page.url()).toContain('/login')
|
|
})
|
|
|
|
test('/login 페이지가 로드되고 D3RO VOICE 로고가 표시된다', async ({ page }) => {
|
|
await page.goto('/app/login')
|
|
await expect(page.getByText(/D3RO[- ]VOICE/i)).toBeVisible({ timeout: 10000 })
|
|
})
|
|
|
|
test('/login에 Google/GitHub OAuth 버튼이 보인다', async ({ page }) => {
|
|
await page.goto('/app/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('/app/dashboard')
|
|
await page.waitForURL(/\/login/, { timeout: 10000 })
|
|
expect(page.url()).toContain('/login')
|
|
})
|
|
|
|
test('/meetings도 미로그인 시 /login으로 리다이렉트', async ({ page }) => {
|
|
await page.goto('/app/meetings')
|
|
await page.waitForURL(/\/login/, { timeout: 10000 })
|
|
expect(page.url()).toContain('/login')
|
|
})
|
|
})
|