aboutsummaryrefslogtreecommitdiffstats
path: root/server/sonar-db-dao
diff options
context:
space:
mode:
authorMichal Duda <michal.duda@sonarsource.com>2020-09-22 13:02:01 +0200
committersonartech <sonartech@sonarsource.com>2020-09-29 20:07:42 +0000
commit6dc2cc9ff6340e6588b7608ed90354aa6767fcdf (patch)
tree112201bd6fd9c2ae99f1d9cd2f5bc59ff6961e32 /server/sonar-db-dao
parent0ecd8610552ccd59049308c1be46b03470c48538 (diff)
downloadsonarqube-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')
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageDao.java7
-rw-r--r--server/sonar-db-dao/src/main/java/org/sonar/db/ce/CeTaskMessageMapper.java2
-rw-r--r--server/sonar-db-dao/src/main/resources/org/sonar/db/ce/CeTaskMessageMapper.xml16
-rw-r--r--server/sonar-db-dao/src/test/java/org/sonar/db/ce/CeTaskMessageDaoTest.java27
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);
}