aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVojtech Suchy <vojtech.suchy@sonarsource.com>2024-11-12 14:06:36 +0100
committersonartech <sonartech@sonarsource.com>2024-11-19 20:02:53 +0000
commit966250379cd22b0c1ff462194bdea6fb4fa85e49 (patch)
tree40ed723bb2e915786c7bc763cdd99c48735ffad3
parent0adcf3598f8c70bb3f085272295557f306f444fc (diff)
downloadsonarqube-966250379cd22b0c1ff462194bdea6fb4fa85e49.tar.gz
sonarqube-966250379cd22b0c1ff462194bdea6fb4fa85e49.zip
CODEFIX-181 Introduce a new endpoint for AI CodeFix project level enablement
-rw-r--r--server/sonar-db-dao/src/it/java/org/sonar/db/project/ProjectDaoIT.java50
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java4
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectMapper.java2
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/project/ProjectMapper.xml7
4 files changed, 63 insertions, 0 deletions
diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/project/ProjectDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/project/ProjectDaoIT.java
index 0157ec89288..6de21b9cf7d 100644
--- a/server/sonar-db-dao/src/it/java/org/sonar/db/project/ProjectDaoIT.java
+++ b/server/sonar-db-dao/src/it/java/org/sonar/db/project/ProjectDaoIT.java
@@ -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;
@@ -290,6 +292,50 @@ class ProjectDaoIT {
}
@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");
ProjectDto dto2 = createProject("o1", "p2");
@@ -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)
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java
index 74849bf4f04..876c8a0ff28 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectDao.java
@@ -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);
}
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectMapper.java
index 4717d3e55b1..4b899aab902 100644
--- a/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectMapper.java
+++ b/server/sonar-db-dao/src/main/java/org/sonar/db/project/ProjectMapper.java
@@ -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);
diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/project/ProjectMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/project/ProjectMapper.xml
index 9f332354d87..aa87a5f8900 100644
--- a/server/sonar-db-dao/src/main/resources/org/sonar/db/project/ProjectMapper.xml
+++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/project/ProjectMapper.xml
@@ -171,6 +171,7 @@
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}
@@ -192,6 +193,12 @@
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}