mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-13 17:05:43 +01:00
merge with 2.0.0-m3
This commit is contained in:
@@ -49,7 +49,7 @@ public class ConfigDtoToScmConfigurationMapperTest {
|
||||
assertEquals("https://plug.ins" , config.getPluginUrl());
|
||||
assertEquals(40 , config.getLoginAttemptLimitTimeout());
|
||||
assertTrue(config.isEnabledXsrfProtection());
|
||||
assertEquals("username", config.getDefaultNamespaceStrategy());
|
||||
assertEquals("username", config.getNamespaceStrategy());
|
||||
}
|
||||
|
||||
private ConfigDto createDefaultDto() {
|
||||
@@ -72,7 +72,7 @@ public class ConfigDtoToScmConfigurationMapperTest {
|
||||
configDto.setPluginUrl("https://plug.ins");
|
||||
configDto.setLoginAttemptLimitTimeout(40);
|
||||
configDto.setEnabledXsrfProtection(true);
|
||||
configDto.setDefaultNamespaceStrategy("username");
|
||||
configDto.setNamespaceStrategy("username");
|
||||
|
||||
return configDto;
|
||||
}
|
||||
|
||||
@@ -13,7 +13,9 @@ import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import sonia.scm.config.ScmConfiguration;
|
||||
import sonia.scm.repository.NamespaceStrategyValidator;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
@@ -22,10 +24,12 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.MockitoAnnotations.initMocks;
|
||||
|
||||
@SubjectAware(
|
||||
@@ -46,6 +50,9 @@ public class ConfigResourceTest {
|
||||
@SuppressWarnings("unused") // Is injected
|
||||
private ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri);
|
||||
|
||||
@Mock
|
||||
private NamespaceStrategyValidator namespaceStrategyValidator;
|
||||
|
||||
@InjectMocks
|
||||
private ConfigDtoToScmConfigurationMapperImpl dtoToConfigMapper;
|
||||
@InjectMocks
|
||||
@@ -62,7 +69,7 @@ public class ConfigResourceTest {
|
||||
public void prepareEnvironment() {
|
||||
initMocks(this);
|
||||
|
||||
ConfigResource configResource = new ConfigResource(dtoToConfigMapper, configToDtoMapper, createConfiguration());
|
||||
ConfigResource configResource = new ConfigResource(dtoToConfigMapper, configToDtoMapper, createConfiguration(), namespaceStrategyValidator);
|
||||
|
||||
dispatcher.getRegistry().addSingletonResource(configResource);
|
||||
}
|
||||
@@ -119,6 +126,21 @@ public class ConfigResourceTest {
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
@SubjectAware(username = "readWrite")
|
||||
public void shouldValidateNamespaceStrategy() throws URISyntaxException {
|
||||
MockHttpRequest request = MockHttpRequest.put("/" + ConfigResource.CONFIG_PATH_V2)
|
||||
.contentType(VndMediaType.CONFIG)
|
||||
.content("{ \"namespaceStrategy\": \"AwesomeStrategy\" }".getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
MockHttpResponse response = new MockHttpResponse();
|
||||
dispatcher.invoke(request, response);
|
||||
|
||||
assertEquals(HttpServletResponse.SC_NO_CONTENT, response.getStatus());
|
||||
verify(namespaceStrategyValidator).check("AwesomeStrategy");
|
||||
}
|
||||
|
||||
private MockHttpRequest post(String resourceName) throws IOException, URISyntaxException {
|
||||
URL url = Resources.getResource(resourceName);
|
||||
byte[] configJson = Resources.toByteArray(url);
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.inject.util.Providers;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.repository.NamespaceStrategy;
|
||||
import sonia.scm.repository.Repository;
|
||||
|
||||
import javax.inject.Provider;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import java.net.URI;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class NamespaceStrategyResourceTest {
|
||||
|
||||
@Mock
|
||||
private UriInfo uriInfo;
|
||||
|
||||
@Test
|
||||
void shouldReturnNamespaceStrategies() {
|
||||
when(uriInfo.getAbsolutePath()).thenReturn(URI.create("/namespace-strategies"));
|
||||
|
||||
Set<NamespaceStrategy> namespaceStrategies = allStrategies();
|
||||
Provider<NamespaceStrategy> current = Providers.of(new MegaNamespaceStrategy());
|
||||
|
||||
NamespaceStrategyResource resource = new NamespaceStrategyResource(namespaceStrategies, current);
|
||||
|
||||
NamespaceStrategiesDto dto = resource.get(uriInfo);
|
||||
assertThat(dto.getCurrent()).isEqualTo(MegaNamespaceStrategy.class.getSimpleName());
|
||||
assertThat(dto.getAvailable()).contains(
|
||||
AwesomeNamespaceStrategy.class.getSimpleName(),
|
||||
SuperNamespaceStrategy.class.getSimpleName(),
|
||||
MegaNamespaceStrategy.class.getSimpleName()
|
||||
);
|
||||
assertThat(dto.getLinks().getLinkBy("self").get().getHref()).isEqualTo("/namespace-strategies");
|
||||
}
|
||||
|
||||
private Set<NamespaceStrategy> allStrategies() {
|
||||
return strategies(new AwesomeNamespaceStrategy(), new SuperNamespaceStrategy(), new MegaNamespaceStrategy());
|
||||
}
|
||||
|
||||
private Set<NamespaceStrategy> strategies(NamespaceStrategy... strategies) {
|
||||
return new LinkedHashSet<>(Lists.newArrayList(strategies));
|
||||
}
|
||||
|
||||
private static class AwesomeNamespaceStrategy implements NamespaceStrategy {
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return "awesome";
|
||||
}
|
||||
}
|
||||
|
||||
private static class SuperNamespaceStrategy implements NamespaceStrategy {
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return "super";
|
||||
}
|
||||
}
|
||||
|
||||
private static class MegaNamespaceStrategy implements NamespaceStrategy {
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return "mega";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,6 +43,8 @@ public class ResourceLinksMock {
|
||||
when(resourceLinks.merge()).thenReturn(new ResourceLinks.MergeLinks(uriInfo));
|
||||
when(resourceLinks.permissions()).thenReturn(new ResourceLinks.PermissionsLinks(uriInfo));
|
||||
when(resourceLinks.availableRepositoryPermissions()).thenReturn(new ResourceLinks.AvailableRepositoryPermissionLinks(uriInfo));
|
||||
when(resourceLinks.repositoryTypeCollection()).thenReturn(new ResourceLinks.RepositoryTypeCollectionLinks(uriInfo));
|
||||
when(resourceLinks.namespaceStrategies()).thenReturn(new ResourceLinks.NamespaceStrategiesLinks(uriInfo));
|
||||
|
||||
return resourceLinks;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ public class ScmConfigurationToConfigDtoMapperTest {
|
||||
assertEquals("pluginurl" , dto.getPluginUrl());
|
||||
assertEquals(2 , dto.getLoginAttemptLimitTimeout());
|
||||
assertTrue(dto.isEnabledXsrfProtection());
|
||||
assertEquals("username", dto.getDefaultNamespaceStrategy());
|
||||
assertEquals("username", dto.getNamespaceStrategy());
|
||||
|
||||
assertEquals(expectedBaseUri.toString(), dto.getLinks().getLinkBy("self").get().getHref());
|
||||
assertEquals(expectedBaseUri.toString(), dto.getLinks().getLinkBy("update").get().getHref());
|
||||
@@ -117,7 +117,7 @@ public class ScmConfigurationToConfigDtoMapperTest {
|
||||
config.setPluginUrl("pluginurl");
|
||||
config.setLoginAttemptLimitTimeout(2);
|
||||
config.setEnabledXsrfProtection(true);
|
||||
config.setDefaultNamespaceStrategy("username");
|
||||
config.setNamespaceStrategy("username");
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import java.time.Clock;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.time.ZoneOffset;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class CurrentYearNamespaceStrategyTest {
|
||||
|
||||
@Mock
|
||||
private Clock clock;
|
||||
private NamespaceStrategy namespaceStrategy;
|
||||
|
||||
@BeforeEach
|
||||
void setupObjectUnderTest() {
|
||||
namespaceStrategy = new CurrentYearNamespaceStrategy(clock);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturn1985() {
|
||||
LocalDateTime dateTime = LocalDateTime.of(1985, 4, 9, 21, 42);
|
||||
when(clock.instant()).thenReturn(dateTime.toInstant(ZoneOffset.UTC));
|
||||
when(clock.getZone()).thenReturn(ZoneId.systemDefault());
|
||||
|
||||
String namespace = namespaceStrategy.createNamespace(RepositoryTestData.createHeartOfGold());
|
||||
assertThat(namespace).isEqualTo("1985");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import sonia.scm.ScmConstraintViolationException;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
class CustomNamespaceStrategyTest {
|
||||
|
||||
private final NamespaceStrategy namespaceStrategy = new CustomNamespaceStrategy();
|
||||
|
||||
@Test
|
||||
void shouldReturnNamespaceFromRepository() {
|
||||
Repository heartOfGold = RepositoryTestData.createHeartOfGold();
|
||||
assertThat(namespaceStrategy.createNamespace(heartOfGold)).isEqualTo(RepositoryTestData.NAMESPACE);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldThrowAnValidationExceptionForAnInvalidNamespace() {
|
||||
Repository repository = new Repository();
|
||||
repository.setNamespace("..");
|
||||
repository.setName(".");
|
||||
|
||||
assertThrows(ScmConstraintViolationException.class, () -> namespaceStrategy.createNamespace(repository));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
import com.github.sdorra.shiro.ShiroRule;
|
||||
import com.github.sdorra.shiro.SubjectAware;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
@SubjectAware(configuration = "classpath:sonia/scm/shiro-001.ini")
|
||||
public class DefaultNamespaceStrategyTest {
|
||||
|
||||
@Rule
|
||||
public ShiroRule shiroRule = new ShiroRule();
|
||||
|
||||
private DefaultNamespaceStrategy namespaceStrategy = new DefaultNamespaceStrategy();
|
||||
|
||||
@Test
|
||||
@SubjectAware(username = "trillian", password = "secret")
|
||||
public void testNamespaceStrategyWithoutPreset() {
|
||||
assertEquals("trillian", namespaceStrategy.createNamespace(new Repository()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@SubjectAware(username = "trillian", password = "secret")
|
||||
public void testNamespaceStrategyWithPreset() {
|
||||
Repository repository = new Repository();
|
||||
repository.setNamespace("awesome");
|
||||
assertEquals("awesome", namespaceStrategy.createNamespace(repository));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -34,6 +34,7 @@ import com.google.common.base.Stopwatch;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.util.Providers;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
import org.apache.shiro.authc.AuthenticationInfo;
|
||||
@@ -117,8 +118,8 @@ public class DefaultRepositoryManagerPerfTest {
|
||||
contextProvider,
|
||||
keyGenerator,
|
||||
repositoryDAO,
|
||||
handlerSet,
|
||||
namespaceStrategy
|
||||
handlerSet,
|
||||
Providers.of(namespaceStrategy)
|
||||
);
|
||||
|
||||
setUpTestRepositories();
|
||||
|
||||
@@ -37,6 +37,7 @@ import com.github.sdorra.shiro.ShiroRule;
|
||||
import com.github.sdorra.shiro.SubjectAware;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.util.Providers;
|
||||
import org.apache.shiro.authz.UnauthorizedException;
|
||||
import org.apache.shiro.util.ThreadContext;
|
||||
import org.junit.Before;
|
||||
@@ -436,7 +437,7 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase<Repository> {
|
||||
when(namespaceStrategy.createNamespace(Mockito.any(Repository.class))).thenAnswer(invocation -> mockedNamespace);
|
||||
|
||||
return new DefaultRepositoryManager(configuration, contextProvider,
|
||||
keyGenerator, repositoryDAO, handlerSet, namespaceStrategy);
|
||||
keyGenerator, repositoryDAO, handlerSet, Providers.of(namespaceStrategy));
|
||||
}
|
||||
|
||||
private void createRepository(RepositoryManager m, Repository repository) {
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import sonia.scm.config.ScmConfiguration;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class NamespaceStrategyProviderTest {
|
||||
|
||||
@Test
|
||||
void shouldReturnConfiguredStrategy() {
|
||||
Set<NamespaceStrategy> strategies = allStrategiesAsSet();
|
||||
|
||||
ScmConfiguration configuration = new ScmConfiguration();
|
||||
configuration.setNamespaceStrategy("Arthur");
|
||||
|
||||
NamespaceStrategyProvider provider = new NamespaceStrategyProvider(strategies, configuration);
|
||||
NamespaceStrategy strategy = provider.get();
|
||||
|
||||
assertThat(strategy).isInstanceOf(Arthur.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnUsernameStrategyForUnknown() {
|
||||
Set<NamespaceStrategy> strategies = Collections.emptySet();
|
||||
|
||||
ScmConfiguration configuration = new ScmConfiguration();
|
||||
configuration.setNamespaceStrategy("Arthur");
|
||||
|
||||
NamespaceStrategyProvider provider = new NamespaceStrategyProvider(strategies, configuration);
|
||||
NamespaceStrategy strategy = provider.get();
|
||||
|
||||
assertThat(strategy).isInstanceOf(UsernameNamespaceStrategy.class);
|
||||
}
|
||||
|
||||
private LinkedHashSet<NamespaceStrategy> allStrategiesAsSet() {
|
||||
return new LinkedHashSet<>(Arrays.asList(new Trillian(), new Zaphod(), new Arthur()));
|
||||
}
|
||||
|
||||
private static class Trillian implements NamespaceStrategy{
|
||||
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return "trillian";
|
||||
}
|
||||
}
|
||||
|
||||
private static class Zaphod implements NamespaceStrategy {
|
||||
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return "zaphod";
|
||||
}
|
||||
}
|
||||
|
||||
private static class Arthur implements NamespaceStrategy {
|
||||
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return "arthur";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import sonia.scm.ScmConstraintViolationException;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class NamespaceStrategyValidatorTest {
|
||||
|
||||
@Test
|
||||
void shouldThrowConstraintValidationException() {
|
||||
NamespaceStrategyValidator validator = new NamespaceStrategyValidator(Collections.emptySet());
|
||||
assertThrows(ScmConstraintViolationException.class, () -> validator.check("AwesomeStrategy"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldDoNotThrowAnException() {
|
||||
NamespaceStrategyValidator validator = new NamespaceStrategyValidator(Sets.newHashSet(new AwesomeStrategy()));
|
||||
validator.check("AwesomeStrategy");
|
||||
}
|
||||
|
||||
public static class AwesomeStrategy implements NamespaceStrategy {
|
||||
|
||||
@Override
|
||||
public String createNamespace(Repository repository) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class RepositoryTypeNamespaceStrategyTest {
|
||||
|
||||
private final RepositoryTypeNamespaceStrategy namespaceStrategy = new RepositoryTypeNamespaceStrategy();
|
||||
|
||||
@Test
|
||||
void shouldReturnTypeOfRepository() {
|
||||
Repository git = RepositoryTestData.create42Puzzle("git");
|
||||
assertThat(namespaceStrategy.createNamespace(git)).isEqualTo("git");
|
||||
|
||||
Repository hg = RepositoryTestData.create42Puzzle("hg");
|
||||
assertThat(namespaceStrategy.createNamespace(hg)).isEqualTo("hg");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package sonia.scm.repository;
|
||||
|
||||
|
||||
import org.apache.shiro.subject.Subject;
|
||||
import org.apache.shiro.util.ThreadContext;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class UsernameNamespaceStrategyTest {
|
||||
|
||||
@Mock
|
||||
private Subject subject;
|
||||
|
||||
private final NamespaceStrategy usernameNamespaceStrategy = new UsernameNamespaceStrategy();
|
||||
|
||||
@BeforeEach
|
||||
void setupSubject() {
|
||||
ThreadContext.bind(subject);
|
||||
}
|
||||
|
||||
@AfterEach
|
||||
void clearThreadContext() {
|
||||
ThreadContext.unbindSubject();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnPrimaryPrincipal() {
|
||||
when(subject.getPrincipal()).thenReturn("trillian");
|
||||
|
||||
String namespace = usernameNamespaceStrategy.createNamespace(RepositoryTestData.createHeartOfGold());
|
||||
assertThat(namespace).isEqualTo("trillian");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -47,22 +47,16 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import sonia.scm.group.GroupNames;
|
||||
import sonia.scm.group.ExternalGroupNames;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.hamcrest.Matchers.*;
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.anyString;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static sonia.scm.security.SecureKeyTestUtil.createSecureKey;
|
||||
|
||||
/**
|
||||
@@ -182,7 +176,11 @@ public class JwtAccessTokenBuilderTest {
|
||||
|
||||
private Object enrichWithGroups(InvocationOnMock invocation, String[] groups, boolean external) throws Throwable {
|
||||
PrincipalCollection principals = (PrincipalCollection) spy(invocation.callRealMethod());
|
||||
when(principals.oneByType(GroupNames.class)).thenReturn(new GroupNames(Arrays.asList(groups), external));
|
||||
|
||||
List<String> groupCollection = Arrays.asList(groups);
|
||||
if (external) {
|
||||
when(principals.oneByType(ExternalGroupNames.class)).thenReturn(new ExternalGroupNames(groupCollection));
|
||||
}
|
||||
return principals;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user