Files
web-cad/test_report.md
T

5.8 KiB
Raw Blame History

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.