The console could not create dictionary entries, and team pages showed a static member list with no record of who changed what. Dictionary management, a knowledge upload form, and a team activity feed are now available, alongside a download center that links the published desktop installer feed rather than repository-local paths that no deploy ships. Red-team e2e coverage was added for the account and team flows touched here.
45 lines
1.8 KiB
TypeScript
45 lines
1.8 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('/')
|
|
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 })
|
|
})
|
|
})
|