chore(frontend): vitest runner + WKT parser unit tests (#999) #1132
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#1132
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "chore/frontend-vitest-wkt-tests"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что
Заводит frontend test-runner (vitest) и покрывает самый рисковый непокрытый код — WKT-парсер риск-зон #999.
Контекст: в
frontend/было 4 теста-файла, но без раннера (нетtest-скрипта, конфига, deps, CI) — они никогда не запускались. А hand-rolled WKT-парсер #999 (вMarketLayers.tsx) имел ноль покрытия и не прогоняется на тестовом участке (у него нет риск-зон).Содержимое
@→src, jest-dom matchers) +test/test:watchскрипты + devDeps (vitest 2.1, @vitejs/plugin-react, jsdom, @testing-library/{react,dom,jest-dom,user-event}). Lockfile перегенерирован (оба файла; alpine-musl бинарники проверены).jest.fn→vi.fn(Drawer); исправлен устаревший DOM-assert subtitle (HeadlineBar — новый assert тестит реальный контракт, не tautology); убраны stale jest-комментарии.src/lib/wkt.ts(чистый behavior-preserving рефактор, байт-сверено) + EWKT-толерантность (strip ведущегоSRID=\d+;) +src/lib/__tests__/wkt.test.ts(16 кейсов: порядок lon/lat, дырки, MULTIPOLYGON, EWKT, garbage→null, <3-точки→null, LINESTRING→null).Качество / безопасность деплоя
code-reviewer: ✅ APPROVE. Deploy-abort gate проверен глубоко:npm ci --legacy-peer-deps --dry-runexit 0 (без Missing); platform-targeted--os=linux --cpu=x64 --libc=muslexit 0 — корректно подбирает@rollup/rollup-linux-x64-musl+@esbuild/linux-x64(единый Go-бинарь работает на musl). Lock ⟷ package.json консистентны → Dockerfilenpm ciна alpine не упадёт (риск PR #344 не воспроизводится).any/console в source; все test-пакеты в devDependencies.Follow-up
CI-степ (
.forgejo/workflows/) — отдельный devops-PR (намеренно не тронут здесь). Тогда тесты будут гоняться на каждом frontend-PR.Refs #999.
- Wire vitest (jsdom, globals, @ alias->src, jest-dom matchers); add test / test:watch scripts and dev deps (vitest 2.1, @vitejs/plugin-react, jsdom, @testing-library/{react,dom,jest-dom,user-event}); regen lockfile (both package.json + package-lock.json, alpine-musl binaries verified). - Revive 4 orphaned tests: jest.fn->vi.fn (Drawer); fix outdated subtitle DOM assertion (HeadlineBar); drop stale jest setup comments. - Extract WKT->GeoJSON parser (wktToGeometry/splitTopLevel/parseRing) from MarketLayers into src/lib/wkt.ts (pure, behavior-preserving refactor) + add EWKT SRID-prefix tolerance; cover with src/lib/__tests__/wkt.test.ts (16 cases incl. lon/lat order, holes, multipolygon, EWKT, garbage->null). 57 tests green; type-check green; build green. CI wiring is a devops follow-up. Refs #999.