Skip to content

feat(group): vollständiger Gruppen- und Member-WorkflowFeat/group function#735

Open
Lav-Sen wants to merge 8 commits into
mainfrom
feat/groupFunction
Open

feat(group): vollständiger Gruppen- und Member-WorkflowFeat/group function#735
Lav-Sen wants to merge 8 commits into
mainfrom
feat/groupFunction

Conversation

@Lav-Sen

@Lav-Sen Lav-Sen commented May 19, 2026

Copy link
Copy Markdown

✨ Summary

This PR introduces the complete Group & Member workflow, including group joining, member dashboards, tutorials, solution galleries, and archive handling.

Additionally, it includes several stability and UX improvements for progress tracking, heartbeats, and navigation.


🚀 What’s Included

Group Features

  • GroupTutorials
  • GroupSolutions
  • JoinGroup
  • ArchiveGroup

Member Features

  • MemberDashboard
  • MemberTutorial
  • MemberSolution
  • CreateStudent

Routing Improvements

  • Added dedicated member routes
  • Centralized routing logic
  • Introduced a route guard for automatic leave handling when a group becomes archived

Archive Flow Improvements

  • Members are now cleanly removed during group archival
  • Prevents future join conflicts
    (e.g. 409 Conflict on re-join attempts)

Tutorial & Solution Flow Enhancements

  • Progress updates
  • Solution submission flow
  • Thumbnail + fallback handling
  • Open in Blockly support

UI & Navigation

  • Group and Member dashboard views

  • Navbar and route updates

  • Display of:

    • Name
    • Nickname
    • Status
    • Progress

📦 Affected Areas

Group

  • Dashboard
  • Tutorials
  • Solutions
  • Join
  • Archive

Member

  • Dashboard
  • Tutorials
  • Solutions
  • CreateStudent

Routing

  • Central integration of member flows

Tutorial Viewer

  • Sidebar
  • SolutionCheck
  • TutorialFooter

Store / Actions

  • Integrated into existing data flows

🎯 Why

The goal is to provide a consistent end-to-end classroom workflow:

  1. Manage groups and allow members to join
  2. Members work through tutorials and submit solutions
  3. Teachers can monitor status and progress centrally
  4. Archiving cleanly terminates sessions and memberships

🔍 Review Notes

Please focus review on the following areas:

API Contracts

  • Group member leave / join
  • Progress POST / GET
  • Solutions create / get

@Lav-Sen
Lav-Sen requested a review from Thiemann96 May 19, 2026 10:20
@github-actions

Copy link
Copy Markdown

Tests

