]> source.dussan.org Git - sonarqube.git/commitdiff
CODEFIX-181 Introduce a new endpoint for AI CodeFix project level enablement
authorVojtech Suchy <vojtech.suchy@sonarsource.com>
Tue, 12 Nov 2024 13:06:36 +0000 (14:06 +0100)
committersonartech <sonartech@sonarsource.com>
Tue, 19 Nov 2024 20:02:53 +0000 (20:02 +0000)
server/sonar-db-dao/src/it/java/org/sonar/db/project/ProjectDaoIT.java
server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectMapper.java
server/sonar-db-dao/src/main/resources/org/sonar/db/project/ProjectMapper.xml

index 0157ec892888ed4d59f5093c60cdaedf002868a6..6de21b9cf7dc6ab73e5099bc602822a4a81f9ba8 100644 (file)
@@ -34,6 +34,8 @@ import org.assertj.core.api.Assertions;
 import org.assertj.core.groups.Tuple;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.sonar.api.impl.utils.AlwaysIncreasingSystem2;
 import org.sonar.api.utils.System2;
 import org.sonar.db.DbTester;
@@ -289,6 +291,50 @@ class ProjectDaoIT {
     assertProject(projectsByUuids.get(1), "projectName_p2", "projectKee_o1_p2", "uuid_o1_p2", "desc_p2", "tag1,tag2", false, true);
   }
 
+  @Test
+  void update_aiCodeFixEnabledPerProject() {
+    ProjectDto dto1 = createProject("o1", "p1").setAiCodeFixEnabled(true);
+    ProjectDto dto2 = createProject("o1", "p2");
+
+    projectDao.insert(db.getSession(), dto1);
+    projectDao.insert(db.getSession(), dto2);
+
+    List<ProjectDto> projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
+    assertThat(projectsByUuids).hasSize(2);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(0), "uuid_o1_p1", true);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(1), "uuid_o1_p2", false);
+
+    projectDao.update(db.getSession(), projectsByUuids.get(0).setAiCodeFixEnabled(false));
+    projectDao.update(db.getSession(), projectsByUuids.get(1).setAiCodeFixEnabled(true));
+
+    projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
+    assertThat(projectsByUuids).hasSize(2);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(0), "uuid_o1_p1", false);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(1), "uuid_o1_p2", true);
+  }
+
+  @ParameterizedTest
+  @ValueSource(booleans = { true, false })
+  void update_aiCodeFixEnabledForAllProjects(boolean aiCodeFixEnablement) {
+    ProjectDto dto1 = createProject("o1", "p1").setAiCodeFixEnabled(true);
+    ProjectDto dto2 = createProject("o1", "p2");
+
+    projectDao.insert(db.getSession(), dto1);
+    projectDao.insert(db.getSession(), dto2);
+
+    List<ProjectDto> projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
+    assertThat(projectsByUuids).hasSize(2);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(0), "uuid_o1_p1", true);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(1), "uuid_o1_p2", false);
+
+    projectDao.updateAiCodeFixEnablementForAllProjects(db.getSession(), aiCodeFixEnablement);
+
+    projectsByUuids = projectDao.selectByUuids(db.getSession(), new HashSet<>(Arrays.asList("uuid_o1_p1", "uuid_o1_p2")));
+    assertThat(projectsByUuids).hasSize(2);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(0), "uuid_o1_p1", aiCodeFixEnablement);
+    assertProjectAiCodeFixEnablement(projectsByUuids.get(1), "uuid_o1_p2", aiCodeFixEnablement);
+  }
+
   @Test
   void select_by_uuids() {
     ProjectDto dto1 = createProject("o1", "p1");
@@ -447,6 +493,10 @@ class ProjectDaoIT {
       .containsExactly(name, kee, kee, uuid, desc, tags, isPrivate, isAiCodeAssurance);
   }
 
+  private void assertProjectAiCodeFixEnablement(ProjectDto dto, String uuid, boolean isAiCodeFixEnabled) {
+    assertThat(dto).extracting("uuid", "aiCodeFixEnabled").containsExactly(uuid, isAiCodeFixEnabled);
+  }
+
   private ProjectDto createProject(String org, String name) {
     return new ProjectDto()
       .setName("projectName_" + name)
index 74849bf4f0476b6417893011fd4742248eadf796..876c8a0ff28335ac3e0627beb9c07c92f2bec487 100644 (file)
@@ -123,6 +123,10 @@ public class ProjectDao implements Dao {
     mapper(session).updateAiCodeAssurance(uuid, aiCodeAssurance, system2.now());
   }
 
+  public void updateAiCodeFixEnablementForAllProjects(DbSession dbSession, boolean featureEnablement) {
+    mapper(dbSession).updateAiCodeFixEnablementForAllProjects(featureEnablement, system2.now());
+  }
+
   public void updateTags(DbSession session, ProjectDto project) {
     mapper(session).updateTags(project);
   }
index 4717d3e55b18d1c174d604817b6f4f6059f86119..4b899aab9027a5433ffa0507d58e42e5398fa944 100644 (file)
@@ -60,6 +60,8 @@ public interface ProjectMapper {
 
   void updateAiCodeAssurance(@Param("uuid") String uuid, @Param("aiCodeAssurance") boolean aiCodeAssurance, @Param("updatedAt") long updatedAt);
 
+  void updateAiCodeFixEnablementForAllProjects(@Param("aiCodeFixEnabled") boolean aiCodeFixEnabled, @Param("updatedAt") long updatedAt);
+
   List<ProjectDto> selectAllApplications();
 
   List<ProjectDto> selectApplicationsByKeys(@Param("kees") Collection<String> kees);
index 9f332354d875e3146524ac769baac9955b0305c3..aa87a5f8900a27aabc50acbcbe64732c7d1fad38 100644 (file)
     update projects set
     name = #{name,jdbcType=VARCHAR},
     description = #{description,jdbcType=VARCHAR},
+    ai_code_fix_enabled = #{aiCodeFixEnabled, jdbcType=BOOLEAN},
     updated_at = #{updatedAt,jdbcType=BIGINT}
     where
     uuid = #{uuid,jdbcType=VARCHAR}
     uuid = #{uuid,jdbcType=VARCHAR}
   </update>
 
+  <update id="updateAiCodeFixEnablementForAllProjects">
+    update projects set
+    ai_code_fix_enabled = #{aiCodeFixEnabled,jdbcType=BOOLEAN},
+    updated_at = #{updatedAt,jdbcType=BIGINT}
+  </update>
+
   <update id="updateNcloc">
     update projects set
     ncloc = #{ncloc,jdbcType=BIGINT}