Skip to content

Assessment: Introduce presentation assessments - #13288

Open
jsuckart wants to merge 1 commit into
developfrom
feature/assessment/introduce-presentation-assessment
Open

Assessment: Introduce presentation assessments#13288
jsuckart wants to merge 1 commit into
developfrom
feature/assessment/introduce-presentation-assessment

Conversation

@jsuckart

@jsuckart jsuckart commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR introduces the first and very basic version of the presentation assessment feature.

Checklist

General

Server

  • Important: I implemented the changes with a very good performance and prevented too many (unnecessary) and too complex database calls.
  • I strictly followed the principle of data economy for all database calls.
  • I strictly followed the server coding and design guidelines and the REST API guidelines.
  • I added multiple integration tests (Spring) related to the features (with a high test coverage).
  • I added pre-authorization annotations according to the guidelines and checked the course groups for all new REST Calls (security).

Client

  • Important: I implemented the changes with a very good performance, prevented too many (unnecessary) REST calls and made sure the UI is responsive, even with large data (e.g. using paging).
  • I strictly followed the principle of data economy for all client-server REST calls.
  • I strictly followed the client coding guidelines.
  • I strictly followed the AET UI-UX guidelines.
  • Following the theming guidelines, I specified colors only in the theming variable files and checked that the changes look consistent in both the light and the dark theme.
  • I added multiple integration tests (Vitest) related to the features (with a high test coverage), while following the test guidelines.
  • I added authorities to all new routes and checked the course groups for displaying navigation elements (links, buttons).
  • I added multiple screenshots/screencasts of my UI changes.
  • I translated all newly inserted strings into English and German.

Motivation and Context

This PR adds the basis for presentation assessment.
This is intended as a minimal first iteration that establishes the backend domain, REST API, a prototype UI and a feature toggle, while keeping the implementation scoped and independent from the existing exercise assessment flow.

Description

The PR adds:

  • A new presentation server package with domain, DTO, repository, service, and resource classes.
  • A new presentation_assessment database table for course-level presentation assessments.
  • A join table for assigning students to presentation assessments.
  • REST endpoints under /api/courses/{courseId}/presentation-assessments.
  • A new course setting presentationAssessmentsEnabled
  • A Presentations sidebar entry below Lectures, only visible to instructors when enabled for the course.
  • A presentation management UI with create/edit modal dialogs.
  • Student assignment within the create/edit presentation modal.
  • English and German translations for the new UI strings.

Steps for Testing

Prerequisites:

  • 1 Instructor
  • 2 Students
  • 1 Course where the instructor has instructor permissions
  1. Log in as an instructor.
  2. Navigate to Course Administration.
  3. Open the course settings.
  4. Verify that the Presentations Enabled toggle is disabled by default.
  5. Enable the toggle and save the course settings.
  6. Verify that the Presentations entry appears in the course sidebar below Lectures.
  7. Open Presentations.
  8. Click Create presentation.
  9. Enter a title, max points, optional result points, date, and description.
  10. Add one or more students to the presentation.
  11. Save the presentation.
  12. Verify that the presentation appears in the table.
  13. Edit the presentation and verify that the modal opens with the existing values and assigned students.
  14. Change values and save.
  15. Verify that the table reflects the updated presentation.
  16. Delete the presentation and verify that it is removed from the table.
  17. Go back to course settings, disable Presentations Enabled, save, and verify that the sidebar entry disappears.

Testserver States

You can manage test servers using Helios. Check environment statuses in the environment list. To deploy to a test server, go to the CI/CD page, find your PR or branch, and trigger the deployment.

Review Progress

Performance Review

  • I (as a reviewer) confirm that the client changes (in particular related to REST calls and UI responsiveness) are implemented with a very good performance even for very large courses with more than 2000 students.
  • I (as a reviewer) confirm that the server changes (in particular related to database calls) are implemented with a very good performance even for very large courses with more than 2000 students.

Code Review

  • Code Review 1
  • Code Review 2

Manual Tests

  • Test 1
  • Test 2

Test Coverage

Client