Test Name Status Flaky Duration
Basic Page Tests Page Loading and Structure [Basic] visits the basic page 907ms
Basic Page Tests Page Loading and Structure [Basic] displays Blockly workspace ⏭️ 1ms
Basic Page Tests Page Loading and Structure [Basic] loads with correct height (non-embedded) ⏭️ 1ms
Basic Page Tests Page Loading and Structure [Basic] displays the floating serial interface ⏭️ 1ms
Basic Page Tests Blockly Workspace Initialization [Basic] displays the start block ⏭️ 1ms
Basic Page Tests Serial Interface [Basic] displays serial connect button ⏭️ 1ms
Basic Page Tests Serial Interface [Basic] shows Web Serial API support status ⏭️ 1ms
Basic Page Tests Serial Interface [Basic] serial interface is not open by default ⏭️ 1ms
Basic Page Tests Device Selection [Basic] does not display device selection on main basic page ⏭️ 1ms
Basic Page Tests Navigation [Basic] can navigate from basic page to tutorial ⏭️ 1ms
Basic Page Tests Navigation [Basic] can navigate from basic page to gallery ⏭️ 1ms
Basic Page Tests Navigation [Basic] can navigate back to basic page from other pages ⏭️ 1ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] visits the embedded basic page 335ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] displays Blockly workspace in full height 203ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] no navbar in embedded mode 203ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] no footer in embedded mode 224ms
Basic Embedded Page Tests Embedded Projects [BasicEmbedded] loads project by ID 54ms
Basic Project Page Tests Project Loading [BasicProject] handles invalid project ID gracefully 194ms
Basic Project Page Tests Project Loading [BasicProject] displays breadcrumbs for project pages 233ms
Basic Project Page Tests Project Loading [BasicProject] displays loading state while fetching project 193ms
Basic Project Page Tests Project Workspace [BasicProject] loads workspace with project XML 199ms
Basic Project Page Tests Project Workspace [BasicProject] displays FloatingSerial for projects 195ms
Blockly Editor Page Tests [Blockly] visits the editor page 867ms
Blockly Editor Page Tests [Blockly] visits the tutorial page 214ms
Blockly Editor Page Tests [Blockly] visits the gallery page 181ms
Blockly Editor Page Tests [Gallery] clicks on a gallery item card and navigates to project detail 181ms
Blockly Editor Page Tests [Blockly] visits the faq page 175ms
Blockly Editor Page Tests [Blockly] visits the settings page 187ms
Blockly Editor Page Tests [Blockly] visits the login page 187ms
Blockly Editor Page Tests [Blockly] navigates to tutorial and back 182ms
Blockly Editor Page Tests [Blockly] selects senseBox ESP 206ms
Blockly Editor Page Tests [Blockly] selects senseBox MCU 215ms
Blockly Editor Page Tests [Blockly] selects senseBox Mini 193ms
Blockly Editor Page Tests [Blockly] changes the language in settings and verifies via headline 214ms
Blockly Editor Page Tests [Blockly] changes to tablet mode and compiles code for esp32 240ms
Blockly Editor Page Tests [Blockly] changes to tablet mode and compiles code for MCU 187ms
Blockly Editor Page Tests [Blockly] compiles code 193ms
Code Editor Page Tests [CodeEditor] visits the code editor page 721ms
Code Editor Page Tests [CodeEditor] selects senseBox ESP 184ms
Code Editor Page Tests [CodeEditor] compiles code 169ms
Code Editor Page Tests [CodeEditor] opens reset dialog 154ms
Code Editor Page Tests [CodeEditor] fetches libraries 209ms
Embedded Blockly Page Tests [Embedded] visits the embedded page 699ms
Embedded Blockly Page Tests [Embedded] displays Blockly workspace 180ms
Embedded Blockly Page Tests [Embedded] displays iPad toolbar 170ms
Embedded Blockly Page Tests [Embedded] displays workspace name component 170ms
Embedded Blockly Page Tests [Embedded] displays device selection 168ms
Embedded Blockly Page Tests [Embedded] compiles code 168ms
Embedded Blockly Page Tests [Embedded] opens share dialog and generates short link 187ms
Embedded Blockly Page Tests [Embedded] marks toolbox xml as embedded mode in portrait 184ms
Embedded Blockly Page Tests [Embedded] displays Blockly workspace on large screens (landscape) 184ms
Embedded Blockly Page Tests [Embedded] can drag and drop blocks 184ms
Embedded Blockly Page Tests [Embedded] persists workspace state 185ms
Embedded Blockly Page Tests [Embedded] closes dialog on cancel 230ms
Embedded Blockly Page Tests [Embedded] uses tablet mode for compilation with embedded-specific text 206ms
End-to-End Tutorial Flow 1. registers a new user 682ms
End-to-End Tutorial Flow 2. logs in with the registered user 181ms
End-to-End Tutorial Flow 3. navigates to /tutorial/builder 169ms
End-to-End Tutorial Flow 4. creates a new tutorial via UI 172ms
End-to-End Tutorial Flow 5. views the created tutorial 167ms
End-to-End Tutorial Flow 6. edits the tutorial title and saves 179ms
End-to-End Tutorial Flow 7. deletes the test tutorial 164ms
End-to-End Tutorial Flow 8. deletes the test user account 740ms

Github Test Reporter by CTRF 💚

@github-actions

Copy link
Copy Markdown

Tests

