feat(phase2): phase 6 - integration & polish

Fix all build/type/lint errors, write 60 new tests (175 total),
update seed with new widget types and team board permissions,
install missing svelte-i18n dependency, fix DynamicIcon for Svelte 5.
This commit is contained in:
2026-03-24 23:43:31 +03:00
parent 5bb4fbcedf
commit 87ed928a3a
17 changed files with 2057 additions and 59 deletions
+20 -4
View File
@@ -2,10 +2,12 @@
## Current State
Phase 1 (OAuth/Authentik Integration) and Phase 2 (DnD) are complete.
Installed `openid-client` v6.8.2. OAuth login flow uses PKCE and issues local JWT tokens.
Login page conditionally shows OAuth button and/or local form based on `authMode` SystemSettings.
Admin settings page has a working "Test Connection" button for OAuth configuration.
All 6 phases complete. The codebase is fully integrated and passing all checks.
- `npm run build` succeeds
- `npm run check` passes (0 errors)
- `npm run lint` passes (0 errors)
- `npm test` passes (175 tests, 14 test files)
## Temporary Workarounds
- None yet
@@ -77,3 +79,17 @@ Admin settings page has a working "Test Connection" button for OAuth configurati
- Updated `src/routes/boards/[boardId]/+page.server.ts` — loads users/groups for share dialog when user can edit
- Added ~20 new i18n keys (`board.access_*`, `board.share_*`, `board.guest_access_*`, `board.permissions_*`, `admin.perm_search_placeholder`) to both `en.json` and `ru.json`
- Big Bang strategy: no build/test verification performed — Phase 6 integration may be needed
## Phase 6 (Integration & Polish) — Completed
- Installed missing `svelte-i18n` dependency
- Fixed `oauthService.ts` type error: undefined sub claim now guarded before `fetchUserInfo` call
- Fixed `DynamicIcon.svelte`: replaced deprecated `<svelte:component>` with Svelte 5 dynamic component pattern
- Fixed lint errors: removed unused imports (`error` in oauth test, `WidgetType` in edit page), suppressed `@html` lint rule on sanitized content, marked unused `boardId` prop in DraggableSection
- Disabled `svelte/prefer-writable-derived` ESLint rule for Svelte files (DnD requires `$state` + `$effect` pattern)
- Wrote 60 new tests across 4 test files:
- `oauthService.test.ts` (10 tests) — PKCE, auth URL, callback, cache invalidation
- `widgetValidators.test.ts` (28 tests) — all 5 widget config schemas
- `boardReorder.test.ts` (9 tests) — section/widget reorder, cross-section move
- `permissions.test.ts` (13 tests) — GET/POST/DELETE board permissions API
- Updated `prisma/seed.ts` with bookmark, note, embed, status widgets + team board with user/group permissions