Class/File Line Coverage Lines Expects Ratio
course-management-container.component.ts 86.31% 480 96 20.0
course-update.component.ts 94.36% 570 274 48.1
course-group.component.ts 97.87% 199 67 33.7
course-update-dto.model.ts not found (modified) 165 ? ?
course.model.ts not found (modified) 153 ? ?
sidebar-item.service.ts 96.77% 289 34 11.8
presentation-assessment-feature.guard.ts 14.28% 14 ? ?
presentation-assessment-form-dialog.component.ts 89.41% 177 20 11.3
presentation-assessment-management.component.ts 69.90% 219 37 16.9
presentation-assessment.service.ts 85.71% 61 10 16.4
presentation-assessment.model.ts not found (modified) 11 ? ?
date-time-picker.component.ts 91.30% 232 68 29.3

Server

Class/File Line Coverage Lines
UserRepository.java 91.88% 1037
DatabaseConfiguration.java 0.00% 24
Course.java 95.54% 725
CourseCreateDTO.java 100.00% 71
CourseUpdateDTO.java 82.76% 100
PresentationAssessment.java 100.00% 79
PresentationAssessmentDTO.java 100.00% 24
PresentationAssessmentStudentDTO.java 100.00% 11
PresentationAssessmentRepository.java 50.00% 38
PresentationAssessmentService.java 95.56% 85
PresentationAssessmentResource.java 97.87% 120

Last updated: 2026-08-26 11:13:07 UTC

Screenshots

grafik grafik grafik

Summary by CodeRabbit

  • New Features
    • Added course “presentation assessments” with REST CRUD, scoring (max/result points), presentation dates, and per-assessment student assignment.
    • Added a course-level “presentation assessments” toggle that controls sidebar navigation and guards access to the management UI.
    • Added management UI (create/edit/delete) with validation and EN/DE translations.
  • Bug Fixes
    • Enforced server-side checks for access and that result points do not exceed max points; student assignment limited to enrolled students.
  • Tests
    • Added unit and integration tests covering management flows, permissions, feature-toggle behavior, and student assignment reconciliation.

Automated review screenshot

Presentation assessment create dialog

@github-project-automation github-project-automation Bot moved this to Work In Progress in Artemis Development Jul 20, 2026
@github-actions github-actions Bot added tests server Pull requests that update Java code. (Added Automatically!) client Pull requests that update TypeScript code. (Added Automatically!) database Pull requests that update the database. (Added Automatically!). Require a CRITICAL deployment. core Pull requests that affect the corresponding module course labels Jul 20, 2026
@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests July 20, 2026 19:28 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown

End-to-End Test Results

Phase Status Details
All Tests ❌ Failed
TestsPassed ☑️Skipped ⚠️Failed ❌️Time ⏱
All E2E Tests Report (PR)372 ran363 passed7 skipped2 failed42m 53s
❌ Failed Tests
  • Exam PlantUML diagram isolation › PlantUML diagrams survive navigating back and forth and rapid switching (3m 33s)
  • Programming exercise advanced participation › Programming exercise team participation › Check team participation › Instructor checks the participation (7m 9s)

Test Strategy: Running all tests (configuration or infrastructure changes detected)

Overall: ❌ E2E: real (non-flaky) test failure

🔗 Workflow Run · 📊 Test Report

@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests July 21, 2026 17:34 — with GitHub Actions Inactive
@jsuckart jsuckart changed the title Feature/assessment/introduce presentation assessment 'Assessment': Introduce presentation assessments Jul 21, 2026
@jsuckart jsuckart changed the title 'Assessment': Introduce presentation assessments ‘Assessment‘: Introduce presentation assessments Jul 21, 2026
@jsuckart jsuckart changed the title ‘Assessment‘: Introduce presentation assessments Assessment: Introduce presentation assessments Jul 21, 2026
@jsuckart
jsuckart had a problem deploying to playwright-e2e-tests July 22, 2026 08:11 — with GitHub Actions Error
@jsuckart jsuckart moved this from Work In Progress to Ready For Review in Artemis Development Jul 22, 2026
@jsuckart
jsuckart marked this pull request as ready for review July 22, 2026 08:21
@jsuckart
jsuckart requested review from a team and krusche as code owners July 22, 2026 08:21
@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests July 22, 2026 08:28 — with GitHub Actions Inactive
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Presentation assessments are introduced end-to-end, including a course feature toggle, persisted assessment and student-assignment data, instructor REST endpoints, Angular management views, validation, localization, and integration/unit tests.