Test Name Status Flaky Duration
Basic Page Tests Page Loading and Structure [Basic] visits the basic page 963ms
Basic Page Tests Page Loading and Structure [Basic] displays Blockly workspace ⏭️ 1ms
Basic Page Tests Page Loading and Structure [Basic] loads with correct height (non-embedded) ⏭️ 1ms
Basic Page Tests Page Loading and Structure [Basic] displays the floating serial interface ⏭️ 1ms
Basic Page Tests Blockly Workspace Initialization [Basic] displays the start block ⏭️ 1ms
Basic Page Tests Serial Interface [Basic] displays serial connect button ⏭️ 1ms
Basic Page Tests Serial Interface [Basic] shows Web Serial API support status ⏭️ 1ms
Basic Page Tests Serial Interface [Basic] serial interface is not open by default ⏭️ 1ms
Basic Page Tests Device Selection [Basic] does not display device selection on main basic page ⏭️ 1ms
Basic Page Tests Navigation [Basic] can navigate from basic page to tutorial ⏭️ 1ms
Basic Page Tests Navigation [Basic] can navigate from basic page to gallery ⏭️ 1ms
Basic Page Tests Navigation [Basic] can navigate back to basic page from other pages ⏭️ 1ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] visits the embedded basic page 233ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] displays Blockly workspace in full height 206ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] no navbar in embedded mode 197ms
Basic Embedded Page Tests Embedded Mode [BasicEmbedded] no footer in embedded mode 199ms
Basic Embedded Page Tests Embedded Projects [BasicEmbedded] loads project by ID 55ms
Basic Project Page Tests Project Loading [BasicProject] handles invalid project ID gracefully 183ms
Basic Project Page Tests Project Loading [BasicProject] displays breadcrumbs for project pages 198ms
Basic Project Page Tests Project Loading [BasicProject] displays loading state while fetching project 212ms
Basic Project Page Tests Project Workspace [BasicProject] loads workspace with project XML 214ms
Basic Project Page Tests Project Workspace [BasicProject] displays FloatingSerial for projects 208ms
Blockly Editor Page Tests [Blockly] visits the editor page 767ms
Blockly Editor Page Tests [Blockly] visits the tutorial page 209ms
Blockly Editor Page Tests [Blockly] visits the gallery page 188ms
Blockly Editor Page Tests [Gallery] clicks on a gallery item card and navigates to project detail 167ms
Blockly Editor Page Tests [Blockly] visits the faq page 185ms
Blockly Editor Page Tests [Blockly] visits the settings page 184ms
Blockly Editor Page Tests [Blockly] visits the login page 183ms
Blockly Editor Page Tests [Blockly] navigates to tutorial and back 187ms
Blockly Editor Page Tests [Blockly] selects senseBox ESP 198ms
Blockly Editor Page Tests [Blockly] selects senseBox MCU 196ms
Blockly Editor Page Tests [Blockly] selects senseBox Mini 185ms
Blockly Editor Page Tests [Blockly] changes the language in settings and verifies via headline 195ms
Blockly Editor Page Tests [Blockly] changes to tablet mode and compiles code for esp32 230ms
Blockly Editor Page Tests [Blockly] changes to tablet mode and compiles code for MCU 197ms
Blockly Editor Page Tests [Blockly] compiles code 203ms
Code Editor Page Tests [CodeEditor] visits the code editor page 850ms
Code Editor Page Tests [CodeEditor] selects senseBox ESP 243ms
Code Editor Page Tests [CodeEditor] compiles code 243ms
Code Editor Page Tests [CodeEditor] opens reset dialog 194ms
Code Editor Page Tests [CodeEditor] fetches libraries 209ms
Embedded Blockly Page Tests [Embedded] visits the embedded page 837ms
Embedded Blockly Page Tests [Embedded] displays Blockly workspace 232ms
Embedded Blockly Page Tests [Embedded] displays iPad toolbar 202ms
Embedded Blockly Page Tests [Embedded] displays workspace name component 187ms
Embedded Blockly Page Tests [Embedded] displays device selection 199ms
Embedded Blockly Page Tests [Embedded] compiles code 196ms
Embedded Blockly Page Tests [Embedded] opens share dialog and generates short link 193ms
Embedded Blockly Page Tests [Embedded] marks toolbox xml as embedded mode in portrait 184ms
Embedded Blockly Page Tests [Embedded] displays Blockly workspace on large screens (landscape) 213ms
Embedded Blockly Page Tests [Embedded] can drag and drop blocks 200ms
Embedded Blockly Page Tests [Embedded] persists workspace state 184ms
Embedded Blockly Page Tests [Embedded] closes dialog on cancel 198ms
Embedded Blockly Page Tests [Embedded] uses tablet mode for compilation with embedded-specific text 280ms
Group & Member Flow [JoinGroup] sends access code case-insensitive (normalized uppercase) 1.8s
Group & Member Flow [GroupDashboard] hides tutorial/progress after 1 minute offline 497ms
Group & Member Flow [MemberRouteGuard] auto-leaves and redirects when group is archived 485ms
Group & Member Flow [GroupDashboard] archives group after removing all members 556ms
Group Teacher POV Flow [Teacher] creates a group and lands on group dashboard 735ms
Group Teacher POV Flow [Teacher] sees access code dialog on dashboard 215ms
Group Teacher POV Flow [Teacher] can open create-student page and add a student 186ms
Group Teacher POV Flow [Teacher] can access archive page and delete group via icon 171ms
End-to-End Tutorial Flow 1. registers a new user 693ms
End-to-End Tutorial Flow 2. logs in with the registered user 196ms
End-to-End Tutorial Flow 3. navigates to /tutorial/builder 169ms
End-to-End Tutorial Flow 4. creates a new tutorial via UI 171ms
End-to-End Tutorial Flow 5. views the created tutorial 171ms
End-to-End Tutorial Flow 6. edits the tutorial title and saves 169ms
End-to-End Tutorial Flow 7. deletes the test tutorial 183ms
End-to-End Tutorial Flow 8. deletes the test user account 790ms

