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