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 ec74f68..f4fc029 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 @@ -12,6 +12,7 @@ import org.gitlab4j.api.models.Project; import org.springframework.stereotype.Service; import java.net.URI; +import java.text.Normalizer; import java.util.List; import java.util.Optional; @@ -49,8 +50,16 @@ class GitlabImpl implements Gitlab { * @param name value to slugify * @return slugified value */ - private String slugify(String name) { - return name.trim().toLowerCase().replaceAll("[^\\w.]", "-"); + String slugify(String name) { + // normalize string to remove diacritics + return Normalizer.normalize(name, Normalizer.Form.NFKD) + .replaceAll("\\p{M}", "") + .trim() + .toLowerCase() + // replace all chars that are not chars, digits, dot, dash, underscore with - + .replaceAll("[^a-zA-Z0-9.\\-_]", "-") + // remove last special chars as path should not end with a special char + .replaceAll("[^a-zA-Z0-9]+$", ""); } @Override diff --git a/src/test/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImplTest.java b/src/test/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImplTest.java index ef04f02..2380cf4 100644 --- a/src/test/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImplTest.java +++ b/src/test/java/fr/univ_lille/gitlab/classrooms/gitlab/GitlabImplTest.java @@ -285,4 +285,19 @@ class GitlabImplTest { verifyNoMoreInteractions(gitLabApi.getProjectApi()); } + + @Test + void slugify_shouldReplacellSpecialChars(){ + assertThat( gitlab.slugify("luke.skywalker") ).isEqualTo("luke.skywalker"); + + assertThat( gitlab.slugify("luke-skywalker") ).isEqualTo("luke-skywalker"); + + assertThat( gitlab.slugify("luke_skywalker") ).isEqualTo("luke_skywalker"); + + // special chars at the end should be stripped + assertThat( gitlab.slugify("luke-skywalker_.-") ).isEqualTo("luke-skywalker"); + + // no diacritics + assertThat( gitlab.slugify("léïa") ).isEqualTo("leia"); + } } -- 2.54.0 From 56ab34887a0437ab358fff92d49c6d4f8d63e658 Mon Sep 17 00:00:00 2001 From: Julien WITTOUCK Date: Tue, 12 Mar 2024 18:43:44 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=94=96=20:=20version=200.3.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 8 ++++++++ pom.xml | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56a6fad..b754de0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog + +## 0.3.3 (2024-03-12) + +### Fixed + +- 🐛 : correct slugify rules [1fae737] + + ## 0.3.2 (2024-03-01) diff --git a/pom.xml b/pom.xml index 6d8ae6d..132f62a 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ fr.univ-lille gitlab-classrooms - 0.3.2 + 0.3.3 gitlab-classrooms GitLab Classroom is a modest clone of GitHub Classroom, aimed at GitLab.