diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 579dec6d07041fa310ff7af72dd8cc91382198fa..22e131ba492ee76c0da98b629cc2f49b229fda99 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -41,7 +41,15 @@ stages:
 maven_build:
   image: maven:3.9.4-amazoncorretto-21
   stage: build
-  script: mvn --batch-mode clean compile
+  script:
+    - mvn --batch-mode clean compile test-compile -DskipTests
+  cache:
+    key: ${CI_COMMIT_REF_SLUG}
+    paths:
+      - .m2/repository/
+  artifacts:
+    paths:
+      - target/
   tags:
     - docker
   rules:
@@ -53,6 +61,8 @@ include:
   # - local: .gitlab_package.yml
   - local: .gitlab_build_doc.yml
     path: .
+  - local: .gitlab_test_mvn.yml
+    path: .
   - local: .gitlab-ci_docker.yml
     path: .
   #- local: .gitlab-ci_sonar.yml
@@ -60,15 +70,3 @@ include:
 # - local: .gitlab_build_doc2.yml
 
 
-maven_test_configuration_build:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_configuration_build
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
diff --git a/.gitlab_test_mvn.yml b/.gitlab_test_mvn.yml
index bec71a4546488478fe51fb59c41b03d237351b93..fd402432e2361a793a1a4e05d944afe0998cedb8 100644
--- a/.gitlab_test_mvn.yml
+++ b/.gitlab_test_mvn.yml
@@ -1,118 +1,71 @@
-maven_test_rest_1:
+.st_test_template: &test_template
   image: maven:3.9.4-amazoncorretto-21
   stage: test
-  script: mvn --batch-mode clean test -Ptest_rest_1
-  tags:
-    - docker
   artifacts:
+    when: always
     reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+      junit: target/surefire-reports/*.xml
+    paths:
+      - target/surefire-reports/
+  script:
+    - |
+      # Par défaut, si le job est nommé "test_all" on ne filtre pas (profil all-tests)
+      # Sinon, on retire le préfixe "test_" et on remplace le premier underscore par un point.
+      if [[ "$CI_JOB_NAME" == "test_all" ]]; then
+          export MAVEN_PROFILE=all-tests
+      else
+          export MAVEN_PROFILE=$(echo "$CI_JOB_NAME" | sed -e 's/^test_//' -e 's/_/./')
+      fi
+      echo "Utilisation du profil Maven: $MAVEN_PROFILE"
+    - mvn test -P$MAVEN_PROFILE
 
-maven_test_rest_1_ACBB:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_rest_1_ACBB
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_core_basic:
+  <<: *test_template
 
-maven_test_rest_1_Haute_Frequence:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_rest_1_Haute_Frequence
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_core_config:
+  <<: *test_template
 
-maven_test_rest_2:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_rest_2
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_core_auth:
+  <<: *test_template
 
-maven_test_rest_others:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_rest_others
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_domain_model:
+  <<: *test_template
 
-maven_test_checker:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_checker
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_domain_checker:
+  <<: *test_template
 
-maven_test_model:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_model
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_domain_i18n:
+  <<: *test_template
 
-maven_test_persistence:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script: mvn --batch-mode clean test -Ptest_persistence
-  tags:
-    - docker
-  artifacts:
-    reports:
-      junit:
-        - target/surefire-reports/TEST-*.xml
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_integration_rest:
+  <<: *test_template
 
+test_integration_persistence:
+  <<: *test_template
 
+test_app_monsoere:
+  <<: *test_template
 
-maven_swagger_build:
-  image: maven:3.9.4-amazoncorretto-21
-  stage: test
-  script:
-    - mvn --batch-mode clean test -Pswagger_build
-  tags:
-    - docker
-  artifacts:
-    paths:
-      - documentations/
-  rules:
-    - if: $CI_JOB_MANUAL!= "true"
+test_app_haute_frequence:
+  <<: *test_template
+
+test_app_acbb:
+  <<: *test_template
+
+test_app_olac:
+  <<: *test_template
+
+test_app_foret:
+  <<: *test_template
+
+test_app_pattern:
+  <<: *test_template
+
+test_app_recursivity:
+  <<: *test_template
+
+test_app_teledetection:
+  <<: *test_template
+
+test_no-tags:
+  <<: *test_template
diff --git a/pom.xml b/pom.xml
index e61894860d06009dd0495c6ed6e6c434b840b0f7..721908f22616ec5c7f88a0773fd4abfa02ace313 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,7 +88,8 @@
         <!--sonar-->
         <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
         <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
-        <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco.exec</sonar.coverage.jacoco.xmlReportPaths>
+        <sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco.exec
+        </sonar.coverage.jacoco.xmlReportPaths>
         <sonar.language>java</sonar.language>
         <sonar.projectKey>anaee-dev_openadom_backend_caf3d282-990e-4907-8f15-44424cf3c8b0</sonar.projectKey>
         <sonar.projectName>openADOM-backend</sonar.projectName>
@@ -400,6 +401,12 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <!-- Utilisez une version récente pour être certain du support adéquat de JUnit 5 -->
+                <version>3.0.0-M5</version>
+            </plugin>
         </plugins>
     </build>
     <profiles>
@@ -442,224 +449,345 @@
                 </plugins>
             </build>
         </profile>
+        <profile>
+            <id>core.basic</id>
+            <properties>
+                <junit.jupiter.tags>core.basic</junit.jupiter.tags>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
+                        <configuration>
+                            <groups>${junit.jupiter.tags}</groups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
 
+        <!-- Profil pour les tests tagués "core.config" -->
         <profile>
-            <id>test_checker</id>
+            <id>core.config</id>
+            <properties>
+                <junit.jupiter.tags>core.config</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <parallel>classesAndMethods</parallel>
-                            <threadCount>4</threadCount>
-                            <perCoreThreadCount>true</perCoreThreadCount>
-                            <parallelTestsTimeoutInSeconds>300</parallelTestsTimeoutInSeconds>
-                            <parallelTestsTimeoutForcedInSeconds>600</parallelTestsTimeoutForcedInSeconds>
-                            <parallelOptimized>true</parallelOptimized>
-
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <includes>
-                                <include>fr/inra/oresing/checker/**.java</include>
-                            </includes>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profil pour les tests tagués "core.auth" -->
         <profile>
-            <id>test_model</id>
+            <id>core.auth</id>
+            <properties>
+                <junit.jupiter.tags>core.auth</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <includes>
-                                <include>fr/inra/oresing/model/**Test.java</include>
-                                <include>fr/inra/oresing/model/**/**Test.java</include>
-                            </includes>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profil pour les tests tagués "domain.model" -->
         <profile>
