Search in sources :

Example 1 with Subscriber

use of org.sonar.db.property.Subscriber in project sonarqube by SonarSource.

the class DefaultNotificationManagerTest method do_not_call_db_for_project_permission_filtering_if_there_is_no_global_subscriber.

@Test
public void do_not_call_db_for_project_permission_filtering_if_there_is_no_global_subscriber() {
    String globalPermission = randomAlphanumeric(4);
    String projectPermission = randomAlphanumeric(5);
    String projectKey = randomAlphabetic(6);
    when(propertiesDao.findUsersForNotification("NewViolations", "Email", projectKey)).thenReturn(newHashSet(new Subscriber("user3", false)));
    when(propertiesDao.findUsersForNotification("NewViolations", "Twitter", projectKey)).thenReturn(newHashSet(new Subscriber("user3", false)));
    when(authorizationDao.keepAuthorizedLoginsOnProject(dbSession, newHashSet("user3"), projectKey, projectPermission)).thenReturn(newHashSet("user3"));
    Multimap<String, NotificationChannel> multiMap = underTest.findSubscribedRecipientsForDispatcher(dispatcher, projectKey, new SubscriberPermissionsOnProject(globalPermission, projectPermission));
    assertThat(multiMap.entries()).hasSize(2);
    Map<String, Collection<NotificationChannel>> map = multiMap.asMap();
    assertThat(map.get("user3")).containsOnly(emailChannel, twitterChannel);
    verify(authorizationDao, times(0)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), eq(globalPermission));
    verify(authorizationDao, times(1)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), eq(projectPermission));
}
Also used : NotificationChannel(org.sonar.api.notifications.NotificationChannel) Subscriber(org.sonar.db.property.Subscriber) SubscriberPermissionsOnProject(org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject) Collection(java.util.Collection) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Test(org.junit.Test)

Example 2 with Subscriber

use of org.sonar.db.property.Subscriber in project sonarqube by SonarSource.

the class DefaultNotificationManagerTest method shouldFindSubscribedRecipientForGivenResource.

@Test
public void shouldFindSubscribedRecipientForGivenResource() {
    String projectKey = randomAlphabetic(6);
    String otherProjectKey = randomAlphabetic(7);
    when(propertiesDao.findUsersForNotification("NewViolations", "Email", projectKey)).thenReturn(newHashSet(new Subscriber("user1", false), new Subscriber("user3", false), new Subscriber("user3", true)));
    when(propertiesDao.findUsersForNotification("NewViolations", "Twitter", otherProjectKey)).thenReturn(newHashSet(new Subscriber("user2", false)));
    when(propertiesDao.findUsersForNotification("NewViolations", "Twitter", projectKey)).thenReturn(newHashSet(new Subscriber("user3", true)));
    when(propertiesDao.findUsersForNotification("NewAlerts", "Twitter", projectKey)).thenReturn(newHashSet(new Subscriber("user4", false)));
    when(authorizationDao.keepAuthorizedLoginsOnProject(dbSession, newHashSet("user1", "user3"), projectKey, "user")).thenReturn(newHashSet("user1", "user3"));
    Multimap<String, NotificationChannel> multiMap = underTest.findSubscribedRecipientsForDispatcher(dispatcher, projectKey, ALL_MUST_HAVE_ROLE_USER);
    assertThat(multiMap.entries()).hasSize(3);
    Map<String, Collection<NotificationChannel>> map = multiMap.asMap();
    assertThat(map.get("user1")).containsOnly(emailChannel);
    assertThat(map.get("user2")).isNull();
    assertThat(map.get("user3")).containsOnly(emailChannel, twitterChannel);
    assertThat(map.get("user4")).isNull();
    // code is optimized to perform only 1 SQL requests for all channels
    verify(authorizationDao, times(1)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), anyString());
}
Also used : NotificationChannel(org.sonar.api.notifications.NotificationChannel) Subscriber(org.sonar.db.property.Subscriber) Collection(java.util.Collection) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Test(org.junit.Test)

Example 3 with Subscriber

use of org.sonar.db.property.Subscriber in project sonarqube by SonarSource.

the class DefaultNotificationManagerTest method should_apply_distinct_permission_filtering_global_or_project_subscribers.

@Test
public void should_apply_distinct_permission_filtering_global_or_project_subscribers() {
    String globalPermission = randomAlphanumeric(4);
    String projectPermission = randomAlphanumeric(5);
    String projectKey = randomAlphabetic(6);
    String otherProjectKey = randomAlphabetic(7);
    when(propertiesDao.findUsersForNotification("NewViolations", "Email", projectKey)).thenReturn(newHashSet(new Subscriber("user1", false), new Subscriber("user3", false), new Subscriber("user3", true)));
    when(propertiesDao.findUsersForNotification("NewViolations", "Twitter", otherProjectKey)).thenReturn(newHashSet(new Subscriber("user2", false)));
    when(propertiesDao.findUsersForNotification("NewViolations", "Twitter", projectKey)).thenReturn(newHashSet(new Subscriber("user3", true)));
    when(propertiesDao.findUsersForNotification("NewAlerts", "Twitter", projectKey)).thenReturn(newHashSet(new Subscriber("user4", false)));
    when(authorizationDao.keepAuthorizedLoginsOnProject(dbSession, newHashSet("user3", "user4"), projectKey, globalPermission)).thenReturn(newHashSet("user3"));
    when(authorizationDao.keepAuthorizedLoginsOnProject(dbSession, newHashSet("user1", "user3"), projectKey, projectPermission)).thenReturn(newHashSet("user1", "user3"));
    Multimap<String, NotificationChannel> multiMap = underTest.findSubscribedRecipientsForDispatcher(dispatcher, projectKey, new SubscriberPermissionsOnProject(globalPermission, projectPermission));
    assertThat(multiMap.entries()).hasSize(3);
    Map<String, Collection<NotificationChannel>> map = multiMap.asMap();
    assertThat(map.get("user1")).containsOnly(emailChannel);
    assertThat(map.get("user2")).isNull();
    assertThat(map.get("user3")).containsOnly(emailChannel, twitterChannel);
    assertThat(map.get("user4")).isNull();
    // code is optimized to perform only 2 SQL requests for all channels
    verify(authorizationDao, times(1)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), eq(globalPermission));
    verify(authorizationDao, times(1)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), eq(projectPermission));
}
Also used : NotificationChannel(org.sonar.api.notifications.NotificationChannel) Subscriber(org.sonar.db.property.Subscriber) SubscriberPermissionsOnProject(org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject) Collection(java.util.Collection) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Test(org.junit.Test)

Example 4 with Subscriber

use of org.sonar.db.property.Subscriber in project sonarqube by SonarSource.

the class DefaultNotificationManagerTest method do_not_call_db_for_project_permission_filtering_if_there_is_no_project_subscriber.

@Test
public void do_not_call_db_for_project_permission_filtering_if_there_is_no_project_subscriber() {
    String globalPermission = randomAlphanumeric(4);
    String projectPermission = randomAlphanumeric(5);
    String projectKey = randomAlphabetic(6);
    when(propertiesDao.findUsersForNotification("NewViolations", "Email", projectKey)).thenReturn(newHashSet(new Subscriber("user3", true)));
    when(propertiesDao.findUsersForNotification("NewViolations", "Twitter", projectKey)).thenReturn(newHashSet(new Subscriber("user3", true)));
    when(authorizationDao.keepAuthorizedLoginsOnProject(dbSession, newHashSet("user3"), projectKey, globalPermission)).thenReturn(newHashSet("user3"));
    Multimap<String, NotificationChannel> multiMap = underTest.findSubscribedRecipientsForDispatcher(dispatcher, projectKey, new SubscriberPermissionsOnProject(globalPermission, projectPermission));
    assertThat(multiMap.entries()).hasSize(2);
    Map<String, Collection<NotificationChannel>> map = multiMap.asMap();
    assertThat(map.get("user3")).containsOnly(emailChannel, twitterChannel);
    verify(authorizationDao, times(1)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), eq(globalPermission));
    verify(authorizationDao, times(0)).keepAuthorizedLoginsOnProject(eq(dbSession), anySet(), anyString(), eq(projectPermission));
}
Also used : NotificationChannel(org.sonar.api.notifications.NotificationChannel) Subscriber(org.sonar.db.property.Subscriber) SubscriberPermissionsOnProject(org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject) Collection(java.util.Collection) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Test(org.junit.Test)

Aggregations

Collection (java.util.Collection)4 Test (org.junit.Test)4 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)4 NotificationChannel (org.sonar.api.notifications.NotificationChannel)4 Subscriber (org.sonar.db.property.Subscriber)4 SubscriberPermissionsOnProject (org.sonar.server.notification.NotificationManager.SubscriberPermissionsOnProject)3