diff options
author | Jacek <jacek.poreda@sonarsource.com> | 2019-08-06 13:41:48 +0200 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2019-09-24 20:21:12 +0200 |
commit | 3ca59798cc4cd29d230b6cf222ed22b8ff8635f4 (patch) | |
tree | 476e2e1cebcbc464fa00c4d6436b9be6ff0d14f4 | |
parent | ba41dbfdf353e6b1d50a9b2af75d57faa65eeb95 (diff) | |
download | sonarqube-3ca59798cc4cd29d230b6cf222ed22b8ff8635f4.tar.gz sonarqube-3ca59798cc4cd29d230b6cf222ed22b8ff8635f4.zip |
SONAR-12364 - migrate project analysis delete action to new concept
5 files changed, 40 insertions, 8 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java index c4c535ed2e1..bf5408c44c7 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodDao.java @@ -85,6 +85,11 @@ public class NewCodePeriodDao implements Dao { return Optional.ofNullable(mapper(dbSession).selectByBranch(projectUuid, branchUuid)); } + public boolean existsByProjectAnalysisUuid(DbSession dbSession, String projectAnalysisUuid) { + requireNonNull(projectAnalysisUuid, "Project analysis uuid must be specified."); + return mapper(dbSession).countByProjectAnalysis(projectAnalysisUuid) > 0; + } + public void deleteByProjectUuidAndBranchUuid(DbSession dbSession, String projectUuid, String branchUuid) { requireNonNull(projectUuid, "Project uuid must be specified."); mapper(dbSession).deleteByProjectAndBranch(projectUuid, branchUuid); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java index c02e89ad973..cd800842cf3 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/newcodeperiod/NewCodePeriodMapper.java @@ -37,4 +37,6 @@ public interface NewCodePeriodMapper { void deleteByProjectAndBranch(@Param("projectUuid") String projectUuid, @Param("branchUuid") String branchUuid); NewCodePeriodDto selectByBranch(@Param("projectUuid") String projectUuid, @Param("branchUuid") String branchUuid); + + long countByProjectAnalysis(String projectAnalysisUuid); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml index 74de5d5e48e..fbd85860878 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/newcodeperiod/NewCodePeriodMapper.xml @@ -80,4 +80,13 @@ AND branch_uuid=#{branchUuid, jdbcType=VARCHAR} </update> + <select id="countByProjectAnalysis" parameterType="map" resultType="java.lang.Long"> + SELECT + count(1) + FROM new_code_periods ncp + WHERE + ncp.type='SPECIFIC_ANALYSIS' + AND ncp.value=#{projectAnalysisUuid, jdbcType=VARCHAR} + </select> + </mapper> diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java index cfe74ad7093..4b238b9eef9 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/newcodeperiod/NewCodePeriodDaoTest.java @@ -239,6 +239,26 @@ public class NewCodePeriodDaoTest { } @Test + public void exists_by_project_analysis_is_true() { + when(uuidFactory.create()).thenReturn(NEW_CODE_PERIOD_UUID); + + underTest.insert(dbSession, new NewCodePeriodDto() + .setProjectUuid("proj-uuid") + .setBranchUuid("branch-uuid") + .setType(NewCodePeriodType.SPECIFIC_ANALYSIS) + .setValue("analysis-uuid")); + + boolean exists = underTest.existsByProjectAnalysisUuid(dbSession, "analysis-uuid"); + assertThat(exists).isTrue(); + } + + @Test + public void exists_by_project_analysis_is_false() { + boolean exists = underTest.existsByProjectAnalysisUuid(dbSession, "analysis-uuid"); + assertThat(exists).isFalse(); + } + + @Test public void fail_select_by_project_and_branch_uuids_if_project_uuid_not_provided() { expectedException.expect(NullPointerException.class); expectedException.expectMessage("Project uuid must be specified."); diff --git a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java index f1940d7c49a..fec3383bfd6 100644 --- a/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java +++ b/server/sonar-webserver-webapi/src/main/java/org/sonar/server/projectanalysis/ws/DeleteAction.java @@ -86,14 +86,10 @@ public class DeleteAction implements ProjectAnalysesWsAction { } private void checkNotBaseline(DbSession dbSession, SnapshotDto analysis) { - dbClient.branchDao().selectByUuid(dbSession, analysis.getComponentUuid()) - .ifPresent(branchDto -> { - dbClient.newCodePeriodDao().selectByBranch(dbSession, branchDto.getProjectUuid(), branchDto.getUuid()) - .ifPresent(newCodePeriodDto -> - checkArgument(!newCodePeriodDto.getValue().equals(analysis.getUuid()), - "The analysis '%s' can not be deleted because it is set as a manual new code period baseline", analysis.getUuid()) - ); - }); + boolean isSetAsBaseline = dbClient.newCodePeriodDao().existsByProjectAnalysisUuid(dbSession, analysis.getUuid()); + checkArgument(!isSetAsBaseline, + "The analysis '%s' can not be deleted because it is set as a manual new code period baseline", analysis.getUuid()); + } private static NotFoundException analysisNotFoundException(String analysis) { |