-            <id>test_persistence</id>
+            <id>domain.model</id>
+            <properties>
+                <junit.jupiter.tags>domain.model</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <includes>
-                                <include>fr/inra/oresing/persistence/**Test.java</include>
-                            </includes>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profil pour les tests tagués "domain.checker" -->
         <profile>
-            <id>test_rest_1</id>
+            <id>domain.checker</id>
+            <properties>
+                <junit.jupiter.tags>domain.checker</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <includes>
-                                <include>fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java</include>
-                                <include>fr/inra/oresing/rest/Migration.java</include>
-                                <include>fr/inra/oresing/rest/MultiYaml.java</include>
-                                <include>fr/inra/oresing/rest/RelationalService.java</include>
-                                <include>fr/inra/oresing/rest/TestReferencesErrors.java</include>
-                            </includes>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profil pour les tests tagués "domain.i18n" -->
         <profile>
-            <id>test_rest_1_Haute_Frequence</id>
+            <id>domain.i18n</id>
+            <properties>
+                <junit.jupiter.tags>domain.i18n</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <groups>HAUTE_FREQUENCE_TEST</groups>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profil pour les tests tagués "integration.rest" -->
         <profile>
-            <id>test_rest_1_ACBB</id>
+            <id>integration.rest</id>
+            <properties>
+                <junit.jupiter.tags>integration.rest</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <groups>ACBB_TEST</groups>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profil pour les tests tagués "integration.persistence" -->
         <profile>
-            <id>test_rest_2</id>
+            <id>integration.persistence</id>
+            <properties>
+                <junit.jupiter.tags>integration.persistence</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <includes>
-                            </includes>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <!-- Profils pour les tests applicatifs -->
         <profile>
-            <id>swagger_build</id>
+            <id>app.monsoere</id>
+            <properties>
+                <junit.jupiter.tags>app.monsoere</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <groups>SWAGGER_BUILD</groups>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
         <profile>
-            <id>test_rest_others</id>
+            <id>app.haute_frequence</id>
+            <properties>
+                <junit.jupiter.tags>app.haute_frequence</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <groups>OTHERS_TEST</groups>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
         <profile>
-            <id>test_rest_model_request_test</id>
+            <id>app.acbb</id>
+            <properties>
+                <junit.jupiter.tags>app.acbb</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <forkCount>4</forkCount>
-                            <reuseForks>false</reuseForks>
-                            <testSourceDirectory>src/test</testSourceDirectory>
-                            <testFailureIgnore>false</testFailureIgnore>
-                            <groups>MODEL_REQUEST_TEST</groups>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
         <profile>
-            <id>test_configuration_build</id>
+            <id>app.olac</id>
+            <properties>
+                <junit.jupiter.tags>app.olac</junit.jupiter.tags>
+            </properties>
             <build>
                 <plugins>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
                         <configuration>
-                            <includes>
-                                <include>TestConfigurationSuite</include>
-                            </includes>
+                            <groups>${junit.jupiter.tags}</groups>
                         </configuration>
                     </plugin>
                 </plugins>
             </build>
         </profile>
+
+        <profile>
+            <id>app.foret</id>
+            <properties>
+                <junit.jupiter.tags>app.foret</junit.jupiter.tags>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
+                        <configuration>
+                            <groups>${junit.jupiter.tags}</groups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>app.pattern</id>
+            <properties>
+                <junit.jupiter.tags>app.pattern</junit.jupiter.tags>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
+                        <configuration>
+                            <groups>${junit.jupiter.tags}</groups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>app.recursivity</id>
+            <properties>
+                <junit.jupiter.tags>app.recursivity</junit.jupiter.tags>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
+                        <configuration>
+                            <groups>${junit.jupiter.tags}</groups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+
+        <profile>
+            <id>app.teledetection</id>
+            <properties>
+                <junit.jupiter.tags>app.teledetection</junit.jupiter.tags>
+            </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
+                        <configuration>
+                            <groups>${junit.jupiter.tags}</groups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>no-tags</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-surefire-plugin</artifactId>
+                        <version>3.0.0-M5</version>
+                        <configuration>
+                            <argLine>-XX:+EnableDynamicAgentLoading</argLine>
+                            <excludedGroups>
+                                SUITE,core.basic,core.config,core.auth,
+                                domain.model,domain.checker,domain.i18n,
+                                integration.rest,integration.persistence,
+                                app.monsoere,app.haute_frequence,app.acbb,
+                                app.olac,app.foret,app.pattern,app.recursivity,app.teledetection
+                            </excludedGroups>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+        <profile>
+            <id>all-tests</id>
+            <activation>
+                <activeByDefault>true</activeByDefault>
+            </activation>
+        </profile>
     </profiles>
 
 </project>
\ No newline at end of file
diff --git a/src/test/java/TestConfigurationSuite.java b/src/test/java/TestConfigurationSuite.java
deleted file mode 100644
index 43754ee420f17d08036b1735c660b18df20624dc..0000000000000000000000000000000000000000
--- a/src/test/java/TestConfigurationSuite.java
+++ /dev/null
@@ -1,10 +0,0 @@
-import org.junit.jupiter.api.Tag;
-import org.junit.platform.suite.api.*;
-
-@Suite
-@SelectPackages("fr.inra.oresing")
-@SuiteDisplayName("Tests for BrokenAdom")
-@Tag("MODEL_REQUEST_TEST")
-@IncludeTags({"UPLOAD_BUNDLE", "SUITE"})
-public class TestConfigurationSuite {
-}
diff --git a/src/test/java/fr/inra/oresing/ApplicationTest.java b/src/test/java/fr/inra/oresing/ApplicationTest.java
index f5f2ec4ba112cf8fb6d5994ff39cb941f03bc236..c7398cf621c7c4a4a7093be5719c6867493af51d 100644
--- a/src/test/java/fr/inra/oresing/ApplicationTest.java
+++ b/src/test/java/fr/inra/oresing/ApplicationTest.java
@@ -7,7 +7,7 @@ import org.junit.jupiter.api.Test;
 
 import java.util.UUID;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("core.basic")
 public class ApplicationTest {
     @Test
     public void test() {
diff --git a/src/test/java/fr/inra/oresing/domain/LocalDateTimeRangeTest.java b/src/test/java/fr/inra/oresing/domain/LocalDateTimeRangeTest.java
index d649aff31f15570b67ec06161d5caf09cb2b281d..964b7a6b688c266077158401119752bb4d9fdaee 100644
--- a/src/test/java/fr/inra/oresing/domain/LocalDateTimeRangeTest.java
+++ b/src/test/java/fr/inra/oresing/domain/LocalDateTimeRangeTest.java
@@ -10,7 +10,7 @@ import org.junit.jupiter.api.Test;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.TemporalAccessor;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("domain.model")
 public class LocalDateTimeRangeTest {
 
     /*@Test
diff --git a/src/test/java/fr/inra/oresing/domain/application/BrokenConfigurationTest.java b/src/test/java/fr/inra/oresing/domain/application/BrokenConfigurationTest.java
index de3f49362842f0fa3897994a7b58ede22fe23312..a2775708d7d146f3e3a3052fd955e2041444417c 100644
--- a/src/test/java/fr/inra/oresing/domain/application/BrokenConfigurationTest.java
+++ b/src/test/java/fr/inra/oresing/domain/application/BrokenConfigurationTest.java
@@ -8,7 +8,8 @@ import java.util.List;
 import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.*;
-@org.junit.jupiter.api.Tag("SUITE")
+
+@org.junit.jupiter.api.Tag("core.config")
 
 class ConfigurationTest {
 
diff --git a/src/test/java/fr/inra/oresing/domain/application/BuilderNodeTest.java b/src/test/java/fr/inra/oresing/domain/application/BuilderNodeTest.java
index d500f50ce6ef7cb8fc59e30dbf93638f85df7e0c..93d49a66e5e99258c30b022b961a99a5a55ac620 100644
--- a/src/test/java/fr/inra/oresing/domain/application/BuilderNodeTest.java
+++ b/src/test/java/fr/inra/oresing/domain/application/BuilderNodeTest.java
@@ -12,7 +12,7 @@ import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("core.config")
 class BuilderNodeTest {
     final Map<String, BuilderNode> builderNodes = Arrays.stream(new JsonRowMapper<BuilderNode>().readValue("""
             [
diff --git a/src/test/java/fr/inra/oresing/domain/application/configuration/ConfigurationTest.java b/src/test/java/fr/inra/oresing/domain/application/configuration/ConfigurationTest.java
index 6ba94dcc68f41c50a961d8c64c5e33af913f3103..82fb90cbce04b332951cd051c1a63f298db52a5b 100644
--- a/src/test/java/fr/inra/oresing/domain/application/configuration/ConfigurationTest.java
+++ b/src/test/java/fr/inra/oresing/domain/application/configuration/ConfigurationTest.java
@@ -12,7 +12,7 @@ import org.mockito.Mockito;
 
 import java.util.*;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("core.config")
 class ConfigurationTest {
 
     public static final JsonRowMapper MAPPER = new JsonRowMapper<ComponentDescription>();
diff --git a/src/test/java/fr/inra/oresing/domain/application/configuration/LtreeTest.java b/src/test/java/fr/inra/oresing/domain/application/configuration/LtreeTest.java
index 80e5897677b8a8cf58d982fb2e2e7615df90e4a9..1de2049bd18aaf71c9586e812084751dd975ac46 100644
--- a/src/test/java/fr/inra/oresing/domain/application/configuration/LtreeTest.java
+++ b/src/test/java/fr/inra/oresing/domain/application/configuration/LtreeTest.java
@@ -7,7 +7,7 @@ import org.junit.jupiter.params.provider.ValueSource;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-@Tag("SUITE")
+@Tag("core.config")
 class LtreeTest {
     @Test
     void assertThatAStringWithInvalidCharactersCanBeEncodedTwice(){
diff --git a/src/test/java/fr/inra/oresing/domain/application/configuration/SubmissionTest.java b/src/test/java/fr/inra/oresing/domain/application/configuration/SubmissionTest.java
index 5955b26012109260595e1a213776b83832552b9b..b171d491036d6e399b203b5972e9e332818d1295 100644
--- a/src/test/java/fr/inra/oresing/domain/application/configuration/SubmissionTest.java
+++ b/src/test/java/fr/inra/oresing/domain/application/configuration/SubmissionTest.java
@@ -3,9 +3,7 @@ package fr.inra.oresing.domain.application.configuration;
 import fr.inra.oresing.domain.BinaryFileDataset;
 import fr.inra.oresing.domain.exceptions.authorization.AuthorizationRequestException;
 import fr.inra.oresing.domain.exceptions.authorization.SiOreAuthorizationRequestException;
-import groovy.lang.Tuple;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 
 import java.util.LinkedList;
@@ -13,6 +11,7 @@ import java.util.List;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+@Tag("domain.model")
 class SubmissionTest {
     final Submission submission = new Submission(
             SubmissionType.OA_VERSIONING,
diff --git a/src/test/java/fr/inra/oresing/domain/application/configuration/date/DatePatternTest.java b/src/test/java/fr/inra/oresing/domain/application/configuration/date/DatePatternTest.java
index 10962c535236c448aafb9521cb2d130024653784..dd5c0b3cbd847c25a0aa35db7289e09c8099e7d2 100644
--- a/src/test/java/fr/inra/oresing/domain/application/configuration/date/DatePatternTest.java
+++ b/src/test/java/fr/inra/oresing/domain/application/configuration/date/DatePatternTest.java
@@ -10,7 +10,7 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.Objects;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("domain.model")
 class DatePatternTest {
     public static final String DATE = "12/01/1925";
     public static final String TIME = "12:23:56";
diff --git a/src/test/java/fr/inra/oresing/domain/checker/type/ReferenceTypeTest.java b/src/test/java/fr/inra/oresing/domain/checker/type/ReferenceTypeTest.java
index d9a27bb45304d462320a1c274bab563874baf834..80dc060ce5017cb3c87e29bf45825fb2deddf382 100644
--- a/src/test/java/fr/inra/oresing/domain/checker/type/ReferenceTypeTest.java
+++ b/src/test/java/fr/inra/oresing/domain/checker/type/ReferenceTypeTest.java
@@ -15,6 +15,7 @@ import org.mockito.Mockito;
 
 import java.util.UUID;
 
+@Tag("domain.checker")
 class ReferenceTypeTest {
     LineChecker.Transformer transformer;
     ImmutableMap<DataValue.LineIdentityColumnName, ImmutableSet<UUID>> referenceValues;
diff --git a/src/test/java/fr/inra/oresing/domain/data/read/DataHeaderReaderTest.java b/src/test/java/fr/inra/oresing/domain/data/read/DataHeaderReaderTest.java
index 17efa81b2e75597df6aab13291dcd8d2cd5ca3bd..b1867ba32b70c574e18ac7504b3312978415ae31 100644
--- a/src/test/java/fr/inra/oresing/domain/data/read/DataHeaderReaderTest.java
+++ b/src/test/java/fr/inra/oresing/domain/data/read/DataHeaderReaderTest.java
@@ -32,6 +32,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 @Tag("SUITE")
+@Tag("domain.model")
 class DataHeaderReaderTest {
     Iterator<CSVRecord> lineIterator;
     DataHeaderReader reader;
diff --git a/src/test/java/fr/inra/oresing/domain/groovy/GroovyExpressionTest.java b/src/test/java/fr/inra/oresing/domain/groovy/GroovyExpressionTest.java
index d5c2119b30039b77b27367386e2b54233032ee52..2d44f518a7a996109d73a3587352fb5fab5003e5 100644
--- a/src/test/java/fr/inra/oresing/domain/groovy/GroovyExpressionTest.java
+++ b/src/test/java/fr/inra/oresing/domain/groovy/GroovyExpressionTest.java
@@ -17,7 +17,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
-@Tag("SUITE")
+@Tag("domain.model")
 class GroovyExpressionTest {
 
     private Map<String, Object> context;
diff --git a/src/test/java/fr/inra/oresing/domain/internationalization/InternationalizationDisplayTest.java b/src/test/java/fr/inra/oresing/domain/internationalization/InternationalizationDisplayTest.java
index f388752fa5f04c7d5e9bce2bc6890d10e5b1608f..1e2c26eb431aa9abfe6d8401df005e259f9d9f9e 100644
--- a/src/test/java/fr/inra/oresing/domain/internationalization/InternationalizationDisplayTest.java
+++ b/src/test/java/fr/inra/oresing/domain/internationalization/InternationalizationDisplayTest.java
@@ -5,7 +5,7 @@ import org.junit.jupiter.api.Test;
 
 import java.util.List;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("domain.i18n")
 public class InternationalizationDisplayTest {
     final String pattern = "column 1 {column1} column 2 {column2} column 3 {column3} end";
 
diff --git a/src/test/java/fr/inra/oresing/domain/massimport/BuildFileHeaderTest.java b/src/test/java/fr/inra/oresing/domain/massimport/BuildFileHeaderTest.java
index 32a14e1bbe8c82524fe425d5ca07b63dbc06e871..7b967bfba35a9e6896198f143f376c22e22c5ce3 100644
--- a/src/test/java/fr/inra/oresing/domain/massimport/BuildFileHeaderTest.java
+++ b/src/test/java/fr/inra/oresing/domain/massimport/BuildFileHeaderTest.java
@@ -5,6 +5,7 @@ import fr.inra.oresing.domain.ConfigurationBuiderTestBuilder;
 import fr.inra.oresing.domain.application.configuration.*;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 import org.slf4j.Logger;
@@ -15,6 +16,7 @@ import java.net.URL;
 import java.nio.charset.StandardCharsets;
 import java.util.function.Function;
 
+@Tag("domain.model")
 public class BuildFileHeaderTest {
     private static final Logger log = LoggerFactory.getLogger(BuildFileHeaderTest.class);
     static final String RESOURCE_PATH = "fr/inra/oresing/domain/massimport/massimport.yaml";
diff --git a/src/test/java/fr/inra/oresing/persistence/AuthenticationServiceTest.java b/src/test/java/fr/inra/oresing/persistence/AuthenticationServiceTest.java
index 8c129eb0f9bf92c9346a72fa5431d59f7ad83e84..5778b074042dcfd46ebc2e2fa2de088f7160e609 100644
--- a/src/test/java/fr/inra/oresing/persistence/AuthenticationServiceTest.java
+++ b/src/test/java/fr/inra/oresing/persistence/AuthenticationServiceTest.java
@@ -45,13 +45,14 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
 
 @ActiveProfiles("testmail")
-@SpringBootTest(classes = {OreSiNg.class, OreSiNg.MailSenderForTest.class, TestDatabaseConfig.class})
+@SpringBootTest(classes = {OreSiNg.class, OreSiNg.MailSenderForTest.class, TestDatabaseConfig.class, OreSiNg.class, TestDatabaseConfig.class})
 
 @TestPropertySource(locations = "classpath:/application-tests.properties")
 @AutoConfigureWebMvc
 @AutoConfigureMockMvc(print = MockMvcPrint.NONE)
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
 @Tag("SUITE")
+@Tag("core.auth")
 public class AuthenticationServiceTest {
     @Value("${spring.mail.from}")
     String mailFrom;
diff --git a/src/test/java/fr/inra/oresing/persistence/data/read/bundle/FileContentTest.java b/src/test/java/fr/inra/oresing/persistence/data/read/bundle/FileContentTest.java
index d0dd6935dff2db83e84db6730a228bd82fb979d7..2ae6fd8b5778b3131eab2d92c4ddf992db938c5e 100644
--- a/src/test/java/fr/inra/oresing/persistence/data/read/bundle/FileContentTest.java
+++ b/src/test/java/fr/inra/oresing/persistence/data/read/bundle/FileContentTest.java
@@ -5,6 +5,7 @@ import fr.inra.oresing.domain.application.configuration.Submission;
 import fr.inra.oresing.domain.application.configuration.SubmissionType;
 import org.assertj.core.api.AssertJProxySetup;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
 
@@ -14,6 +15,7 @@ import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+@Tag("domain.model")
 class FileContentTest {
     final Submission submission = new Submission(
             SubmissionType.OA_VERSIONING,
diff --git a/src/test/java/fr/inra/oresing/persistence/index/AuthorizationIndexTest.java b/src/test/java/fr/inra/oresing/persistence/index/AuthorizationIndexTest.java
index df59246407d0c435ef98a641d0f8041f5c424227..9861401daa90239f79f0de92b7016e430e45064d 100644
--- a/src/test/java/fr/inra/oresing/persistence/index/AuthorizationIndexTest.java
+++ b/src/test/java/fr/inra/oresing/persistence/index/AuthorizationIndexTest.java
@@ -18,6 +18,7 @@ import java.util.*;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+@org.junit.jupiter.api.Tag("core.auth")
 class AuthorizationIndexTest {
 
     private AuthorizationIndex authorizationIndex;
diff --git a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
index 30b034e23cd56fc6d0c3f928b724ffcd4b6efa61..c22327b65ab4b3482e45a063f01f9b99fb9aaad4 100644
--- a/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
+++ b/src/test/java/fr/inra/oresing/rest/ApplicationConfigurationServiceTest.java
@@ -16,7 +16,6 @@ import fr.inra.oresing.rest.services.ApplicationConfigurationService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +46,7 @@ import static org.junit.jupiter.api.Assertions.*;
 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
 @Slf4j
 @org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("core.config")
 public class ApplicationConfigurationServiceTest {
 
     public static final Map<String, List<ReactiveResult>> errors = new HashMap<>();
diff --git a/src/test/java/fr/inra/oresing/rest/AuthorizationResourcesTest.java b/src/test/java/fr/inra/oresing/rest/AuthorizationResourcesTest.java
index a51eee54d13b2d573444185cf7d2cb8b2d9bcc03..9c3923f58458af6812b275a40b1f2d966e67f78b 100644
--- a/src/test/java/fr/inra/oresing/rest/AuthorizationResourcesTest.java
+++ b/src/test/java/fr/inra/oresing/rest/AuthorizationResourcesTest.java
@@ -19,6 +19,7 @@ import org.hamcrest.core.IsEqual;
 import static org.junit.jupiter.api.Assertions.*;
 
 import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -53,6 +54,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @AutoConfigureMockMvc(print = MockMvcPrint.NONE)
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
 @Slf4j
+@Tag("core.auth")
 public class AuthorizationResourcesTest {
 
     @Autowired
diff --git a/src/test/java/fr/inra/oresing/rest/MigrationTest.java b/src/test/java/fr/inra/oresing/rest/MigrationTest.java
index 6612694fb3085c3b7ebce8c92b554754de8b1039..58d3b684c70391f4ae2d37d8101719ae291cc6bd 100644
--- a/src/test/java/fr/inra/oresing/rest/MigrationTest.java
+++ b/src/test/java/fr/inra/oresing/rest/MigrationTest.java
@@ -5,6 +5,7 @@ import fr.inra.oresing.TestDatabaseConfig;
 import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -25,12 +26,13 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
 
 @ActiveProfiles("testmail")
+@Tag("integration.persistence")
 @SpringBootTest(classes = {OreSiNg.class, TestDatabaseConfig.class})
 
 @TestPropertySource(locations = "classpath:/application-tests.properties")
 @AutoConfigureWebMvc
 @AutoConfigureMockMvc(print = MockMvcPrint.NONE)
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
 @Slf4j
 public class MigrationTest {
 
diff --git a/src/test/java/fr/inra/oresing/rest/MultiYamlTest.java b/src/test/java/fr/inra/oresing/rest/MultiYamlTest.java
index 662994b3f77dff68d47d33eae023924e41265ddb..c0e6d38532034e0b3c1a95124a9a9552812089c5 100644
--- a/src/test/java/fr/inra/oresing/rest/MultiYamlTest.java
+++ b/src/test/java/fr/inra/oresing/rest/MultiYamlTest.java
@@ -12,7 +12,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Map;
 
-@org.junit.jupiter.api.Tag("SUITE")
+@org.junit.jupiter.api.Tag("core.basic")
 public class MultiYamlTest {
     @Test
     public void testYaml() throws IOException {
diff --git a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
index 98a25f93b4217b110e17b41a47d486cec7c73fb5..e00c830905f46f3ed3d47829b3e4bbeb236814d4 100644
--- a/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
+++ b/src/test/java/fr/inra/oresing/rest/OreSiResourcesTest.java
@@ -90,6 +90,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @AutoConfigureWebMvc
 @AutoConfigureMockMvc(print = MockMvcPrint.NONE)
 @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+@Tag("integration.rest")
 @Slf4j
 public class OreSiResourcesTest {
 
@@ -168,7 +169,7 @@ public class OreSiResourcesTest {
     }
 
     @Test
-    @Tag("SUITE")
+    @Tag("core.basic")
     public void testDatabaseUser() throws SQLException {
         String currentUser = getCurrentDatabaseUser();
         Assertions.assertEquals("openAdomTechUser", currentUser, "Le test devrait être exécuté en tant qu'openadomTechUser");
@@ -187,7 +188,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("SWAGGER_BUILD")
-    @Tag("SUITE")
+    @Tag("integration.rest")
     public void services_model() throws Exception {
         final String services_model = mockMvc.perform(get("/api-docs")
                         .accept(MediaType.APPLICATION_JSON_VALUE)
@@ -248,7 +249,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("OTHERS_TEST")
-    @Tag("SUITE")
+    @Tag("app.monsoere")
     @Tag("MONSOERE")
     public void addApplicationMonsore() throws Exception {
         final String appId;
@@ -808,14 +809,14 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("OTHERS_TEST")
-    @Tag("SUITE")
+    @Tag("integration.rest")
     public void buildSwaggerApi() throws Exception {
         mockMvc.perform(get("/v2/api-docs"));
     }
 
     @Test
     @Tag("OTHERS_TEST")
-    @Tag("SUITE")
+    @Tag("domain.model")
     public void testMultiplicityMany() throws Exception {
         final URL resource = getClass().getResource(Fixtures.getMultiplicityMany());
         try (final InputStream in = Objects.requireNonNull(resource).openStream()) {
@@ -887,7 +888,7 @@ public class OreSiResourcesTest {
     }
 
     @Test
-    @Tag("OTHERS_TEST")
+    @Tag("core.config")
     @Disabled
     public void addApplicationWithComputedComponentsWithReferences() throws Exception {
         final URL resource = getClass().getResource(Fixtures.getApplicationWithComputedComponentsWithReferences());
@@ -950,7 +951,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("OTHERS_TEST")
-    @Tag("SUITE")
+    @Tag("app.monsoere")
     @Tag("MONSOERE")
     public void addApplicationMonsoreWithRepository() throws Exception {
         URL resource = getClass().getResource(Fixtures.getMonsoreApplicationConfigurationWithRepositoryResourceName());
@@ -1733,6 +1734,7 @@ public class OreSiResourcesTest {
     }
 
     @Test
+    @Tag("app.teledetection")
     @Disabled
     public void addApplicationTeledetection() throws Exception {
         final URL resource = getClass().getResource(Fixtures.getTeledetectionConfigurationResourceName());
@@ -1993,6 +1995,7 @@ public class OreSiResourcesTest {
      * The only authorizations that can be put on are on none or all values.
      */
     @Test
