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()); + } }