diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentController.java b/src/main/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentController.java index 348e354..54fd780 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentController.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentController.java @@ -113,7 +113,7 @@ class AssignmentController { model.addAttribute("quizzes", this.quizService.getAllQuizzes()); - model.addAttribute("repositories", this.gitlab.getProjectsOfConnectedUser()); + model.addAttribute("repositories", this.gitlab.getProjectTemplates(classroom)); return "assignments/new"; } diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/Gitlab.java b/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/Gitlab.java index 0220259..86c44fa 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/Gitlab.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/Gitlab.java @@ -17,6 +17,14 @@ import java.util.Optional; */ public interface Gitlab { + /** + * Get project templates for a Classroom. This searches in the Classroom GitLab group for a sub-group named 'templates'. + * @param classroom + * @return + * @throws GitLabApiException + */ + List getProjectTemplates(Classroom classroom) throws GitLabApiException; + List getProjectsOfConnectedUser() throws GitLabApiException; List getGroupsOfConnectedUser() throws GitLabApiException; diff --git a/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImpl.java b/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImpl.java index 0efe58b..6205f0f 100644 --- a/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImpl.java +++ b/src/main/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImpl.java @@ -29,6 +29,16 @@ class GitlabImpl implements Gitlab { this.gitlabApiFactory = gitlabApiFactory; } + @Override + public List getProjectTemplates(Classroom classroom) throws GitLabApiException { + var group = this.gitLabApi.getGroupApi().getGroup(classroom.getGitlabGroupId()); + var templateGroup = this.gitLabApi.getGroupApi().getGroups(group.getPath()+"/templates"); + if(templateGroup.isEmpty()){ + return List.of(); + } + return this.gitLabApi.getGroupApi().getProjects(templateGroup.getFirst().getFullPath()); + } + @Override public List getProjectsOfConnectedUser() throws GitLabApiException { return this.gitLabApi.getProjectApi().getMemberProjects(); diff --git a/src/test/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentControllerMVCTest.java b/src/test/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentControllerMVCTest.java index fabff56..f928fe5 100644 --- a/src/test/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentControllerMVCTest.java +++ b/src/test/java/fr/univ_lille/gitlab/classrooms/assignments/AssignmentControllerMVCTest.java @@ -174,7 +174,7 @@ class AssignmentControllerMVCTest { .andExpect(model().attributeExists("quizzes")) .andExpect(model().attributeExists("repositories")); - verify(this.gitlab).getProjectsOfConnectedUser(); + verify(this.gitlab).getProjectTemplates(any(Classroom.class)); } @Test