+    @Tag("core.config")
     @Disabled
     public void testProgressiveYamlWithoutAuthorization() throws Exception {
         final String authorizationId;
@@ -2099,6 +2102,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Disabled
+    @Tag("core.config")
     public void testProgressiveYamlWithEmptyDatagroup() throws Exception {
 
         final URL resource = getClass().getResource(Fixtures.getProgressiveYaml().get("yamlWithEmptyDatagroup"));
@@ -2121,6 +2125,7 @@ public class OreSiResourcesTest {
      */
     @Test
     @Disabled
+    @Tag("core.config")
     public void testProgressiveYamlWithNoReference() throws Exception {
 
         final URL resource = getClass().getResource(Fixtures.getProgressiveYaml().get("testAuthorizationScopeWithoutReference"));
@@ -2146,6 +2151,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Disabled
+    @Tag("core.config")
     public void testProgressiveYamlWithoutAuthorizationScope() {
 
         final URL resource = getClass().getResource(Fixtures.getProgressiveYaml().get("testProgressiveYamlWithoutAuthorizationScope"));
@@ -2165,6 +2171,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Disabled
+    @Tag("core.config")
     public void testProgressiveYamlWithoutTimescopeScope() {
 
         final URL resource = getClass().getResource(Fixtures.getProgressiveYaml().get("testProgressiveYamlWithoutTimescopeScope"));
@@ -2188,6 +2195,7 @@ public class OreSiResourcesTest {
      */
     @Test
     @Disabled
+    @Tag("core.config")
     public void testProgressiveWithReferenceAndNoHierarchicalReferenceYaml() throws Exception {
 
         final URL resource = getClass().getResource(Fixtures.getProgressiveYaml().get("testAuthorizationScopeWithReferenceAndNoHierarchicalReference"));
@@ -2242,8 +2250,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("SUITE")
-
-
+    @Tag("app.recursivity")
     public void testRecursivity() throws Exception {
 
         final URL resource = getClass().getResource(Fixtures.getRecursivityApplicationConfigurationResourceName());
@@ -2329,6 +2336,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("SUITE")
+    @Tag("app.pattern")
     public void testPattern() throws Exception {
 
         final URL resource = getClass().getResource(Fixtures.getPatternApplicationConfigurationResourceName());
@@ -2443,6 +2451,7 @@ public class OreSiResourcesTest {
 
     @Test
     @Tag("SUITE")
+    @Tag("core.config")
     public void testComputedWithNaturalKeyColumns() throws Exception {
 
         final URL resource = getClass().getResource(Fixtures.getComputedWithNaturalKeyColumns());
@@ -2539,7 +2548,7 @@ public class OreSiResourcesTest {
     }
 
     @Test
-    @Tag("ACBB_TEST")
+    @Tag("app.acbb")
     public void addApplicationAcbb() throws Exception {
         addUserRightCreateApplication(authUserId, "acbb");
         final URL resource = getClass().getResource(Fixtures.getAcbbApplicationConfigurationResourceName());
@@ -2772,7 +2781,7 @@ public class OreSiResourcesTest {
     }
 
     @Test
-    @Tag("HAUTE_FREQUENCE_TEST")
+    @Tag("app.haute_frequence")
     @Disabled
     public void addApplicationHauteFrequence() throws Throwable {
         addUserRightCreateApplication(authUserId, "hautefrequence");
@@ -2803,7 +2812,7 @@ public class OreSiResourcesTest {
     }
 
     @Test
-    @Tag("OTHERS_TEST")
+    @Tag("domain.model")
     @Disabled
     public void addDuplicatedTest() throws Throwable {
         addUserRightCreateApplication(authUserId, "duplicated");
@@ -3056,7 +3065,7 @@ on test le dépôt d'un fichier récursif
     }
 
     @Test
-    @Tag("OTHERS_TEST")
+    @Tag("app.olac")
     @Disabled
     public void addApplicationOLAC() throws Exception {
         addUserRightCreateApplication(authUserId, "olac");
@@ -3151,7 +3160,7 @@ on test le dépôt d'un fichier récursif
     }
 
     @Test
-    @Tag("OTHERS_TEST")
+    @Tag("app.foret")
     @Disabled
     public void addApplicationFORET_essai() throws Exception {
         addUserRightCreateApplication(authUserId, "foret");
@@ -3201,7 +3210,7 @@ on test le dépôt d'un fichier récursif
     }
 
     @Test
-    @Tag("OTHERS_TEST")
+    @Tag("app.foret")
     @Disabled
     public void addApplicationFORET() throws Exception {
         addUserRightCreateApplication(authUserId, "foret");
@@ -3236,6 +3245,7 @@ on test le dépôt d'un fichier récursif
 
     @Test
     @Disabled("utile comme benchmark, ne vérifie rien")
+    @Tag("integration.persistence")
     public void benchmarkImportData() throws Exception {
         addApplicationAcbb();
         try (final InputStream in = fixtures.openSwcDataResourceName(false)) {
@@ -3252,6 +3262,7 @@ on test le dépôt d'un fichier récursif
     @Test
     @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
     @Disabled
+    @Tag("integration.rest")
     public void testGetUploadBundle() throws Exception {
         URL resource = getClass().getResource(Fixtures.getMonsoreApplicationConfigurationWithRepositoryResourceName());
         try (final InputStream in = Objects.requireNonNull(resource).openStream()) {
diff --git a/src/test/java/fr/inra/oresing/rest/TestReferencesErrors.java b/src/test/java/fr/inra/oresing/rest/TestReferencesErrors.java
index 31cb2f222a7b82eeed3b7bf2d5292c8abe387378..2147929f095fd30d93f9aa76acbef95df94a1cad 100644
--- a/src/test/java/fr/inra/oresing/rest/TestReferencesErrors.java
+++ b/src/test/java/fr/inra/oresing/rest/TestReferencesErrors.java
@@ -4,8 +4,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jayway.jsonpath.JsonPath;
 import fr.inra.oresing.OreSiNg;
 import fr.inra.oresing.TestDatabaseConfig;
+import fr.inra.oresing.persistence.AuthenticationFailure;
 import fr.inra.oresing.persistence.AuthenticationService;
 import fr.inra.oresing.persistence.JsonRowMapper;
+import fr.inra.oresing.rest.model.authorization.LoginAdminResult;
 import lombok.extern.slf4j.Slf4j;
 import org.hamcrest.Matchers;
 import org.hamcrest.core.IsEqual;
@@ -13,10 +15,7 @@ import org.hamcrest.core.IsNull;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.AfterAll;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.*;
 import org.skyscreamer.jsonassert.JSONAssert;
 import org.skyscreamer.jsonassert.JSONCompareMode;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,7 +29,6 @@ import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.TestPropertySource;
 import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.ResultActions;
 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -57,6 +55,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @AutoConfigureMockMvc(print = MockMvcPrint.NONE)
 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
 @Slf4j
+@Tag("domain.model")
 public class TestReferencesErrors {
 
     public static final Map<String, String> responses = new HashMap<>();
@@ -73,7 +72,8 @@ public class TestReferencesErrors {
     @Autowired
     private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
     private Cookie authCookie;
-
+    private static CreateUserResult authUser = null;
+    private static UUID userId;
     @AfterAll
     public static void registerErrors() throws IOException {
         String errorsAsString = new ObjectMapper().writeValueAsString(responses);
@@ -86,10 +86,22 @@ public class TestReferencesErrors {
 
     @BeforeEach
     public void createUser() throws Exception {
-        CreateUserResult authUser = authenticationService.createUser("poussin", "xxxxxxxx", "poussin@inrae.fr");
-        final UUID userId = authUser.userId();
-        setToActive(userId);
-        final CreateUserResult lambdaUser = authenticationService.createUser("lambda", "xxxxxxxx", "lamnda@inrae.fr");
+        try {
+            authUser = authenticationService.createUser("poussin", "xxxxxxxx", "poussin@inrae.fr");
+            userId = authUser.userId();
+            setToActive(authUser.userId());
+        } catch (AuthenticationFailure e) {
+            LoginAdminResult login = authenticationService.login("poussin", "xxxxxxxx");
+            authUser = CreateUserResult.of(authenticationService.getByIdOrLogin(login.id().toString()));
+            userId = authUser.userId();
+            setToActive(authUser.userId());
+            log.info("L'utilisateur existe déjà .... login");
+        }
+        try {
+            authenticationService.createUser("lambda", "xxxxxxxx", "lamnda@inrae.fr");
+        } catch (AuthenticationFailure e) {
+            log.info("L'utilisateur existe déjà .... login");
+        }
         authCookie = mockMvc.perform(post("/api/v1/login")
                         .param("login", "poussin")
                         .param("password", "xxxxxxxx"))
@@ -120,17 +132,6 @@ public class TestReferencesErrors {
         namedParameterJdbcTemplate.update(sql, Map.of("id", userId));
     }
 
-    @Transactional
-    void setToActive(final String login) {
-        String sql = """
-                UPDATE public.oresiuser 
-                SET accountstate = 'active' 
-                WHERE login = :login
-                """;
-
-        namedParameterJdbcTemplate.update(sql, Map.of("login", login));
-    }
-
 
     @Test
     public void testRecursivity() throws Exception {
diff --git a/src/test/java/fr/inra/oresing/rest/model/authorization/CreateAuthorizationRequestTest.java b/src/test/java/fr/inra/oresing/rest/model/authorization/CreateAuthorizationRequestTest.java
index 6be15e1d58d1b013e3e61ae3a713d48b57bb5985..e1d4cc4007d183ab329e98fe3989557528a53a32 100644
--- a/src/test/java/fr/inra/oresing/rest/model/authorization/CreateAuthorizationRequestTest.java
+++ b/src/test/java/fr/inra/oresing/rest/model/authorization/CreateAuthorizationRequestTest.java
@@ -16,7 +16,6 @@ import fr.inra.oresing.persistence.JsonRowMapper;
 import fr.inra.oresing.persistence.data.read.DataRepositoryWithBuffer;
 import fr.inra.oresing.rest.model.authorization.exception.AuthorizationRequestError;
 import fr.inra.oresing.rest.model.authorization.request.AuthorizationRequestBuilder;
-import lombok.SneakyThrows;
 import org.json.JSONException;
 import org.junit.jupiter.api.*;
 import org.mockito.Mockito;
@@ -29,7 +28,6 @@ import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 class CreateAuthorizationRequestTest {
     static String createAuthorization;
@@ -41,7 +39,7 @@ class CreateAuthorizationRequestTest {
     }
 
     @Test
-    @Tag("SUITE")
+    @Tag("core.auth")
     void toAuthorizationRequest() throws IOException {
         CreateAuthorizationRequest createAuthorizationRequest1 = new CreateAuthorizationRequest(
                 UUID.fromString("e7570009-35fb-489d-ad3b-5bb335e7c5d5"),
diff --git a/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryAdvancedSearchTest.java b/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryAdvancedSearchTest.java
index 85b4ec431b00bf541e5346cc4391d72ce153b8ee..64f74c465361222923c9488cf5e4ef979850a843 100644
--- a/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryAdvancedSearchTest.java
+++ b/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryAdvancedSearchTest.java
@@ -16,7 +16,7 @@ import java.util.stream.Stream;
 
 import static org.junit.jupiter.api.Assertions.*;
 
-@Tag("MODEL_REQUEST_TEST")
+@Tag("integration.persistence\n")
 class DownloadDatasetQueryAdvancedSearchTest {
     public static JsonRowMapper mapper;
     public static final Set<String> rowIds = Set.of("addf3698-88f2-43f9-8926-0b64a86f3678", "0aef7ed1-1df9-4fbf-a676-1932e87ced9d", "2c527cbe-3ed7-4883-b7d1-8f29eff99eb1");
diff --git a/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryTest.java b/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryTest.java
index 883e74b7f9f89a6b1397419ba383fb887526f560..a2356a2459479fe21aea463e6fdce0378dec18c8 100644
--- a/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryTest.java
+++ b/src/test/java/fr/inra/oresing/rest/model/data/DownloadDatasetQueryTest.java
@@ -22,7 +22,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
-@Tag("MODEL_REQUEST_TEST")
+@Tag("integration.persistence\n")
 @Disabled
 class DownloadDatasetQueryTest {
     final String simpleSearchJson = """
diff --git a/src/test/java/fr/inra/oresing/rest/services/RelationalServiceTest.java b/src/test/java/fr/inra/oresing/rest/services/RelationalServiceTest.java
index a7dfa5b57974ed2d8bbfe154687cd570f8e882cf..77d9c781d2f36e6454d8364beedbf0c42765967b 100644
--- a/src/test/java/fr/inra/oresing/rest/services/RelationalServiceTest.java
+++ b/src/test/java/fr/inra/oresing/rest/services/RelationalServiceTest.java
@@ -8,6 +8,7 @@ import fr.inra.oresing.rest.OreSiResourcesTest;
 import fr.inra.oresing.rest.ViewStrategy;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Tag;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
@@ -66,6 +67,7 @@ public class RelationalServiceTest {
 
     @Test
     @Disabled
+    @Tag("integration.persistence\n")
     public void testCreateViews() {
 //        request.setRequestClient(applicationCreatorRequestClient);
         final ImmutableSet<Fixtures.Application> applications = ImmutableSet