diff options
author | Vojtech Suchy <vojtech.suchy@sonarsource.com> | 2024-11-12 14:06:36 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2024-11-19 20:02:53 +0000 |
commit | 966250379cd22b0c1ff462194bdea6fb4fa85e49 (patch) | |
tree | 40ed723bb2e915786c7bc763cdd99c48735ffad3 | |
parent | 0adcf3598f8c70bb3f085272295557f306f444fc (diff) | |
download | sonarqube-966250379cd22b0c1ff462194bdea6fb4fa85e49.tar.gz sonarqube-966250379cd22b0c1ff462194bdea6fb4fa85e49.zip |
CODEFIX-181 Introduce a new endpoint for AI CodeFix project level enablement
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} |