Changes

Presentation assessments

Layer / File(s) Summary
Course feature flag and navigation
src/main/java/.../course/*, src/main/webapp/app/course/..., src/main/webapp/app/presentation/manage/presentation-assessment-feature.guard.ts, src/main/webapp/i18n/*/course.json
Adds the persisted course setting, maps it through Java and Angular DTOs, exposes it in course management, and controls sidebar and route access.
Assessment persistence contract
src/main/java/.../presentation/domain/*, src/main/java/.../presentation/dto/*, src/main/java/.../presentation/repository/*, src/main/java/.../core/config/DatabaseConfiguration.java
Defines assessment persistence, course/student relationships, validation DTOs, repository queries, and repository scanning.
Assessment service and REST API
src/main/java/.../presentation/service/*, src/main/java/.../presentation/web/*, src/test/java/.../PresentationAssessmentIntegrationTest.java
Implements course-scoped CRUD, authorization, feature enforcement, student assignment validation, HTTP responses, and integration coverage.
Angular assessment model and HTTP service
src/main/webapp/app/presentation/shared/*, src/main/webapp/app/presentation/manage/presentation-assessment.service.*
Adds client models and HTTP operations with Dayjs date conversion and request tests.
Angular assessment management
src/main/webapp/app/presentation/manage/presentation-assessment-*.component.*, src/main/webapp/i18n/*/presentationAssessment.json
Adds listing, create/edit dialogs, validation, student synchronization, deletion, responsive styling, localization, and component tests.

Estimated code review effort: 4 (Complex) | ~60 minutes

Suggested labels: assessment, enhancement

Sequence Diagram(s)

sequenceDiagram
  participant Instructor
  participant AngularManagement
  participant PresentationAssessmentResource
  participant PresentationAssessmentService
  participant Database
  Instructor->>AngularManagement: create or edit assessment
  AngularManagement->>PresentationAssessmentResource: send assessment request
  PresentationAssessmentResource->>PresentationAssessmentService: authorize and delegate
  PresentationAssessmentService->>Database: save assessment and student assignments
  Database-->>PresentationAssessmentService: return persisted data
  PresentationAssessmentService-->>PresentationAssessmentResource: return result
  PresentationAssessmentResource-->>AngularManagement: return HTTP response
  AngularManagement-->>Instructor: update assessment table
Loading
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 39.22% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the pull request's primary change: introducing presentation assessments.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/assessment/introduce-presentation-assessment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (2)
src/main/java/de/tum/cit/aet/artemis/presentation/dto/PresentationAssessmentDTO.java (1)

15-16: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Add @Size bounds to title/description for defense-in-depth.

Relying only on the client's Validators.maxLength and the entity's implicit column length leaves the API vulnerable to an unhandled DB-level failure for over-long input submitted outside the UI (e.g., via direct API calls).

