chore(frontend): vitest runner + WKT parser unit tests (#999) #1132

Merged
bot-backend merged 1 commit from chore/frontend-vitest-wkt-tests into main 2026-06-07 11:47:02 +00:00
Collaborator

Что

Заводит frontend test-runner (vitest) и покрывает самый рисковый непокрытый код — WKT-парсер риск-зон #999.

Контекст: в frontend/ было 4 теста-файла, но без раннера (нет test-скрипта, конфига, deps, CI) — они никогда не запускались. А hand-rolled WKT-парсер #999MarketLayers.tsx) имел ноль покрытия и не прогоняется на тестовом участке (у него нет риск-зон).

Содержимое

  • vitest (jsdom, globals, alias @→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 бинарники проверены).
  • Оживлены 4 orphaned-теста: jest.fn→vi.fn (Drawer); исправлен устаревший DOM-assert subtitle (HeadlineBar — новый assert тестит реальный контракт, не tautology); убраны stale jest-комментарии.
  • WKT-парсер вынесен из MarketLayers в 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-run exit 0 (без Missing); platform-targeted --os=linux --cpu=x64 --libc=musl exit 0 — корректно подбирает @rollup/rollup-linux-x64-musl + @esbuild/linux-x64 (единый Go-бинарь работает на musl). Lock ⟷ package.json консистентны → Dockerfile npm ci на alpine не упадёт (риск PR #344 не воспроизводится).
  • WKT-вынос byte-identical (только EWKT-strip добавлен), call-site не изменён → риск-зон рендер-путь не тронут.
  • 57 тестов зелёные (41 оживлённых + 16 WKT); type-check зелёный; build зелёный; lint чисто; no any/console в source; все test-пакеты в devDependencies.

Follow-up

CI-степ (.forgejo/workflows/) — отдельный devops-PR (намеренно не тронут здесь). Тогда тесты будут гоняться на каждом frontend-PR.

Refs #999.

## Что Заводит frontend test-runner (vitest) и покрывает самый рисковый непокрытый код — WKT-парсер риск-зон #999. Контекст: в `frontend/` было **4 теста-файла, но без раннера** (нет `test`-скрипта, конфига, deps, CI) — они никогда не запускались. А hand-rolled WKT-парсер #999 (в `MarketLayers.tsx`) имел ноль покрытия и не прогоняется на тестовом участке (у него нет риск-зон). ## Содержимое - **vitest** (jsdom, globals, alias `@`→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 бинарники проверены). - **Оживлены 4 orphaned-теста**: `jest.fn→vi.fn` (Drawer); исправлен устаревший DOM-assert subtitle (HeadlineBar — новый assert тестит реальный контракт, не tautology); убраны stale jest-комментарии. - **WKT-парсер вынесен** из MarketLayers в `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-run` exit 0 (без Missing); platform-targeted `--os=linux --cpu=x64 --libc=musl` exit 0 — корректно подбирает `@rollup/rollup-linux-x64-musl` + `@esbuild/linux-x64` (единый Go-бинарь работает на musl). Lock ⟷ package.json консистентны → Dockerfile `npm ci` на alpine не упадёт (риск PR #344 не воспроизводится). - WKT-вынос byte-identical (только EWKT-strip добавлен), call-site не изменён → риск-зон рендер-путь не тронут. - **57 тестов зелёные** (41 оживлённых + 16 WKT); type-check зелёный; build зелёный; lint чисто; no `any`/console в source; все test-пакеты в devDependencies. ## Follow-up CI-степ (`.forgejo/workflows/`) — отдельный devops-PR (намеренно не тронут здесь). Тогда тесты будут гоняться на каждом frontend-PR. Refs #999.
bot-backend added the
scope/frontend
site-finder
labels 2026-06-07 11:46:59 +00:00
bot-backend added 1 commit 2026-06-07 11:47:00 +00:00
chore(frontend): add vitest runner + WKT parser unit tests
Some checks failed
CI / changes (push) Successful in 6s
CI / backend-tests (push) Has been skipped
Deploy / deploy (push) Blocked by required conditions
CI / changes (pull_request) Successful in 5s
CI / backend-tests (pull_request) Has been skipped
Deploy / changes (push) Successful in 6s
Deploy / build-backend (push) Has been skipped
Deploy / build-worker (push) Has been skipped
Deploy / build-frontend (push) Has been cancelled
cdb6035e39
- 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.
bot-backend merged commit cdb6035e39 into main 2026-06-07 11:47:02 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1132
No description provided.