adds namespace strategies for current year, repository type, username and custom

This commit is contained in:
Sebastian Sdorra
2019-03-11 10:53:49 +01:00
parent 3c22ad2393
commit e179b00ecd
11 changed files with 203 additions and 57 deletions

View File

@@ -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");
}
}

View File

@@ -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));
}
}

View File

@@ -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));
}
}

View File

@@ -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");
}
}

View File

@@ -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");
}
}