🛡️ Proposed validation addition
-public record PresentationAssessmentDTO(Long id, `@NotBlank` String title, String description, `@NotNull` `@Positive` Double maxPoints, `@PositiveOrZero` Double resultPoints,
+public record PresentationAssessmentDTO(Long id, `@NotBlank` `@Size`(max = 255) String title, `@Size`(max = 1000) String description, `@NotNull` `@Positive` Double maxPoints, `@PositiveOrZero` Double resultPoints,
         ZonedDateTime presentationDate, Long courseId) {
Based on learnings, "Always validate and sanitize inputs in server-side Java code. Do not trust client-side UI controls to enforce data integrity."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/java/de/tum/cit/aet/artemis/presentation/dto/PresentationAssessmentDTO.java`
around lines 15 - 16, Update the PresentationAssessmentDTO record by adding
explicit `@Size` maximum bounds to both title and description, matching the
corresponding persistence/API length constraints; keep the existing validation
annotations and field types unchanged.

Source: Learnings

src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts (1)

102-108: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Add a cross-field validator for resultPoints <= maxPoints.

The server rejects resultPoints > maxPoints (BadRequestAlertException, "resultPointsExceedMaxPoints"), but the reactive form has no equivalent client-side check, so users only learn about the violation after a failed save round-trip.

♻️ Proposed cross-field validator
 editForm = this.formBuilder.group({
     title: ['', [Validators.required, Validators.maxLength(255)]],
     description: ['', [Validators.maxLength(1000)]],
     maxPoints: [0, [Validators.required, Validators.min(0.01)]],
     resultPoints: [undefined as number | undefined, [Validators.min(0)]],
     presentationDate: [undefined as dayjs.Dayjs | undefined],
-});
+}, { validators: resultPointsNotExceedingMaxPointsValidator });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts`
around lines 102 - 108, Update the editForm validation around maxPoints and
resultPoints to add a cross-field validator enforcing resultPoints <= maxPoints.
Ensure the validator handles the optional or undefined resultPoints value
without error, and surfaces a form validation error when it exceeds maxPoints so
submission is blocked before the server request.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/java/de/tum/cit/aet/artemis/presentation/web/PresentationAssessmentResource.java`:
- Around line 154-160: Update getPresentationAssessmentStudents in
PresentationAssessmentResource to return a minimal Java record DTO rather than
exposing User entities. Map the students returned by
presentationAssessmentService.findStudents to the DTO, expose only the required
student fields, and update the corresponding client type to match the new
response shape.
- Around line 66-73: Presentation assessment endpoints must reject requests when
the presentation feature is disabled. In PresentationAssessmentResource.java at
lines 66-73, 83-90, 100-110, 120-128, 137-145, 154-161, 171-179, and 189-196,
resolve the course through the shared enabled-feature guard before listing,
retrieving, creating, updating, deleting, or managing assignments, while
preserving the existing role checks and endpoint behavior.

In `@src/main/webapp/app/course/manage/course-management.route.ts`:
- Around line 255-263: Update the presentations route around
PresentationAssessmentManagementComponent to require the
presentationAssessmentsEnabled feature flag in addition to instructor authority,
including direct navigation protection. Apply the same feature-flag enforcement
to the presentation management REST endpoints so API access is denied when the
flag is disabled, rather than relying on sidebar visibility.

In `@src/main/webapp/app/course/manage/update/course-update.component.html`:
- Around line 374-386: Replace the newly added presentationAssessmentsEnabled
control in the course update template with the project’s PrimeNG checkbox and
tooltip components, removing the Bootstrap classes and ngbTooltip usage.
Preserve the existing formControlName, translation keys, label association, and
question-circle icon while applying the established semantic tokens.

In `@src/main/webapp/app/course/shared/services/sidebar-item.service.ts`:
- Around line 255-264: Update getPresentationAssessmentsItem to remove the
primitive `#14b8a6` iconColor value and use an existing semantic/PrimeNG color
token instead, or omit iconColor if no suitable token exists.

In
`@src/main/webapp/app/presentation/manage/presentation-assessment-management.component.html`:
- Around line 2-6: Replace the newly added Bootstrap/ng-bootstrap UI with
PrimeNG throughout presentation-assessment-management.component.html: use
PrimeNG action controls, dialog/form components, layout and footer buttons,
table, and alert equivalents, while localizing the dialog close button’s
accessible label. In presentation-assessment-management.component.spec.ts,
replace the NgbModal dependency and its test provider with mocks for the
selected PrimeNG dialog API; apply these changes at the specified HTML and spec
sites.

In
`@src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts`:
- Line 29: Replace NgbModal and NgbModalRef usage in the new
presentation-assessment management component with PrimeNG DialogService,
following the inject(DialogService) and dialogService.open(...) pattern used by
course-update.component.ts. Update the affected imports and all modal creation,
reference, and close-result handling at the identified usages without retaining
any `@ng-bootstrap/ng-bootstrap` APIs.

---

Nitpick comments:
In
`@src/main/java/de/tum/cit/aet/artemis/presentation/dto/PresentationAssessmentDTO.java`:
- Around line 15-16: Update the PresentationAssessmentDTO record by adding
explicit `@Size` maximum bounds to both title and description, matching the
corresponding persistence/API length constraints; keep the existing validation
annotations and field types unchanged.

In
`@src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts`:
- Around line 102-108: Update the editForm validation around maxPoints and
resultPoints to add a cross-field validator enforcing resultPoints <= maxPoints.
Ensure the validator handles the optional or undefined resultPoints value
without error, and surfaces a form validation error when it exceeds maxPoints so
submission is blocked before the server request.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: fb18da36-9814-4032-ab5c-ceb683bbc7e7

📥 Commits

Reviewing files that changed from the base of the PR and between 2130a58 and b703b68.

⛔ Files ignored due to path filters (2)
  • src/main/resources/config/liquibase/changelog/20260706120000_changelog.xml is excluded by !**/*.xml
  • src/main/resources/config/liquibase/master.xml is excluded by !**/*.xml
📒 Files selected for processing (30)
  • src/main/java/de/tum/cit/aet/artemis/core/config/DatabaseConfiguration.java
  • src/main/java/de/tum/cit/aet/artemis/course/domain/Course.java
  • src/main/java/de/tum/cit/aet/artemis/course/dto/CourseCreateDTO.java
  • src/main/java/de/tum/cit/aet/artemis/course/dto/CourseUpdateDTO.java
  • src/main/java/de/tum/cit/aet/artemis/presentation/domain/PresentationAssessment.java
  • src/main/java/de/tum/cit/aet/artemis/presentation/dto/PresentationAssessmentDTO.java
  • src/main/java/de/tum/cit/aet/artemis/presentation/repository/PresentationAssessmentRepository.java
  • src/main/java/de/tum/cit/aet/artemis/presentation/service/PresentationAssessmentService.java
  • src/main/java/de/tum/cit/aet/artemis/presentation/web/PresentationAssessmentResource.java
  • src/main/webapp/app/course/manage/course-management-container/course-management-container.component.ts
  • src/main/webapp/app/course/manage/course-management.route.ts
  • src/main/webapp/app/course/manage/update/course-update.component.html
  • src/main/webapp/app/course/manage/update/course-update.component.spec.ts
  • src/main/webapp/app/course/manage/update/course-update.component.ts
  • src/main/webapp/app/course/shared/entities/course-update-dto.model.ts
  • src/main/webapp/app/course/shared/entities/course.model.ts
  • src/main/webapp/app/course/shared/services/sidebar-item.service.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.html
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.scss
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment.service.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment.service.ts
  • src/main/webapp/app/presentation/shared/entities/presentation-assessment.model.ts
  • src/main/webapp/i18n/de/course.json
  • src/main/webapp/i18n/de/presentationAssessment.json
  • src/main/webapp/i18n/en/course.json
  • src/main/webapp/i18n/en/presentationAssessment.json
  • src/test/java/de/tum/cit/aet/artemis/core/util/CourseTestService.java
  • src/test/java/de/tum/cit/aet/artemis/presentation/PresentationAssessmentIntegrationTest.java

Comment thread src/main/webapp/app/course/manage/course-management.route.ts Outdated
Comment thread src/main/webapp/app/course/manage/update/course-update.component.html Outdated
Comment thread src/main/webapp/app/course/shared/services/sidebar-item.service.ts
@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests July 22, 2026 09:41 — with GitHub Actions Inactive

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The presentation assessment foundation is promising, but the migration opts every existing course in, assignment changes survive Cancel/save failures, and the new server test is deterministically red; see inline comments. The unrelated E2E failures do not appear caused by this PR, while the targeted client tests pass. Our browser run was inconclusive because the PR image did not retain authentication after login.

Comment thread src/main/resources/config/liquibase/changelog/20260706120000_changelog.xml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.spec.ts (1)

14-104: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider adding coverage for create-mode and header-title reactivity.

All four tests use the same edit-mode presentationAssessment fixture. A test asserting studentSectionTitle() reflects the currently-typed title in create mode (presentationAssessment: undefined) would have caught the computed() reactivity bug flagged in presentation-assessment-form-dialog.component.ts (Line 99).

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.spec.ts`
around lines 14 - 104, Add a create-mode test for
PresentationAssessmentFormDialogComponent by configuring the dialog with
presentationAssessment undefined, then verify studentSectionTitle() updates when
the form title changes. Ensure the test exercises the computed title after
patching the title control, while preserving the existing edit-mode coverage.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.ts`:
- Line 99: Replace the computed studentSectionTitle property with a plain
studentSectionTitle() method that preserves the existing fallback order and
trimming behavior, allowing the header to reflect title edits during change
detection; keep the existing template call unchanged.

In
`@src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts`:
- Around line 136-176: Update the error handling in save so loadAll() runs when
the create/update succeeds but persistAssignedStudents fails, while retaining
onError(alertService, res). Ensure the successful assessment is reloaded before
or alongside reporting the assignment-sync error, without changing the existing
success flow.

---

Nitpick comments:
In
`@src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.spec.ts`:
- Around line 14-104: Add a create-mode test for
PresentationAssessmentFormDialogComponent by configuring the dialog with
presentationAssessment undefined, then verify studentSectionTitle() updates when
the form title changes. Ensure the test exercises the computed title after
patching the title control, while preserving the existing edit-mode coverage.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 48f14309-3c0b-417c-92d8-3e585feb088e

📥 Commits

Reviewing files that changed from the base of the PR and between 3894ede and 6a3ca3b.

⛔ Files ignored due to path filters (1)
  • src/main/resources/config/liquibase/changelog/20260706120000_changelog.xml is excluded by !**/*.xml
📒 Files selected for processing (14)
  • src/main/java/de/tum/cit/aet/artemis/presentation/dto/PresentationAssessmentStudentDTO.java
  • src/main/java/de/tum/cit/aet/artemis/presentation/web/PresentationAssessmentResource.java
  • src/main/webapp/app/course/manage/course-management.route.ts
  • src/main/webapp/app/course/manage/update/course-update.component.html
  • src/main/webapp/app/course/manage/update/course-update.component.ts
  • src/main/webapp/app/course/shared/services/sidebar-item.service.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-feature.guard.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.html
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.html
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts
  • src/test/java/de/tum/cit/aet/artemis/presentation/PresentationAssessmentIntegrationTest.java
🚧 Files skipped from review as they are similar to previous changes (5)
  • src/main/webapp/app/course/manage/update/course-update.component.ts
  • src/main/webapp/app/course/shared/services/sidebar-item.service.ts
  • src/main/webapp/app/course/manage/course-management.route.ts
  • src/main/webapp/app/course/manage/update/course-update.component.html
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.spec.ts

@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests July 22, 2026 14:54 — with GitHub Actions Inactive

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@src/main/webapp/app/presentation/manage/presentation-assessment-management.component.spec.ts`:
- Line 178: Update the imports in
presentationAssessmentManagement.component.spec.ts to include HttpErrorResponse
from the existing `@angular/common/http` import before its use in the addStudent
error test.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 065936a0-41e1-4109-9745-22c0a55fbd07

📥 Commits

Reviewing files that changed from the base of the PR and between 6a3ca3b and 54db53a.

📒 Files selected for processing (6)
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.html
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.scss
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.spec.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-management.component.ts
  • src/main/webapp/app/presentation/manage/presentation-assessment-form-dialog.component.ts

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart [medium] The save-lifecycle issue remains on this head: isSaving rejects duplicate submissions, but Cancel and the dialog's default close/Escape controls can still dismiss the form during an in-flight create/update. The continuing request can then close a newly opened dialog and discard its input; disable every dismissal and reopen path while saving and add a regression test. The snapshot also still reports Codacy Static Code Analysis as ACTION_REQUIRED, with no repository evidence that it is unrelated.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The current head fixes the previously reported dialog-dismissal lifecycle, and the relevant client, style, and build checks pass. However, Test / Server Tests (PostgreSQL) remains FAILURE and Codacy Static Code Analysis is ACTION_REQUIRED; the available evidence does not establish either completed failure as unrelated, so they must be fixed and rerun before approval.

@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests August 11, 2026 15:50 — with GitHub Actions Inactive

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The dialog lifecycle and stale-response fixes are present on this exact head. However, the snapshot still records Codacy Static Code Analysis as a completed ACTION_REQUIRED failure, with no evidence establishing it as unrelated, so the existing changes-requested state must remain until that check passes or is shown to be unrelated.

@jsuckart
jsuckart had a problem deploying to playwright-e2e-tests August 11, 2026 21:02 — with GitHub Actions Error
@jsuckart
jsuckart had a problem deploying to playwright-e2e-tests August 11, 2026 21:42 — with GitHub Actions Error
@jsuckart
jsuckart temporarily deployed to playwright-e2e-tests August 11, 2026 22:37 — with GitHub Actions Inactive

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The current head resolves the previously reported dialog lifecycle, stale-response, assignment atomicity, and enrollment-query issues. However, the required All required CI Passed gate still fails because E2E / Report E2E Overall Status completed with FAILURE; the green Run All E2E Tests (PR) wrapper is intentionally continue-on-error, while the aggregator classifies the actual E2E verdict. The snapshot contains no test-level evidence establishing that failure as unrelated, so the E2E failure must be fixed or rerun before approval.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The exact-head snapshot still reports E2E / Report E2E Overall Status as FAILURE, causing the required All required CI Passed gate to fail despite the green E2E wrapper job. The available evidence does not establish this completed failure as unrelated, so it must be fixed or successfully rerun before approval.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart No new static findings remain, and all retained review threads are resolved. However, E2E / Report E2E Overall Status is still FAILURE, causing the required All required CI Passed gate to fail; the available evidence does not establish that failure as unrelated, so it must be fixed or successfully rerun before approval.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart One medium save-state issue remains: the dialog blocks dismissal while saving but leaves its fields and student-assignment controls editable, so subsequent changes are silently discarded when the successful request closes it. The snapshot also reports E2E / Report E2E Overall Status as FAILURE, causing the required All required CI Passed gate to fail. The available evidence does not establish that CI failure as unrelated, so both issues must be addressed before approval.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The previously reported save-state issue is resolved, and no new static defects remain. However, the exact-head snapshot still records Codacy Static Code Analysis as completed with ACTION_REQUIRED, with no repository evidence establishing it as unrelated; that failed check must be cleared before approval.

@Claudia-Anthropica Claudia-Anthropica left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuckart The current head resolves the prior save-state, stale-dialog, assignment-atomicity, enrollment-query, feature-gate, and course-scope issues. All retained threads are resolved, no new blocking defects remain, and the required CI gate passes.

marlonnienaber
marlonnienaber previously approved these changes Aug 18, 2026

@marlonnienaber marlonnienaber left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reapprove

paoxin
paoxin previously approved these changes Aug 19, 2026

@paoxin paoxin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reapprove

@Pomodorka3

Pomodorka3 commented Aug 21, 2026

Copy link
Copy Markdown

🐞 Still no users found, while creating presentation
image

🐞 when creating a presentation for the second time, datepicker opens behind "Create presentation" modal, so it is not interactable
image

Please fix these bugs so that I can approve this PR

ShudongCai
ShudongCai previously approved these changes Aug 24, 2026

@ShudongCai ShudongCai left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested locally, works as expected.

Image Image Image

MarkusPaulsen
MarkusPaulsen previously approved these changes Aug 24, 2026

@MarkusPaulsen MarkusPaulsen left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested on TS 5. Works as expected, except the following follow-ups:

  1. Max. points and Result do not have any sensible upper bound (e.g. 1e+308 is possible)
  2. When creating a new presentation, all fields (except Presentation date) are missing a placeholder
  3. Max. points has a random value of 20 for no reason when creating a new presentation
  4. "New presentation" allows to add tutors, instructors and admins

jaylann
jaylann previously approved these changes Aug 24, 2026

@jaylann jaylann left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested on TS5. works as expected

paoxin
paoxin previously approved these changes Aug 24, 2026

@paoxin paoxin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reapprove

@Pomodorka3 Pomodorka3 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested on TS3

🐞 Bug with datepicker behind a dialog window is still there. Tested extensively and found out that it occurs only after the user tries to search for the user (search bar). If you don't interact with it, all is fine
Image

@jaylann jaylann left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall clean PR. Just a few minor things i noticed

Comment thread src/main/webapp/content/scss/global.scss Outdated
Comment thread src/main/webapp/app/presentation/manage/presentation-assessment-feature.guard.ts Outdated
jaylann
jaylann previously approved these changes Aug 25, 2026

@jaylann jaylann left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code lgtm

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

Labels

account Pull requests that affect the corresponding module client Pull requests that update TypeScript code. (Added Automatically!) core Pull requests that affect the corresponding module course database Pull requests that update the database. (Added Automatically!). Require a CRITICAL deployment. server Pull requests that update Java code. (Added Automatically!) tests

Projects

Status: Ready For Review
Status: In progress

Development

Successfully merging this pull request may close these issues.

9 participants