diff options
author | Michal Duda <michal.duda@sonarsource.com> | 2020-09-22 13:02:01 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-09-29 20:07:42 +0000 |
commit | 6dc2cc9ff6340e6588b7608ed90354aa6767fcdf (patch) | |
tree | 112201bd6fd9c2ae99f1d9cd2f5bc59ff6961e32 /server/sonar-db-dao | |
parent | 0ecd8610552ccd59049308c1be46b03470c48538 (diff) | |
download | sonarqube-6dc2cc9ff6340e6588b7608ed90354aa6767fcdf.tar.gz sonarqube-6dc2cc9ff6340e6588b7608ed90354aa6767fcdf.zip |
SONAR-13862 Do not display dismissed warnings in api/ce/analysis_status
Diffstat (limited to 'server/sonar-db-dao')
4 files changed, 52 insertions, 0 deletions
diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageDao.java index 39c4b8e2fad..5cd9f8e93ad 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageDao.java @@ -40,6 +40,13 @@ public class CeTaskMessageDao implements Dao { return getMapper(dbSession).selectByTask(taskUuid); } + /** + * @return the non dismissed messages for the specific task and specific user, if any, in ascending order of column {@code CREATED_AT}. + */ + public List<CeTaskMessageDto> selectNonDismissedByUserAndTask(DbSession dbSession, String taskUuid, String userUuid) { + return getMapper(dbSession).selectNonDismissedByUserAndTask(taskUuid, userUuid); + } + public void deleteByType(DbSession session, CeTaskMessageType type) { getMapper(session).deleteByType(type.name()); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageMapper.java index 619cd743310..b63349f7c06 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageMapper.java @@ -30,5 +30,7 @@ public interface CeTaskMessageMapper { List<CeTaskMessageDto> selectByTask(@Param("taskUuid") String taskUuid); + List<CeTaskMessageDto> selectNonDismissedByUserAndTask(@Param("taskUuid") String taskUuid, @Param("userUuid") String userUuid); + void deleteByType(@Param("ceMessageType") String ceMessageType); } diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeTaskMessageMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeTaskMessageMapper.xml index 360ac4425c1..9666696891b 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeTaskMessageMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeTaskMessageMapper.xml @@ -31,6 +31,22 @@ ctm.created_at asc </select> + <select id="selectNonDismissedByUserAndTask" resultType="org.sonar.db.ce.CeTaskMessageDto"> + select + <include refid="columns"/> + from + ce_task_message ctm + where + ctm.task_uuid=#{taskUuid,jdbcType=VARCHAR} + and not exists ( + select 1 + from user_dismissed_messages udm + where ctm.message_type = udm.message_type and udm.user_uuid=#{userUuid,jdbcType=VARCHAR} + ) + order by + ctm.created_at asc + </select> + <insert id="insert" parameterType="org.sonar.db.ce.CeTaskMessageDto" useGeneratedKeys="false"> insert into ce_task_message ( diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeTaskMessageDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeTaskMessageDaoTest.java index 4ad7e016454..6f14b690c20 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeTaskMessageDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeTaskMessageDaoTest.java @@ -28,6 +28,8 @@ import org.junit.rules.ExpectedException; import org.sonar.api.utils.System2; import org.sonar.db.DbSession; import org.sonar.db.DbTester; +import org.sonar.db.project.ProjectDto; +import org.sonar.db.user.UserDto; import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic; import static org.assertj.core.api.Assertions.assertThat; @@ -127,6 +129,31 @@ public class CeTaskMessageDaoTest { .containsExactlyInAnyOrder(messages[0].getUuid(), messages[2].getUuid()); } + @Test + public void selectNonDismissedByUserAndTask_returns_empty_on_empty_table() { + UserDto user = dbTester.users().insertUser(); + String taskUuid = "17ae66e6-fe83-4c80-b704-4b04e9c5abe8"; + + List<CeTaskMessageDto> dto = underTest.selectNonDismissedByUserAndTask(dbTester.getSession(), taskUuid, user.getUuid()); + + assertThat(dto).isEmpty(); + } + + @Test + public void selectNonDismissedByUserAndTask_returns_non_dismissed_messages() { + UserDto user = dbTester.users().insertUser(); + ProjectDto project = dbTester.components().insertPrivateProjectDto(); + dbTester.users().insertUserDismissedMessage(user, project, CeTaskMessageType.SUGGEST_DEVELOPER_EDITION_UPGRADE); + String taskUuid = "17ae66e6-fe83-4c80-b704-4b04e9c5abe8"; + CeTaskMessageDto msg1 = insertMessage(taskUuid, 1, 1_222_333L); + insertMessage(taskUuid, 2, 1_222_334L, CeTaskMessageType.SUGGEST_DEVELOPER_EDITION_UPGRADE); + CeTaskMessageDto msg3 = insertMessage(taskUuid, 3, 1_222_335L); + List<CeTaskMessageDto> messages = underTest.selectNonDismissedByUserAndTask(dbTester.getSession(), taskUuid, user.getUuid()); + + assertThat(messages).hasSize(2); + assertThat(messages).extracting(CeTaskMessageDto::getUuid).containsExactlyInAnyOrder(msg1.getUuid(), msg3.getUuid()); + } + private CeTaskMessageDto insertMessage(String taskUuid, int i, long createdAt) { return insertMessage(taskUuid, i, createdAt, CeTaskMessageType.GENERIC); } |