Github Test Reporter by CTRF 💚

@github-actions

Copy link
Copy Markdown

cypress-run: Run #1162

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️ Pending ⏳ Other ❓ Flaky 🍂 Duration ⏱️
71 30 41 0 0 0 0 4m 37s

Some tests failed!

Name Failure Message
❌ Basic Page Tests Page Loading and Structure [Basic] displays Blockly workspace AssertionError: Timed out retrying after 10000ms: Expected to find element: `.blocklySvg`, but never found it. at Context.eval (webpack://blockly-react/./cypress/e2e/basic-page.cy.js:14:48)
❌ Basic Page Tests Page Loading and Structure [Basic] loads with correct height (non-embedded) AssertionError: Timed out retrying after 4000ms: Expected to find element: `.blocklySvg`, but never found it. at Context.eval (webpack://blockly-react/./cypress/e2e/basic-page.cy.js:18:9)
❌ Basic Page Tests Page Loading and Structure [Basic] displays the floating serial interface AssertionError: Timed out retrying after 4000ms: Expected to find element: `[data-testid="serial-connect-button"]`, but never found it. at Context.eval (webpack://blockly-react/./cypress/e2e/basic-page.cy.js:26:54)
❌ Basic Page Tests Blockly Workspace Initialization [Basic] displays the start block AssertionError: Timed out retrying after 10000ms: Expected to find element: `.blocklySvg`, but never found it. at Context.eval (webpack://blockly-react/./cypress/e2e/basic-page.cy.js:32:48)
❌ Basic Page Tests Serial Interface [Basic] displays serial connect button AssertionError: Timed out retrying after 4000ms: Expected to find element: `[data-testid="serial-connect-button"]`, but never found it. at Context.eval (webpack://blockly-react/./cypress/e2e/basic-page.cy.js:45:54)

See all failed tests here

Github Test Reporter by CTRF 💚

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants