From 29543c331b274d63497d31e23cc1c748fec00c93 Mon Sep 17 00:00:00 2001 From: Julien WITTOUCK Date: Fri, 22 Aug 2025 11:08:34 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20:=20add=20tests=20for=20classroom?= =?UTF-8?q?=20archiving=20by=20role?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - add mvc tests ensuring only teachers can archive classrooms - verify teachers are redirected on success - ensure students receive a 403 forbidden response - validate service.archiveClassroom is not called for student role - provide coverage for role-based access control on archive endpoint --- .../classrooms/ClassroomController.java | 8 +++++++ .../resources/templates/classrooms/view.html | 24 ++++++++++++------- .../ClassroomControllerMVCTest.java | 20 ++++++++++++++++ 3 files changed, 44 insertions(+), 8 deletions(-) diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomController.java b/src/main/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomController.java index c824aac..f0af524 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomController.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomController.java @@ -86,4 +86,12 @@ class ClassroomController { return "classrooms/joined"; } + @GetMapping("/{classroomId}/archive") + String archiveClassroom(@PathVariable UUID classroomId) { + var classroom = this.classroomService.getClassroom(classroomId) + .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND)); + + this.classroomService.archiveClassroom(classroom); + return "redirect:/"; + } } diff --git a/src/main/resources/templates/classrooms/view.html b/src/main/resources/templates/classrooms/view.html index c120ebc..88435bb 100644 --- a/src/main/resources/templates/classrooms/view.html +++ b/src/main/resources/templates/classrooms/view.html @@ -27,14 +27,22 @@
Classroom name
- - gitlab icon - Open in GitLab - +
+ + gitlab icon + Open in GitLab + + + Archive Classroom + +
diff --git a/src/test/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomControllerMVCTest.java b/src/test/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomControllerMVCTest.java index bea48bd..c38c5b3 100644 --- a/src/test/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomControllerMVCTest.java +++ b/src/test/java/fr/univ_lille/gitlab/classrooms/classrooms/ClassroomControllerMVCTest.java @@ -187,4 +187,24 @@ class ClassroomControllerMVCTest { verify(classroomService).joinClassroom(any(), any()); } + @Test + @WithMockTeacher + void archiveClassroom_shouldArchiveAndRedirect_forTeacher() throws Exception { + mockMvc.perform(get("/classrooms/" + classroomId + "/archive")) + .andDo(print()) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("/")); + + verify(classroomService).archiveClassroom(any()); + } + + @Test + @WithMockStudent + void archiveClassroom_shouldBeForbidden_forStudent() throws Exception { + mockMvc.perform(get("/classrooms/" + classroomId + "/archive")) + .andDo(print()) + .andExpect(status().isForbidden()); + + verify(classroomService, never()).archiveClassroom(any()); + } } -- 2.51.2