Create unit tests, supplement missing groupManager precondition, add createAuthenticatedGroup factory

This commit is contained in:
Florian Scholdei
2020-11-03 10:45:47 +01:00
parent c87fa5b3e5
commit f1115099c9
2 changed files with 40 additions and 1 deletions

View File

@@ -37,6 +37,8 @@ import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
import sonia.scm.SCMContext;
import sonia.scm.config.ScmConfiguration;
import sonia.scm.group.Group;
import sonia.scm.group.GroupManager;
import sonia.scm.security.AnonymousMode;
import sonia.scm.security.PermissionAssigner;
import sonia.scm.security.PermissionDescriptor;
@@ -56,6 +58,8 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static sonia.scm.group.GroupCollector.AUTHENTICATED;
import static sonia.scm.lifecycle.SetupContextListener.SetupAction.AUTHENTICATED_GROUP_DESCRIPTION;
@ExtendWith(MockitoExtension.class)
class SetupContextListenerTest {
@@ -75,6 +79,9 @@ class SetupContextListenerTest {
@Mock
ScmConfiguration scmConfiguration;
@Mock
private GroupManager groupManager;
@Mock
private PermissionAssigner permissionAssigner;
@@ -96,6 +103,7 @@ class SetupContextListenerTest {
@Test
void shouldCreateAdminAccountIfNoUserExistsAndAssignPermissions() {
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
when(passwordService.encryptPassword("scmadmin")).thenReturn("secret");
setupContextListener.contextInitialized(null);
@@ -108,6 +116,7 @@ class SetupContextListenerTest {
void shouldCreateAdminAccountIfOnlyAnonymousUserExistsAndAssignPermissions() {
when(userManager.getAll()).thenReturn(Lists.newArrayList(SCMContext.ANONYMOUS));
when(userManager.contains(SCMContext.USER_ANONYMOUS)).thenReturn(true);
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
when(passwordService.encryptPassword("scmadmin")).thenReturn("secret");
setupContextListener.contextInitialized(null);
@@ -135,6 +144,7 @@ class SetupContextListenerTest {
void shouldDoNothingOnSecondStart() {
List<User> users = Lists.newArrayList(UserTestData.createTrillian());
when(userManager.getAll()).thenReturn(users);
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
setupContextListener.contextInitialized(null);
@@ -146,6 +156,7 @@ class SetupContextListenerTest {
void shouldCreateAnonymousUserIfRequired() {
List<User> users = Lists.newArrayList(UserTestData.createTrillian());
when(userManager.getAll()).thenReturn(users);
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
when(scmConfiguration.getAnonymousMode()).thenReturn(AnonymousMode.FULL);
setupContextListener.contextInitialized(null);
@@ -157,6 +168,7 @@ class SetupContextListenerTest {
void shouldNotCreateAnonymousUserIfNotRequired() {
List<User> users = Lists.newArrayList(UserTestData.createTrillian());
when(userManager.getAll()).thenReturn(users);
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
setupContextListener.contextInitialized(null);
@@ -167,6 +179,7 @@ class SetupContextListenerTest {
void shouldNotCreateAnonymousUserIfAlreadyExists() {
List<User> users = Lists.newArrayList(SCMContext.ANONYMOUS);
when(userManager.getAll()).thenReturn(users);
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
when(scmConfiguration.getAnonymousMode()).thenReturn(AnonymousMode.FULL);
setupContextListener.contextInitialized(null);
@@ -174,6 +187,28 @@ class SetupContextListenerTest {
verify(userManager, times(1)).create(SCMContext.ANONYMOUS);
}
@Test
void shouldCreateAuthenticatedGroupIfMissing() {
when(groupManager.get(AUTHENTICATED)).thenReturn(null);
setupContextListener.contextInitialized(null);
Group authenticated = createAuthenticatedGroup();
authenticated.setDescription(AUTHENTICATED_GROUP_DESCRIPTION);
authenticated.setExternal(true);
verify(groupManager, times(1)).create(createAuthenticatedGroup());
}
@Test
void shouldNotCreateAuthenticatedGroupIfAlreadyExists() {
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
setupContextListener.contextInitialized(null);
verify(groupManager, never()).create(any());
}
private void verifyAdminPermissionsAssigned() {
ArgumentCaptor<String> usernameCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Collection<PermissionDescriptor>> permissionCaptor = ArgumentCaptor.forClass(Collection.class);
@@ -192,4 +227,7 @@ class SetupContextListenerTest {
assertThat(user.getPassword()).isEqualTo("secret");
}
private Group createAuthenticatedGroup() {
return new Group("xml", AUTHENTICATED);
}
}