Files
web-cad/test_report.md
T

126 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Test Report 2 Features Implementation
**Date:** 2026-07-01
**Project:** web-cad-impl
## Features Implemented
### Feature 1: Globale Block-Bibliothek als Baumstruktur
- Backend: `global_block_folders` and `global_blocks` DB tables
- Backend: CRUD API routes with auth middleware and input validation
- Frontend: API service functions in api.ts
- Frontend: BlockLibraryTree.tsx component with tree view, drag&drop, context menu, inline rename
- Frontend: CanvasArea drop handler for global blocks
- Frontend: RightSidebar integration with token prop
### Feature 2: Gruppierungs-Tool
- RibbonBar: Gruppieren + Degruppieren buttons in Start tab
- App.tsx: handleGroup/handleUngroup with Yjs sync
- InteractionEngine: Group-aware selection (click group member → select all), group-aware movement
- RenderEngine: Dashed bounding box with group name label
- LeftSidebar: Group section with buttons
- Keyboard shortcuts: G (group), Ctrl+G (ungroup)
- GroupTool: getGroupElements() method for group expansion
## Test Results
### Backend Tests
**Command:** `cd backend && node_modules/.bin/tsc --noEmit && node_modules/.bin/vitest run`
**TypeScript Check:** Exit 0 0 errors
**Test Results:**
```
Test Files 15 passed (15)
Tests 221 passed (221)
Duration 11.25s
```
**New test file:** `backend/tests/globalBlocks.test.ts` (28 tests)
- Authentication checks (401 without token)
- Folder CRUD: create, list (root/sub/all), rename, delete with cascade
- Block CRUD: create (in folder/root), list (all/folder/root), get, rename, move, update data, delete
- Validation: missing name, empty name, non-string block_data, self-parent prevention
### Frontend Tests
**Command:** `cd frontend && node_modules/.bin/tsc --noEmit && node_modules/.bin/vitest run && node_modules/.bin/vite build`
**TypeScript Check:** Exit 0 0 errors
**Test Results:**
```
Test Files 15 passed (15)
Tests 367 passed (367)
Duration 12.83s
```
**New test file:** `frontend/tests/globalBlocks.test.ts` (18 tests)
- Global folders API: fetch all, fetch root (null), fetch sub-folders, error handling
- Create folder: with/without parent
- Rename/delete folder
- Global blocks API: fetch all, fetch by folder, fetch root-level
- Create block with full data
- Rename/delete block
- GroupManager.getGroupElements: single element, group members, any member, after ungroup
**Build:** `vite build` Exit 0 successful
```
dist/index.html 0.37 kB │ gzip: 0.27 kB
dist/assets/index-DEeNVxCv.css 55.25 kB │ gzip: 9.48 kB
dist/assets/index-BKqmT5jX.js 972.79 kB │ gzip: 327.93 kB
built in 4.33s
```
## Smoke Test Description
### Feature 1 Global Block Library
- Backend API tested via integration tests: folders and blocks can be created, listed, renamed, moved, deleted with proper auth and validation
- Frontend API service functions tested with mocked fetch: all 8 functions (getGlobalFolders, createGlobalFolder, renameGlobalFolder, deleteGlobalFolder, getGlobalBlocks, createGlobalBlock, renameGlobalBlock, deleteGlobalBlock) verify correct URL, method, headers, and body
- BlockLibraryTree component renders tree structure with expand/collapse, context menu (right-click), inline rename (double-click), drag&drop blocks onto canvas, SVG file import
### Feature 2 Group Tool
- RibbonBar shows Gruppieren and Degruppieren buttons in Start tab
- LeftSidebar shows Gruppierung section with both buttons
- Keyboard shortcuts: G triggers group, Ctrl+G triggers ungroup
- GroupManager.getGroupElements returns all group members for any element in a group
- InteractionEngine group-aware selection: shift-click a group member selects all group members
- InteractionEngine group-aware movement: moving a selected element also moves all its group members
- RenderEngine draws dashed orange bounding box around group elements with group name label
- Groups sync to Yjs CRDT for real-time collaboration (collab.setGroup)
## Files Changed
### Modified (15 files)
- backend/src/database/DatabaseInterface.ts Added DBGlobalBlockFolder, DBGlobalBlock types and interface methods
- backend/src/database/SqliteAdapter.ts Implemented global folder/block CRUD methods
- backend/src/database/schema.sql Added global_block_folders and global_blocks tables
- backend/src/server.ts Registered globalBlockRoutes
- frontend/src/App.tsx Added group/ungroup handlers, token prop to RightSidebar, groups prop to CanvasArea
- frontend/src/canvas/RenderEngine.ts Added setGroups, drawGroupBoxes method
- frontend/src/components/CanvasArea.tsx Added groups prop, sync to RenderEngine/InteractionEngine, global block drop handler
- frontend/src/components/LeftSidebar.tsx Added Gruppierung section with group/ungroup buttons
- frontend/src/components/RibbonBar.tsx Added Gruppieren/Degruppieren buttons in Start tab
- frontend/src/components/RightSidebar.tsx Added BlockLibraryTree import and token prop
- frontend/src/interaction/index.ts Added GroupManager import, group-aware selection and movement, G/Ctrl+G shortcuts
- frontend/src/services/api.ts Added 8 global block API functions
- frontend/src/styles.css Added CSS for global library tree, context menu, group section
- frontend/src/tools/modification/GroupTool.ts Added getGroupElements method
- frontend/src/types/ui.types.ts Added token to RightSidebarProps, groups to CanvasAreaProps, onGroup/onUngroup to LeftSidebarProps
### New (4 files)
- backend/src/routes/globalBlocks.ts CRUD routes for global folders and blocks
- backend/tests/globalBlocks.test.ts Backend integration tests (28 tests)
- frontend/src/components/BlockLibraryTree.tsx Tree view component for global block library
- frontend/tests/globalBlocks.test.ts Frontend API service tests (18 tests)
## Git Diff --stat
```
15 files changed, 684 insertions(+), 7 deletions(-)
```
## No Errors Encountered
All tests pass, build succeeds, TypeScript checks pass with 0 errors.