From 1b98f493116b447b4f8763399f19b6782ea8e741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lesaint?= Date: Tue, 3 Oct 2017 17:41:32 +0200 Subject: [PATCH] SONAR-4824 support branches when filtering recipients on their perms by querying permissions in DB with component key rather than component uuid as computing the target branch's key from the branch's key is easy --- .../sonar/db/permission/AuthorizationDao.java | 4 +- .../db/permission/AuthorizationMapper.java | 2 +- .../org/sonar/db/property/PropertiesDao.java | 4 +- .../sonar/db/property/PropertiesMapper.java | 2 +- .../db/permission/AuthorizationMapper.xml | 6 +- .../sonar/db/property/PropertiesMapper.xml | 2 +- .../db/permission/AuthorizationDaoTest.java | 75 +++++++++++++++---- .../sonar/db/property/PropertiesDaoTest.java | 8 +- ...AnalysisFailureNotificationDispatcher.java | 6 +- .../step/QualityGateEventsStep.java | 1 - .../step/SendIssueNotificationsStep.java | 6 +- .../org/sonar/server/event/NewAlerts.java | 8 +- .../AbstractNewIssuesEmailTemplate.java | 1 - ...hangesOnMyIssueNotificationDispatcher.java | 6 +- .../DoNotFixNotificationDispatcher.java | 6 +- .../notification/IssueChangeNotification.java | 5 +- .../MyNewIssuesNotificationDispatcher.java | 6 +- .../notification/NewIssuesNotification.java | 4 +- .../NewIssuesNotificationDispatcher.java | 6 +- .../DefaultNotificationManager.java | 26 +++---- ...ysisFailureNotificationDispatcherTest.java | 12 +-- .../step/QualityGateEventsStepTest.java | 4 - .../step/SendIssueNotificationsStepTest.java | 10 +-- .../org/sonar/server/event/NewAlertsTest.java | 28 ++++--- .../sonar/server/issue/IssueUpdaterTest.java | 1 - ...esOnMyIssueNotificationDispatcherTest.java | 8 +- .../DoNotFixNotificationDispatcherTest.java | 14 +++- .../IssueChangeNotificationTest.java | 6 +- .../IssueChangesEmailTemplateTest.java | 4 +- .../MyNewIssuesEmailTemplateTest.java | 1 - ...MyNewIssuesNotificationDispatcherTest.java | 3 +- .../NewIssuesEmailTemplateTest.java | 1 - .../NewIssuesNotificationDispatcherTest.java | 5 +- .../NewIssuesNotificationTest.java | 6 +- 34 files changed, 164 insertions(+), 123 deletions(-) diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationDao.java index 56ff394b3eb0..9e8538b5217c 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationDao.java @@ -177,10 +177,10 @@ public List selectGlobalAdministratorLogins(DbSession dbSession) { return mapper(dbSession).selectLoginsWithGlobalPermission(ADMINISTER.getKey()); } - public Set keepAuthorizedLoginsOnProject(DbSession dbSession, Set logins, String projectUuid, String permission) { + public Set keepAuthorizedLoginsOnProject(DbSession dbSession, Set logins, String projectKey, String permission) { return executeLargeInputsIntoSet( logins, - partitionOfLogins -> mapper(dbSession).keepAuthorizedLoginsOnProject(partitionOfLogins, projectUuid, permission), + partitionOfLogins -> mapper(dbSession).keepAuthorizedLoginsOnProject(partitionOfLogins, projectKey, permission), partitionSize -> partitionSize / 3); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationMapper.java index 1c788ea10199..3a7043bfb133 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/permission/AuthorizationMapper.java @@ -63,7 +63,7 @@ int countUsersWithGlobalPermissionExcludingUserPermission(@Param("organizationUu List selectQualityProfileAdministratorLogins(@Param("permission") String permission); - Set keepAuthorizedLoginsOnProject(@Param("logins") List logins, @Param("projectUuid") String projectUuid, @Param("permission") String permission); + Set keepAuthorizedLoginsOnProject(@Param("logins") List logins, @Param("projectKey") String projectKey, @Param("permission") String permission); List selectLoginsWithGlobalPermission(@Param("permission") String permission); } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java index db9f924d2f2d..46b1d3b4a7c7 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesDao.java @@ -66,9 +66,9 @@ public PropertiesDao(MyBatis mybatis, System2 system2) { * * @return the list of Subscriber (maybe be empty - obviously) */ - public Set findUsersForNotification(String notificationDispatcherKey, String notificationChannelKey, @Nullable String projectUuid) { + public Set findUsersForNotification(String notificationDispatcherKey, String notificationChannelKey, @Nullable String projectKey) { try (DbSession session = mybatis.openSession(false)) { - return getMapper(session).findUsersForNotification(NOTIFICATION_PREFIX + notificationDispatcherKey + "." + notificationChannelKey, projectUuid); + return getMapper(session).findUsersForNotification(NOTIFICATION_PREFIX + notificationDispatcherKey + "." + notificationChannelKey, projectKey); } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java index 2d9c75df052f..4472156d4500 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/property/PropertiesMapper.java @@ -26,7 +26,7 @@ public interface PropertiesMapper { - Set findUsersForNotification(@Param("notifKey") String notificationKey, @Nullable @Param("projectUuid") String projectUuid); + Set findUsersForNotification(@Param("notifKey") String notificationKey, @Nullable @Param("projectKey") String projectKey); List selectGlobalProperties(); diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/AuthorizationMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/AuthorizationMapper.xml index b43ede52e693..60f105b4ede4 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/AuthorizationMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/permission/AuthorizationMapper.xml @@ -401,7 +401,7 @@ SELECT u.login FROM users u INNER JOIN user_roles ur ON ur.user_id = u.id - INNER JOIN projects p ON p.uuid = #{projectUuid,jdbcType=VARCHAR} + INNER JOIN projects p ON p.kee = #{projectKey,jdbcType=VARCHAR} WHERE ur.organization_uuid = p.organization_uuid AND ur.resource_id = p.id @@ -412,7 +412,7 @@ SELECT u.login FROM users u - INNER JOIN projects p ON p.uuid = #{projectUuid,jdbcType=VARCHAR} + INNER JOIN projects p ON p.kee = #{projectKey,jdbcType=VARCHAR} INNER JOIN group_roles gr ON gr.organization_uuid = p.organization_uuid INNER JOIN groups_users gu ON gr.group_id = gu.group_id WHERE @@ -425,7 +425,7 @@ SELECT u.login FROM users u - INNER JOIN projects p ON p.uuid = #{projectUuid,jdbcType=VARCHAR} + INNER JOIN projects p ON p.kee = #{projectKey,jdbcType=VARCHAR} WHERE p.private = ${_false} AND u.login IN #{login} diff --git a/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml b/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml index b41fa68b0b45..f5571ebe90f8 100644 --- a/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml +++ b/server/sonar-db-dao/src/main/resources/org/sonar/db/property/PropertiesMapper.xml @@ -22,7 +22,7 @@ ${_false} as "global" FROM users u - INNER JOIN projects c on c.uuid = #{projectUuid,jdbcType=VARCHAR} + INNER JOIN projects c on c.kee = #{projectKey,jdbcType=VARCHAR} INNER JOIN properties p ON p.user_id = u.id WHERE p.prop_key = #{notifKey,jdbcType=VARCHAR} diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java index 693266f67228..951f8011a034 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/permission/AuthorizationDaoTest.java @@ -35,6 +35,7 @@ import org.sonar.core.util.stream.MoreCollectors; import org.sonar.db.DbSession; import org.sonar.db.DbTester; +import org.sonar.db.component.BranchType; import org.sonar.db.component.ComponentDto; import org.sonar.db.organization.OrganizationDto; import org.sonar.db.user.GroupDto; @@ -61,6 +62,7 @@ public class AuthorizationDaoTest { @Rule public DbTester db = DbTester.create(System2.INSTANCE); + private final Random random = new Random(); private DbSession dbSession = db.getSession(); private AuthorizationDao underTest = new AuthorizationDao(); private OrganizationDto organization; @@ -70,7 +72,7 @@ public class AuthorizationDaoTest { private Set randomPublicProjectIds; private Set randomPrivateProjectIds; private Set randomExistingUserIds; - private String randomPermission = "p" + new Random().nextInt(); + private String randomPermission = "p" + random.nextInt(); @Before public void setUp() throws Exception { @@ -78,15 +80,15 @@ public void setUp() throws Exception { user = db.users().insertUser(); group1 = db.users().insertGroup(organization, "group1"); group2 = db.users().insertGroup(organization, "group2"); - randomExistingUserIds = IntStream.range(0, 1 + Math.abs(new Random().nextInt(5))) + randomExistingUserIds = IntStream.range(0, 1 + Math.abs(random.nextInt(5))) .map(i -> db.users().insertUser().getId()) .boxed() .collect(MoreCollectors.toSet()); - randomPublicProjectIds = IntStream.range(0, 1 + Math.abs(new Random().nextInt(5))) + randomPublicProjectIds = IntStream.range(0, 1 + Math.abs(random.nextInt(5))) .mapToLong(i -> db.components().insertPublicProject(organization).getId()) .boxed() .collect(MoreCollectors.toSet()); - randomPrivateProjectIds = IntStream.range(0, 1 + Math.abs(new Random().nextInt(5))) + randomPrivateProjectIds = IntStream.range(0, 1 + Math.abs(random.nextInt(5))) .mapToLong(i -> db.components().insertPrivateProject(organization).getId()) .boxed() .collect(MoreCollectors.toSet()); @@ -239,7 +241,7 @@ public void keepAuthorizedProjectIds_returns_empty_for_user_if_project_set_is_em @Test public void keepAuthorizedProjectIds_returns_empty_for_group_AnyOne_for_non_existent_projects() { - Set randomNonProjectsSet = IntStream.range(0, 1 + Math.abs(new Random().nextInt(5))) + Set randomNonProjectsSet = IntStream.range(0, 1 + Math.abs(random.nextInt(5))) .mapToLong(i -> 3_562 + i) .boxed() .collect(MoreCollectors.toSet()); @@ -250,7 +252,7 @@ public void keepAuthorizedProjectIds_returns_empty_for_group_AnyOne_for_non_exis @Test public void keepAuthorizedProjectIds_returns_empty_for_user_for_non_existent_projects() { - Set randomNonProjectsSet = IntStream.range(0, 1 + Math.abs(new Random().nextInt(5))) + Set randomNonProjectsSet = IntStream.range(0, 1 + Math.abs(random.nextInt(5))) .mapToLong(i -> 9_666 + i) .boxed() .collect(MoreCollectors.toSet()); @@ -513,8 +515,8 @@ public void keepAuthorizedUsersForRoleAndProject_returns_empty_if_user_set_is_em @Test public void keepAuthorizedUsersForRoleAndProject_returns_empty_for_non_existent_users() { - ComponentDto project = new Random().nextBoolean() ? db.components().insertPublicProject(organization) : db.components().insertPrivateProject(organization); - Set randomNonExistingUserIdsSet = IntStream.range(0, 1 + Math.abs(new Random().nextInt(5))) + ComponentDto project = random.nextBoolean() ? db.components().insertPublicProject(organization) : db.components().insertPrivateProject(organization); + Set randomNonExistingUserIdsSet = IntStream.range(0, 1 + Math.abs(random.nextInt(5))) .map(i -> i + 1_990) .boxed() .collect(MoreCollectors.toSet()); @@ -1044,11 +1046,11 @@ public void keepAuthorizedLoginsOnProject_return_correct_users_on_public_project db.users().insertMember(adminGroup, admin2); db.users().insertProjectPermissionOnGroup(adminGroup, UserRole.ADMIN, project); - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin()), project.uuid(), UserRole.USER)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin()), project.getKey(), UserRole.USER)) .containsOnly(user1.getLogin()); - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin(), admin1.getLogin(), admin2.getLogin()), project.uuid(), UserRole.USER)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin(), admin1.getLogin(), admin2.getLogin()), project.getKey(), UserRole.USER)) .containsOnly(user1.getLogin(), admin1.getLogin(), admin2.getLogin()); - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin(), admin1.getLogin(), admin2.getLogin()), project.uuid(), UserRole.ADMIN)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin(), admin1.getLogin(), admin2.getLogin()), project.getKey(), UserRole.ADMIN)) .containsOnly(admin1.getLogin(), admin2.getLogin()); } @@ -1080,17 +1082,60 @@ public void keepAuthorizedLoginsOnProject_return_correct_users_on_private_projec // user without role UserDto userWithNoRole = db.users().insertUser(); - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(userWithNoRole.getLogin()), project.uuid(), UserRole.USER)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(userWithNoRole.getLogin()), project.getKey(), UserRole.USER)) .isEmpty(); - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin()), project.uuid(), UserRole.USER)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin()), project.getKey(), UserRole.USER)) .containsOnly(user1.getLogin()); Set allLogins = newHashSet(admin1.getLogin(), admin2.getLogin(), user1.getLogin(), user2.getLogin(), userWithNoRole.getLogin()); // Admin does not have the USER permission set - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, allLogins, project.uuid(), UserRole.USER)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, allLogins, project.getKey(), UserRole.USER)) .containsOnly(user1.getLogin(), user2.getLogin()); - assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, allLogins, project.uuid(), UserRole.ADMIN)) + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, allLogins, project.getKey(), UserRole.ADMIN)) + .containsOnly(admin1.getLogin(), admin2.getLogin()); + } + + @Test + public void keepAuthorizedLoginsOnProject_return_correct_users_on_branch() { + ComponentDto project = db.components().insertPrivateProject(organization); + ComponentDto branch = db.components().insertProjectBranch(project, c -> c.setBranchType(random.nextBoolean() ? BranchType.SHORT : BranchType.LONG)); + + GroupDto userGroup = db.users().insertGroup(organization, "USERS"); + GroupDto adminGroup = db.users().insertGroup(organization, "ADMIN"); + db.users().insertProjectPermissionOnGroup(userGroup, UserRole.USER, project); + db.users().insertProjectPermissionOnGroup(adminGroup, UserRole.ADMIN, project); + + // admin with "direct" ADMIN role + UserDto admin1 = db.users().insertUser(); + db.users().insertProjectPermissionOnUser(admin1, UserRole.ADMIN, project); + + // admin2 with ADMIN role through group + UserDto admin2 = db.users().insertUser(); + db.users().insertMember(adminGroup, admin2); + + // user1 with "direct" USER role + UserDto user1 = db.users().insertUser(); + db.users().insertProjectPermissionOnUser(user1, UserRole.USER, project); + + // user2 with USER role through group + UserDto user2 = db.users().insertUser(); + db.users().insertMember(userGroup, user2); + + // user without role + UserDto userWithNoRole = db.users().insertUser(); + + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(userWithNoRole.getLogin()), branch.getKey(), UserRole.USER)) + .isEmpty(); + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, newHashSet(user1.getLogin()), branch.getKey(), UserRole.USER)) + .containsOnly(user1.getLogin()); + + Set allLogins = newHashSet(admin1.getLogin(), admin2.getLogin(), user1.getLogin(), user2.getLogin(), userWithNoRole.getLogin()); + + // Admin does not have the USER permission set + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, allLogins, branch.getKey(), UserRole.USER)) + .containsOnly(user1.getLogin(), user2.getLogin()); + assertThat(underTest.keepAuthorizedLoginsOnProject(dbSession, allLogins, branch.getKey(), UserRole.ADMIN)) .containsOnly(admin1.getLogin(), admin2.getLogin()); } } diff --git a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java index 1379ac1caf93..c066f2caa83b 100644 --- a/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java +++ b/server/sonar-db-dao/src/test/java/org/sonar/db/property/PropertiesDaoTest.java @@ -101,10 +101,10 @@ public void shouldFindUsersForNotification() throws SQLException { assertThat(underTest.findUsersForNotification("NewViolations", "Email", "uuid_78")) .isEmpty(); - assertThat(underTest.findUsersForNotification("NewViolations", "Email", project1.uuid())) + assertThat(underTest.findUsersForNotification("NewViolations", "Email", project1.getKey())) .containsOnly(new Subscriber("user2", false)); - assertThat(underTest.findUsersForNotification("NewViolations", "Email", project2.uuid())) + assertThat(underTest.findUsersForNotification("NewViolations", "Email", project2.getKey())) .isEmpty(); assertThat(underTest.findUsersForNotification("NewViolations", "Twitter", null)) @@ -113,10 +113,10 @@ public void shouldFindUsersForNotification() throws SQLException { assertThat(underTest.findUsersForNotification("NewViolations", "Twitter", "uuid_78")) .containsOnly(new Subscriber("user3", true)); - assertThat(underTest.findUsersForNotification("NewViolations", "Twitter", project1.uuid())) + assertThat(underTest.findUsersForNotification("NewViolations", "Twitter", project1.getKey())) .containsOnly(new Subscriber("user2", false), new Subscriber("user3", true)); - assertThat(underTest.findUsersForNotification("NewViolations", "Twitter", project2.uuid())) + assertThat(underTest.findUsersForNotification("NewViolations", "Twitter", project2.getKey())) .containsOnly(new Subscriber("user1", false), new Subscriber("user3", true), new Subscriber("user3", false)); } diff --git a/server/sonar-server/src/main/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcher.java b/server/sonar-server/src/main/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcher.java index ff3ad8346c2f..80ad8c056254 100644 --- a/server/sonar-server/src/main/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcher.java +++ b/server/sonar-server/src/main/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcher.java @@ -55,9 +55,9 @@ public String getKey() { @Override public void dispatch(Notification notification, Context context) { - String projectUuid = notification.getFieldValue("project.uuid"); - Multimap subscribedRecipients = manager.findSubscribedRecipientsForDispatcher( - this, projectUuid, REQUIRED_SUBSCRIBER_PERMISSIONS); + String projectKey = notification.getFieldValue("project.key"); + Multimap subscribedRecipients = manager + .findSubscribedRecipientsForDispatcher(this, projectKey, REQUIRED_SUBSCRIBER_PERMISSIONS); for (Map.Entry> channelsByRecipients : subscribedRecipients.asMap().entrySet()) { String userLogin = channelsByRecipients.getKey(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStep.java index 0718f9826402..47476580719d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStep.java @@ -127,7 +127,6 @@ private void notifyUsers(Component project, String label, QualityGateStatus rawS .setDefaultMessage(String.format("Alert on %s: %s", project.getName(), label)) .setFieldValue("projectName", project.getName()) .setFieldValue("projectKey", project.getPublicKey()) - .setFieldValue("projectUuid", project.getUuid()) .setFieldValue("projectVersion", project.getReportAttributes().getVersion()) .setFieldValue("alertName", label) .setFieldValue("alertText", rawStatus.getText()) diff --git a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStep.java b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStep.java index c145b30d61b4..b54344cc019f 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStep.java +++ b/server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStep.java @@ -127,7 +127,7 @@ private void sendIssueChangeNotification(DefaultIssue issue, Component project) IssueChangeNotification changeNotification = new IssueChangeNotification(); changeNotification.setRuleName(rules.getByKey(issue.ruleKey()).getName()); changeNotification.setIssue(issue); - changeNotification.setProject(project.getPublicKey(), project.getName(), getBranchName(), project.getUuid()); + changeNotification.setProject(project.getPublicKey(), project.getName(), getBranchName()); getComponentKey(issue).ifPresent(c -> changeNotification.setComponent(c.getPublicKey(), c.getName())); service.deliver(changeNotification); } @@ -136,7 +136,7 @@ private void sendNewIssuesNotification(NewIssuesStatistics statistics, Component NewIssuesStatistics.Stats globalStatistics = statistics.globalStatistics(); NewIssuesNotification notification = newIssuesNotificationFactory .newNewIssuesNotication() - .setProject(project.getPublicKey(), project.getUuid(), project.getName(), getBranchName()) + .setProject(project.getPublicKey(), project.getName(), getBranchName()) .setProjectVersion(project.getReportAttributes().getVersion()) .setAnalysisDate(new Date(analysisDate)) .setStatistics(project.getName(), globalStatistics) @@ -155,7 +155,7 @@ private void sendNewIssuesNotificationToAssignees(NewIssuesStatistics statistics .newMyNewIssuesNotification() .setAssignee(assignee); myNewIssuesNotification - .setProject(project.getPublicKey(), project.getUuid(), project.getName(), getBranchName()) + .setProject(project.getPublicKey(), project.getName(), getBranchName()) .setProjectVersion(project.getReportAttributes().getVersion()) .setAnalysisDate(new Date(analysisDate)) .setStatistics(project.getName(), assigneeStatistics) diff --git a/server/sonar-server/src/main/java/org/sonar/server/event/NewAlerts.java b/server/sonar-server/src/main/java/org/sonar/server/event/NewAlerts.java index 87804f12be29..f298a824a51a 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/event/NewAlerts.java +++ b/server/sonar-server/src/main/java/org/sonar/server/event/NewAlerts.java @@ -58,10 +58,10 @@ public static NotificationDispatcherMetadata newMetadata() { @Override public void dispatch(Notification notification, Context context) { - String projectUuid = notification.getFieldValue("projectUuid"); - if (projectUuid != null) { - Multimap subscribedRecipients = notifications.findSubscribedRecipientsForDispatcher( - this, projectUuid, ALL_MUST_HAVE_ROLE_USER); + String projectKey = notification.getFieldValue("projectKey"); + if (projectKey != null) { + Multimap subscribedRecipients = notifications + .findSubscribedRecipientsForDispatcher(this, projectKey, ALL_MUST_HAVE_ROLE_USER); for (Map.Entry> channelsByRecipients : subscribedRecipients.asMap().entrySet()) { String userLogin = channelsByRecipients.getKey(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/AbstractNewIssuesEmailTemplate.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/AbstractNewIssuesEmailTemplate.java index 7a5eb221ac52..48673c575d48 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/AbstractNewIssuesEmailTemplate.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/AbstractNewIssuesEmailTemplate.java @@ -51,7 +51,6 @@ public abstract class AbstractNewIssuesEmailTemplate extends EmailTemplate { static final String FIELD_PROJECT_NAME = "projectName"; static final String FIELD_PROJECT_KEY = "projectKey"; static final String FIELD_PROJECT_DATE = "projectDate"; - static final String FIELD_PROJECT_UUID = "projectUuid"; static final String FIELD_PROJECT_VERSION = "projectVersion"; static final String FIELD_ASSIGNEE = "assignee"; static final String FIELD_BRANCH = "branch"; diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcher.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcher.java index 9f0031d9d816..26375d52a090 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcher.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcher.java @@ -59,9 +59,9 @@ public static NotificationDispatcherMetadata newMetadata() { @Override public void dispatch(Notification notification, Context context) { - String projectUuid = notification.getFieldValue("projectUuid"); - Multimap subscribedRecipients = notificationManager.findSubscribedRecipientsForDispatcher( - this, projectUuid, ALL_MUST_HAVE_ROLE_USER); + String projectKey = notification.getFieldValue("projectKey"); + Multimap subscribedRecipients = notificationManager + .findSubscribedRecipientsForDispatcher(this, projectKey, ALL_MUST_HAVE_ROLE_USER); // See available fields in the class IssueNotifications. diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcher.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcher.java index 5c86e435af06..14bf4f2cc797 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcher.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcher.java @@ -62,9 +62,9 @@ public void dispatch(Notification notification, Context context) { String newResolution = notification.getFieldValue("new.resolution"); if (Objects.equals(newResolution, Issue.RESOLUTION_FALSE_POSITIVE) || Objects.equals(newResolution, Issue.RESOLUTION_WONT_FIX)) { String author = notification.getFieldValue("changeAuthor"); - String projectUuid = notification.getFieldValue("projectUuid"); - Multimap subscribedRecipients = notifications.findSubscribedRecipientsForDispatcher( - this, projectUuid, ALL_MUST_HAVE_ROLE_USER); + String projectKey = notification.getFieldValue("projectKey"); + Multimap subscribedRecipients = notifications + .findSubscribedRecipientsForDispatcher(this, projectKey, ALL_MUST_HAVE_ROLE_USER); notify(author, context, subscribedRecipients); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/IssueChangeNotification.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/IssueChangeNotification.java index 58d6b7296c39..f55046116925 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/IssueChangeNotification.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/IssueChangeNotification.java @@ -54,12 +54,11 @@ public IssueChangeNotification setIssue(DefaultIssue issue) { } public IssueChangeNotification setProject(ComponentDto project) { - return setProject(project.getKey(), project.name(), project.getBranch(), project.uuid()); + return setProject(project.getKey(), project.name(), project.getBranch()); } - public IssueChangeNotification setProject(String projectKey, String projectName, @Nullable String branch, String projectUuid) { + public IssueChangeNotification setProject(String projectKey, String projectName, @Nullable String branch) { setFieldValue("projectName", projectName); - setFieldValue("projectUuid", projectUuid); setFieldValue("projectKey", projectKey); if (branch != null) { setFieldValue("branch", branch); diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcher.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcher.java index 3b50d87b305e..46ed30b1db84 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcher.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcher.java @@ -55,10 +55,10 @@ public String getKey() { @Override public void dispatch(Notification notification, Context context) { - String projectUuid = notification.getFieldValue("projectUuid"); + String projectKey = notification.getFieldValue("projectKey"); String assignee = notification.getFieldValue("assignee"); - Multimap subscribedRecipients = manager.findSubscribedRecipientsForDispatcher( - this, projectUuid, ALL_MUST_HAVE_ROLE_USER); + Multimap subscribedRecipients = manager + .findSubscribedRecipientsForDispatcher(this, projectKey, ALL_MUST_HAVE_ROLE_USER); Collection channels = subscribedRecipients.get(assignee); for (NotificationChannel channel : channels) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotification.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotification.java index 3f5df507eb31..bc630d529a36 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotification.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotification.java @@ -49,7 +49,6 @@ import static org.sonar.server.issue.notification.NewIssuesEmailTemplate.FIELD_PROJECT_DATE; import static org.sonar.server.issue.notification.NewIssuesEmailTemplate.FIELD_PROJECT_KEY; import static org.sonar.server.issue.notification.NewIssuesEmailTemplate.FIELD_PROJECT_NAME; -import static org.sonar.server.issue.notification.NewIssuesEmailTemplate.FIELD_PROJECT_UUID; import static org.sonar.server.issue.notification.NewIssuesStatistics.Metric.RULE_TYPE; public class NewIssuesNotification extends Notification { @@ -80,10 +79,9 @@ public NewIssuesNotification setAnalysisDate(Date d) { return this; } - public NewIssuesNotification setProject(String projectKey, String projectUuid, String projectName, @Nullable String branchName) { + public NewIssuesNotification setProject(String projectKey, String projectName, @Nullable String branchName) { setFieldValue(FIELD_PROJECT_NAME, projectName); setFieldValue(FIELD_PROJECT_KEY, projectKey); - setFieldValue(FIELD_PROJECT_UUID, projectUuid); if (branchName != null) { setFieldValue(FIELD_BRANCH, branchName); } diff --git a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcher.java b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcher.java index cd404a4af6c7..feccf3d73e3c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcher.java +++ b/server/sonar-server/src/main/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcher.java @@ -56,9 +56,9 @@ public static NotificationDispatcherMetadata newMetadata() { @Override public void dispatch(Notification notification, Context context) { - String projectUuid = notification.getFieldValue("projectUuid"); - Multimap subscribedRecipients = manager.findSubscribedRecipientsForDispatcher( - this, projectUuid, ALL_MUST_HAVE_ROLE_USER); + String projectKey = notification.getFieldValue("projectKey"); + Multimap subscribedRecipients = manager + .findSubscribedRecipientsForDispatcher(this, projectKey, ALL_MUST_HAVE_ROLE_USER); for (Map.Entry> channelsByRecipients : subscribedRecipients.asMap().entrySet()) { String userLogin = channelsByRecipients.getKey(); diff --git a/server/sonar-server/src/main/java/org/sonar/server/notification/DefaultNotificationManager.java b/server/sonar-server/src/main/java/org/sonar/server/notification/DefaultNotificationManager.java index d7fd1c0b7f5a..96406bbacfb3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/notification/DefaultNotificationManager.java +++ b/server/sonar-server/src/main/java/org/sonar/server/notification/DefaultNotificationManager.java @@ -118,13 +118,13 @@ public long count() { * {@inheritDoc} */ @Override - public Multimap findSubscribedRecipientsForDispatcher(NotificationDispatcher dispatcher, String projectUuid, - SubscriberPermissionsOnProject subscriberPermissionsOnProject) { - requireNonNull(projectUuid, "ProjectUUID is mandatory"); + public Multimap findSubscribedRecipientsForDispatcher(NotificationDispatcher dispatcher, + String projectKey, SubscriberPermissionsOnProject subscriberPermissionsOnProject) { + requireNonNull(projectKey, "projectKey is mandatory"); String dispatcherKey = dispatcher.getKey(); Set subscriberAndChannels = Arrays.stream(notificationChannels) - .flatMap(notificationChannel -> toSubscriberAndChannels(dispatcherKey, projectUuid, notificationChannel)) + .flatMap(notificationChannel -> toSubscriberAndChannels(dispatcherKey, projectKey, notificationChannel)) .collect(Collectors.toSet()); if (subscriberAndChannels.isEmpty()) { @@ -133,7 +133,7 @@ public Multimap findSubscribedRecipientsForDispatch ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); try (DbSession dbSession = dbClient.openSession(false)) { - Set authorizedLogins = keepAuthorizedLogins(dbSession, projectUuid, subscriberAndChannels, subscriberPermissionsOnProject); + Set authorizedLogins = keepAuthorizedLogins(dbSession, projectKey, subscriberAndChannels, subscriberPermissionsOnProject); subscriberAndChannels.stream() .filter(subscriberAndChannel -> authorizedLogins.contains(subscriberAndChannel.getSubscriber().getLogin())) .forEach(subscriberAndChannel -> builder.put(subscriberAndChannel.getSubscriber().getLogin(), subscriberAndChannel.getChannel())); @@ -141,27 +141,27 @@ public Multimap findSubscribedRecipientsForDispatch return builder.build(); } - private Stream toSubscriberAndChannels(String dispatcherKey, String projectUuid, NotificationChannel notificationChannel) { - Set usersForNotification = dbClient.propertiesDao().findUsersForNotification(dispatcherKey, notificationChannel.getKey(), projectUuid); + private Stream toSubscriberAndChannels(String dispatcherKey, String projectKey, NotificationChannel notificationChannel) { + Set usersForNotification = dbClient.propertiesDao().findUsersForNotification(dispatcherKey, notificationChannel.getKey(), projectKey); return usersForNotification .stream() .map(login -> new SubscriberAndChannel(login, notificationChannel)); } - private Set keepAuthorizedLogins(DbSession dbSession, String projectUuid, Set subscriberAndChannels, + private Set keepAuthorizedLogins(DbSession dbSession, String projectKey, Set subscriberAndChannels, SubscriberPermissionsOnProject requiredPermissions) { if (requiredPermissions.getGlobalSubscribers().equals(requiredPermissions.getProjectSubscribers())) { - return keepAuthorizedLogins(dbSession, projectUuid, subscriberAndChannels, null, requiredPermissions.getGlobalSubscribers()); + return keepAuthorizedLogins(dbSession, projectKey, subscriberAndChannels, null, requiredPermissions.getGlobalSubscribers()); } else { return Stream .concat( - keepAuthorizedLogins(dbSession, projectUuid, subscriberAndChannels, true, requiredPermissions.getGlobalSubscribers()).stream(), - keepAuthorizedLogins(dbSession, projectUuid, subscriberAndChannels, false, requiredPermissions.getProjectSubscribers()).stream()) + keepAuthorizedLogins(dbSession, projectKey, subscriberAndChannels, true, requiredPermissions.getGlobalSubscribers()).stream(), + keepAuthorizedLogins(dbSession, projectKey, subscriberAndChannels, false, requiredPermissions.getProjectSubscribers()).stream()) .collect(Collectors.toSet()); } } - private Set keepAuthorizedLogins(DbSession dbSession, String projectUuid, Set subscriberAndChannels, + private Set keepAuthorizedLogins(DbSession dbSession, String projectKey, Set subscriberAndChannels, @Nullable Boolean global, String permission) { Set logins = subscriberAndChannels.stream() .filter(s -> global == null || s.getSubscriber().isGlobal() == global) @@ -170,7 +170,7 @@ private Set keepAuthorizedLogins(DbSession dbSession, String projectUuid if (logins.isEmpty()) { return Collections.emptySet(); } - return dbClient.authorizationDao().keepAuthorizedLoginsOnProject(dbSession, logins, projectUuid, permission); + return dbClient.authorizationDao().keepAuthorizedLoginsOnProject(dbSession, logins, projectKey, permission); } private static final class SubscriberAndChannel { diff --git a/server/sonar-server/src/test/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcherTest.java b/server/sonar-server/src/test/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcherTest.java index 82cad44378cf..6b59aa6f5120 100644 --- a/server/sonar-server/src/test/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcherTest.java +++ b/server/sonar-server/src/test/java/org/sonar/ce/notification/ReportAnalysisFailureNotificationDispatcherTest.java @@ -78,8 +78,8 @@ public void performDispatch_has_no_effect_if_type_is_not_ReportAnalysisFailureNo @Test public void performDispatch_adds_user_for_each_recipient_and_channel_for_the_component_uuid_in_the_notification() { when(notificationMock.getType()).thenReturn(ReportAnalysisFailureNotification.TYPE); - String projectUuid = randomAlphanumeric(9); - when(notificationMock.getFieldValue("project.uuid")).thenReturn(projectUuid); + String projectKey = randomAlphanumeric(9); + when(notificationMock.getFieldValue("project.key")).thenReturn(projectKey); HashMultimap multimap = HashMultimap.create(); String login1 = randomAlphanumeric(3); String login2 = randomAlphanumeric(3); @@ -90,7 +90,7 @@ public void performDispatch_adds_user_for_each_recipient_and_channel_for_the_com multimap.put(login1, channel2); multimap.put(login2, channel2); multimap.put(login2, channel3); - when(notificationManager.findSubscribedRecipientsForDispatcher(underTest, projectUuid, new SubscriberPermissionsOnProject(UserRole.ADMIN, UserRole.USER))) + when(notificationManager.findSubscribedRecipientsForDispatcher(underTest, projectKey, new SubscriberPermissionsOnProject(UserRole.ADMIN, UserRole.USER))) .thenReturn(multimap); underTest.performDispatch(notificationMock, contextMock); @@ -105,10 +105,10 @@ public void performDispatch_adds_user_for_each_recipient_and_channel_for_the_com @Test public void performDispatch_adds_no_user_if_notification_manager_returns_none() { when(notificationMock.getType()).thenReturn(ReportAnalysisFailureNotification.TYPE); - String projectUuid = randomAlphanumeric(9); - when(notificationMock.getFieldValue("project.uuid")).thenReturn(projectUuid); + String projectKey = randomAlphanumeric(9); + when(notificationMock.getFieldValue("project.key")).thenReturn(projectKey); HashMultimap multimap = HashMultimap.create(); - when(notificationManager.findSubscribedRecipientsForDispatcher(underTest, projectUuid, new SubscriberPermissionsOnProject(UserRole.ADMIN, UserRole.USER))) + when(notificationManager.findSubscribedRecipientsForDispatcher(underTest, projectKey, new SubscriberPermissionsOnProject(UserRole.ADMIN, UserRole.USER))) .thenReturn(multimap); underTest.performDispatch(notificationMock, contextMock); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStepTest.java index f0d821eb93b7..ef8923c092af 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/QualityGateEventsStepTest.java @@ -188,7 +188,6 @@ private void verify_event_created_if_no_base_ALERT_STATUS_measure(Measure.Level Notification notification = notificationArgumentCaptor.getValue(); assertThat(notification.getType()).isEqualTo("alerts"); assertThat(notification.getFieldValue("projectKey")).isEqualTo(PROJECT_COMPONENT.getPublicKey()); - assertThat(notification.getFieldValue("projectUuid")).isEqualTo(PROJECT_COMPONENT.getUuid()); assertThat(notification.getFieldValue("projectName")).isEqualTo(PROJECT_COMPONENT.getName()); assertThat(notification.getFieldValue("projectVersion")).isEqualTo(PROJECT_COMPONENT.getReportAttributes().getVersion()); assertThat(notification.getFieldValue("branch")).isNull(); @@ -241,7 +240,6 @@ private void verify_event_created_if_base_ALERT_STATUS_measure_exists_and_status Notification notification = notificationArgumentCaptor.getValue(); assertThat(notification.getType()).isEqualTo("alerts"); assertThat(notification.getFieldValue("projectKey")).isEqualTo(PROJECT_COMPONENT.getPublicKey()); - assertThat(notification.getFieldValue("projectUuid")).isEqualTo(PROJECT_COMPONENT.getUuid()); assertThat(notification.getFieldValue("projectName")).isEqualTo(PROJECT_COMPONENT.getName()); assertThat(notification.getFieldValue("projectVersion")).isEqualTo(PROJECT_COMPONENT.getReportAttributes().getVersion()); assertThat(notification.getFieldValue("branch")).isNull(); @@ -271,7 +269,6 @@ public boolean isMain() { Notification notification = notificationArgumentCaptor.getValue(); assertThat(notification.getType()).isEqualTo("alerts"); assertThat(notification.getFieldValue("projectKey")).isEqualTo(PROJECT_COMPONENT.getPublicKey()); - assertThat(notification.getFieldValue("projectUuid")).isEqualTo(PROJECT_COMPONENT.getUuid()); assertThat(notification.getFieldValue("projectName")).isEqualTo(PROJECT_COMPONENT.getName()); assertThat(notification.getFieldValue("projectVersion")).isEqualTo(PROJECT_COMPONENT.getReportAttributes().getVersion()); assertThat(notification.getFieldValue("branch")).isEqualTo(branchName); @@ -293,7 +290,6 @@ public void verify_branch_name_is_not_set_in_notification_when_main() { Notification notification = notificationArgumentCaptor.getValue(); assertThat(notification.getType()).isEqualTo("alerts"); assertThat(notification.getFieldValue("projectKey")).isEqualTo(PROJECT_COMPONENT.getPublicKey()); - assertThat(notification.getFieldValue("projectUuid")).isEqualTo(PROJECT_COMPONENT.getUuid()); assertThat(notification.getFieldValue("projectName")).isEqualTo(PROJECT_COMPONENT.getName()); assertThat(notification.getFieldValue("projectVersion")).isEqualTo(PROJECT_COMPONENT.getReportAttributes().getVersion()); assertThat(notification.getFieldValue("branch")).isEqualTo(null); diff --git a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStepTest.java b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStepTest.java index 8646a7bb46c0..0516536628cb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStepTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStepTest.java @@ -144,7 +144,7 @@ public void send_global_new_issues_notification() throws Exception { underTest.execute(); verify(notificationService).deliver(newIssuesNotificationMock); - verify(newIssuesNotificationMock).setProject(PROJECT.getPublicKey(), PROJECT.getUuid(), PROJECT.getName(), null); + verify(newIssuesNotificationMock).setProject(PROJECT.getPublicKey(), PROJECT.getName(), null); verify(newIssuesNotificationMock).setAnalysisDate(new Date(ANALYSE_DATE)); verify(newIssuesNotificationMock).setStatistics(eq(PROJECT.getName()), any(NewIssuesStatistics.Stats.class)); verify(newIssuesNotificationMock).setDebt(ISSUE_DURATION); @@ -207,7 +207,7 @@ public void send_global_new_issues_notification_on_branch() throws Exception { underTest.execute(); verify(notificationService).deliver(newIssuesNotificationMock); - verify(newIssuesNotificationMock).setProject(branch.getKey(), branch.uuid(), branch.longName(), BRANCH_NAME); + verify(newIssuesNotificationMock).setProject(branch.getKey(), branch.longName(), BRANCH_NAME); verify(newIssuesNotificationMock).setAnalysisDate(new Date(ANALYSE_DATE)); verify(newIssuesNotificationMock).setStatistics(eq(branch.longName()), any(NewIssuesStatistics.Stats.class)); verify(newIssuesNotificationMock).setDebt(ISSUE_DURATION); @@ -239,7 +239,7 @@ public void send_new_issues_notification_to_user() throws Exception { verify(notificationService).deliver(newIssuesNotificationMock); verify(notificationService).deliver(myNewIssuesNotificationMock); verify(myNewIssuesNotificationMock).setAssignee(ISSUE_ASSIGNEE); - verify(myNewIssuesNotificationMock).setProject(PROJECT.getPublicKey(), PROJECT.getUuid(), PROJECT.getName(), null); + verify(myNewIssuesNotificationMock).setProject(PROJECT.getPublicKey(), PROJECT.getName(), null); verify(myNewIssuesNotificationMock).setAnalysisDate(new Date(ANALYSE_DATE)); verify(myNewIssuesNotificationMock).setStatistics(eq(PROJECT.getName()), any(NewIssuesStatistics.Stats.class)); verify(myNewIssuesNotificationMock).setDebt(ISSUE_DURATION); @@ -425,7 +425,7 @@ private void sendIssueChangeNotificationOnBranch(long issueCreatedAt) { private NewIssuesNotification createNewIssuesNotificationMock() { NewIssuesNotification notification = mock(NewIssuesNotification.class); - when(notification.setProject(anyString(), anyString(), anyString(), anyString())).thenReturn(notification); + when(notification.setProject(anyString(), anyString(), anyString())).thenReturn(notification); when(notification.setProjectVersion(anyString())).thenReturn(notification); when(notification.setAnalysisDate(any(Date.class))).thenReturn(notification); when(notification.setStatistics(anyString(), any(NewIssuesStatistics.Stats.class))).thenReturn(notification); @@ -436,7 +436,7 @@ private NewIssuesNotification createNewIssuesNotificationMock() { private MyNewIssuesNotification createMyNewIssuesNotificationMock() { MyNewIssuesNotification notification = mock(MyNewIssuesNotification.class); when(notification.setAssignee(anyString())).thenReturn(notification); - when(notification.setProject(anyString(), anyString(), anyString(), anyString())).thenReturn(notification); + when(notification.setProject(anyString(), anyString(), anyString())).thenReturn(notification); when(notification.setProjectVersion(anyString())).thenReturn(notification); when(notification.setAnalysisDate(any(Date.class))).thenReturn(notification); when(notification.setStatistics(anyString(), any(NewIssuesStatistics.Stats.class))).thenReturn(notification); diff --git a/server/sonar-server/src/test/java/org/sonar/server/event/NewAlertsTest.java b/server/sonar-server/src/test/java/org/sonar/server/event/NewAlertsTest.java index bb20ef863d9e..62b3327fabcb 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/event/NewAlertsTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/event/NewAlertsTest.java @@ -28,15 +28,20 @@ import org.sonar.server.notification.NotificationDispatcher; import org.sonar.server.notification.NotificationManager; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; public class NewAlertsTest { - NotificationManager notificationManager = mock(NotificationManager.class); - NotificationDispatcher.Context context = mock(NotificationDispatcher.Context.class); - NotificationChannel emailChannel = mock(NotificationChannel.class); - NotificationChannel twitterChannel = mock(NotificationChannel.class); - NewAlerts dispatcher = new NewAlerts(notificationManager); + private NotificationManager notificationManager = mock(NotificationManager.class); + private NotificationDispatcher.Context context = mock(NotificationDispatcher.Context.class); + private NotificationChannel emailChannel = mock(NotificationChannel.class); + private NotificationChannel twitterChannel = mock(NotificationChannel.class); + private NewAlerts dispatcher = new NewAlerts(notificationManager); @Test public void should_not_dispatch_if_not_alerts_notification() { @@ -51,9 +56,11 @@ public void should_dispatch_to_users_who_have_subscribed() { Multimap recipients = HashMultimap.create(); recipients.put("user1", emailChannel); recipients.put("user2", twitterChannel); - when(notificationManager.findSubscribedRecipientsForDispatcher(dispatcher, "uuid_34", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); + when(notificationManager.findSubscribedRecipientsForDispatcher(dispatcher, "key_34", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))) + .thenReturn(recipients); - Notification notification = new Notification("alerts").setFieldValue("projectUuid", "uuid_34"); + Notification notification = new Notification("alerts") + .setFieldValue("projectKey", "key_34"); dispatcher.performDispatch(notification, context); verify(context).addUser("user1", emailChannel); @@ -62,11 +69,12 @@ public void should_dispatch_to_users_who_have_subscribed() { } @Test - public void should_not_dispatch_if_missing_project_id() { + public void should_not_dispatch_if_missing_project_key() { Multimap recipients = HashMultimap.create(); recipients.put("user1", emailChannel); recipients.put("user2", twitterChannel); - when(notificationManager.findSubscribedRecipientsForDispatcher(dispatcher, "uuid_34", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); + when(notificationManager.findSubscribedRecipientsForDispatcher(dispatcher, "key_34", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))) + .thenReturn(recipients); Notification notification = new Notification("alerts"); dispatcher.performDispatch(notification, context); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java index bf2b55409d6c..8e33f079c96b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java @@ -117,7 +117,6 @@ public void verify_notification() throws Exception { assertThat(issueChangeNotification.getFieldValue("componentKey")).isEqualTo(file.getDbKey()); assertThat(issueChangeNotification.getFieldValue("componentName")).isEqualTo(file.longName()); assertThat(issueChangeNotification.getFieldValue("projectKey")).isEqualTo(project.getDbKey()); - assertThat(issueChangeNotification.getFieldValue("projectUuid")).isEqualTo(project.uuid()); assertThat(issueChangeNotification.getFieldValue("projectName")).isEqualTo(project.name()); assertThat(issueChangeNotification.getFieldValue("ruleName")).isEqualTo(rule.getName()); assertThat(issueChangeNotification.getFieldValue("changeAuthor")).isEqualTo("john"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcherTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcherTest.java index e58a9a71a609..cad2fdc1ec29 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcherTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationDispatcherTest.java @@ -84,12 +84,11 @@ public void should_dispatch_to_assignee() { recipients.put("simon", emailChannel); recipients.put("freddy", twitterChannel); recipients.put("godin", twitterChannel); - when(notifications.findSubscribedRecipientsForDispatcher(dispatcher, "uuid1", - new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); + when(notifications.findSubscribedRecipientsForDispatcher(dispatcher, "struts", + new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); Notification notification = new IssueChangeNotification() .setFieldValue("projectKey", "struts") - .setFieldValue("projectUuid", "uuid1") .setFieldValue("changeAuthor", "olivier") .setFieldValue("assignee", "freddy"); dispatcher.performDispatch(notification, context); @@ -113,7 +112,8 @@ public void should_not_dispatch_to_author_of_changes() { .setFieldValue("projectKey", "struts") .setFieldValue("projectUuid", "uuid1") .setFieldValue("changeAuthor", "simon") - .setFieldValue("assignee", "simon"), context); + .setFieldValue("assignee", "simon"), + context); // no change author dispatcher.performDispatch(new IssueChangeNotification().setFieldValue("projectKey", "struts") diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcherTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcherTest.java index c1467623791e..7248080bd184 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcherTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/DoNotFixNotificationDispatcherTest.java @@ -31,7 +31,13 @@ import org.sonar.server.notification.NotificationManager; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; public class DoNotFixNotificationDispatcherTest { NotificationManager notifications = mock(NotificationManager.class); @@ -62,10 +68,10 @@ public void should_dispatch_to_subscribers() { recipients.put("simon", emailChannel); recipients.put("freddy", twitterChannel); recipients.put("godin", twitterChannel); - when(notifications.findSubscribedRecipientsForDispatcher(underTest, "uuid1", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); + when(notifications.findSubscribedRecipientsForDispatcher(underTest, "struts", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); - Notification fpNotif = new IssueChangeNotification().setFieldValue("projectKey", "struts") - .setFieldValue("projectUuid", "uuid1") + Notification fpNotif = new IssueChangeNotification() + .setFieldValue("projectKey", "struts") .setFieldValue("changeAuthor", "godin") .setFieldValue("new.resolution", Issue.RESOLUTION_FALSE_POSITIVE) .setFieldValue("assignee", "freddy"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangeNotificationTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangeNotificationTest.java index 94ff9af63e89..18a513ca9fff 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangeNotificationTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangeNotificationTest.java @@ -84,18 +84,16 @@ public void set_issue_with_current_change_having_no_new_value() { @Test public void set_project_without_branch() { - IssueChangeNotification result = notification.setProject("MyService", "My Service", null, "uuid1"); + IssueChangeNotification result = notification.setProject("MyService", "My Service", null); assertThat(result.getFieldValue("projectKey")).isEqualTo("MyService"); - assertThat(result.getFieldValue("projectUuid")).isEqualTo("uuid1"); assertThat(result.getFieldValue("projectName")).isEqualTo("My Service"); assertThat(result.getFieldValue("branch")).isNull(); } @Test public void set_project_with_branch() { - IssueChangeNotification result = notification.setProject("MyService", "My Service", "feature1", "uuid2"); + IssueChangeNotification result = notification.setProject("MyService", "My Service", "feature1"); assertThat(result.getFieldValue("projectKey")).isEqualTo("MyService"); - assertThat(result.getFieldValue("projectUuid")).isEqualTo("uuid2"); assertThat(result.getFieldValue("projectName")).isEqualTo("My Service"); assertThat(result.getFieldValue("branch")).isEqualTo("feature1"); } diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangesEmailTemplateTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangesEmailTemplateTest.java index 90ac0f3d1a43..3e858e61915f 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangesEmailTemplateTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/IssueChangesEmailTemplateTest.java @@ -170,7 +170,7 @@ public void notification_sender_should_be_the_author_of_change() { Notification notification = new IssueChangeNotification() .setChangeAuthorLogin("simon") - .setProject("Struts", "org.apache:struts", null, ""); + .setProject("Struts", "org.apache:struts", null); EmailMessage message = underTest.format(notification); assertThat(message.getFrom()).isEqualTo("Simon"); @@ -182,7 +182,7 @@ public void notification_contains_user_login_when_user_is_removed() { Notification notification = new IssueChangeNotification() .setChangeAuthorLogin("simon") - .setProject("Struts", "org.apache:struts", null, ""); + .setProject("Struts", "org.apache:struts", null); EmailMessage message = underTest.format(notification); assertThat(message.getFrom()).isEqualTo("simon"); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesEmailTemplateTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesEmailTemplateTest.java index 13092a3ba2f1..f6ebece6a684 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesEmailTemplateTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesEmailTemplateTest.java @@ -224,7 +224,6 @@ private Notification newNotification(int count) { return new Notification(MyNewIssuesNotification.MY_NEW_ISSUES_NOTIF_TYPE) .setFieldValue("projectName", "Struts") .setFieldValue("projectKey", "org.apache:struts") - .setFieldValue("projectUuid", "ABCDE") .setFieldValue("projectDate", "2010-05-18T14:50:45+0000") .setFieldValue("assignee", "lo.gin") .setFieldValue(EFFORT + ".count", "1d3h") diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcherTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcherTest.java index cb5f38c7f7a2..6e54f8dbccec 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcherTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/MyNewIssuesNotificationDispatcherTest.java @@ -59,11 +59,10 @@ public void dispatch_to_users_who_have_subscribed_to_notification_and_project() Multimap recipients = HashMultimap.create(); recipients.put("user1", emailChannel); recipients.put("user2", twitterChannel); - when(notificationManager.findSubscribedRecipientsForDispatcher(underTest, "uuid1", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); + when(notificationManager.findSubscribedRecipientsForDispatcher(underTest, "struts", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); Notification notification = new Notification(MyNewIssuesNotification.MY_NEW_ISSUES_NOTIF_TYPE) .setFieldValue("projectKey", "struts") - .setFieldValue("projectUuid", "uuid1") .setFieldValue("assignee", "user1"); underTest.performDispatch(notification, context); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesEmailTemplateTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesEmailTemplateTest.java index 02872c4f408b..e429096b2736 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesEmailTemplateTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesEmailTemplateTest.java @@ -228,7 +228,6 @@ private Notification newNotification(int count) { return new Notification(NewIssuesNotification.TYPE) .setFieldValue("projectName", "Struts") .setFieldValue("projectKey", "org.apache:struts") - .setFieldValue("projectUuid", "ABCDE") .setFieldValue("projectDate", "2010-05-18T14:50:45+0000") .setFieldValue(EFFORT + ".count", "1d3h") .setFieldValue(RULE_TYPE + ".count", String.valueOf(count)) diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcherTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcherTest.java index c59fc50191be..153b16774ab7 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcherTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationDispatcherTest.java @@ -57,11 +57,10 @@ public void shouldDispatchToUsersWhoHaveSubscribedAndFlaggedProjectAsFavourite() Multimap recipients = HashMultimap.create(); recipients.put("user1", emailChannel); recipients.put("user2", twitterChannel); - when(notifications.findSubscribedRecipientsForDispatcher(dispatcher, "uuid1", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); + when(notifications.findSubscribedRecipientsForDispatcher(dispatcher, "struts", new NotificationManager.SubscriberPermissionsOnProject(UserRole.USER))).thenReturn(recipients); Notification notification = new Notification(NewIssuesNotification.TYPE) - .setFieldValue("projectKey", "struts") - .setFieldValue("projectUuid", "uuid1"); + .setFieldValue("projectKey", "struts"); dispatcher.performDispatch(notification, context); verify(context).addUser("user1", emailChannel); diff --git a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationTest.java b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationTest.java index edcefd30ed24..647a6e73532d 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/issue/notification/NewIssuesNotificationTest.java @@ -83,20 +83,18 @@ public void setUp() throws Exception { @Test public void set_project_without_branch() { - underTest.setProject("project-key", "project-uuid", "project-long-name", null); + underTest.setProject("project-key", "project-long-name", null); assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_PROJECT_NAME)).isEqualTo("project-long-name"); - assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_PROJECT_UUID)).isEqualTo("project-uuid"); assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_PROJECT_KEY)).isEqualTo("project-key"); assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_BRANCH)).isNull(); } @Test public void set_project_with_branch() { - underTest.setProject("project-key", "project-uuid", "project-long-name", "feature"); + underTest.setProject("project-key", "project-long-name", "feature"); assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_PROJECT_NAME)).isEqualTo("project-long-name"); - assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_PROJECT_UUID)).isEqualTo("project-uuid"); assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_PROJECT_KEY)).isEqualTo("project-key"); assertThat(underTest.getFieldValue(NewIssuesEmailTemplate.FIELD_BRANCH)).isEqualTo("feature"); }