mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-14 17:26:22 +01:00
implement new link enricher api for various resource objects.
Repository, Tag, Branch, Changeset, FileObject, Group, User, Me and Index
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.repository.Branch;
|
||||
import sonia.scm.repository.NamespaceAndName;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class BranchToBranchDtoMapperTest {
|
||||
|
||||
private final URI baseUri = URI.create("https://hitchhiker.com");
|
||||
|
||||
@SuppressWarnings("unused") // Is injected
|
||||
private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(baseUri);
|
||||
|
||||
@InjectMocks
|
||||
private BranchToBranchDtoMapperImpl mapper;
|
||||
|
||||
@Test
|
||||
void shouldAppendLinks() {
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(Branch.class, (ctx, appender) -> {
|
||||
NamespaceAndName namespaceAndName = ctx.oneRequireByType(NamespaceAndName.class);
|
||||
Branch branch = ctx.oneRequireByType(Branch.class);
|
||||
|
||||
appender.appendOne("ka", "http://" + namespaceAndName.logString() + "/" + branch.getName());
|
||||
});
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
Branch branch = new Branch("master", "42");
|
||||
|
||||
BranchDto dto = mapper.map(branch, new NamespaceAndName("hitchhiker", "heart-of-gold"));
|
||||
assertThat(dto.getLinks().getLinkBy("ka").get().getHref()).isEqualTo("http://hitchhiker/heart-of-gold/master");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -71,6 +71,24 @@ public class FileObjectToFileObjectDtoMapperTest {
|
||||
assertThat(dto.getLinks().getLinkBy("self").get().getHref()).isEqualTo(expectedBaseUri.resolve("namespace/name/content/revision/foo/bar").toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAppendLinks() {
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(FileObject.class, (ctx, appender) -> {
|
||||
NamespaceAndName repository = ctx.oneRequireByType(NamespaceAndName.class);
|
||||
FileObject fo = ctx.oneRequireByType(FileObject.class);
|
||||
String rev = ctx.oneRequireByType(String.class);
|
||||
|
||||
appender.appendOne("hog", "http://" + repository.logString() + "/" + fo.getName() + "/" + rev);
|
||||
});
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
FileObject fileObject = createFileObject();
|
||||
FileObjectDto dto = mapper.map(fileObject, new NamespaceAndName("hitchhiker", "hog"), "42");
|
||||
|
||||
assertThat(dto.getLinks().getLinkBy("hog").get().getHref()).isEqualTo("http://hitchhiker/hog/foo/42");
|
||||
}
|
||||
|
||||
private FileObject createDirectoryObject() {
|
||||
FileObject fileObject = createFileObject();
|
||||
fileObject.setDirectory(true);
|
||||
|
||||
@@ -35,7 +35,7 @@ public class GroupToGroupDtoMapperTest {
|
||||
private URI expectedBaseUri;
|
||||
|
||||
@Before
|
||||
public void init() throws URISyntaxException {
|
||||
public void init() {
|
||||
initMocks(this);
|
||||
expectedBaseUri = baseUri.resolve(GroupRootResource.GROUPS_PATH_V2 + "/");
|
||||
subjectThreadState.bind();
|
||||
@@ -89,6 +89,21 @@ public class GroupToGroupDtoMapperTest {
|
||||
assertEquals("http://example.com/base/v2/users/user0", actualMember.getLinks().getLinkBy("self").get().getHref());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAppendLinks() {
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(Group.class, (ctx, appender) -> {
|
||||
Group group = ctx.oneRequireByType(Group.class);
|
||||
appender.appendOne("some", "http://" + group.getName());
|
||||
});
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
Group group = createDefaultGroup();
|
||||
GroupDto dto = mapper.map(group);
|
||||
|
||||
assertEquals("http://abc", dto.getLinks().getLinkBy("some").get().getHref());
|
||||
}
|
||||
|
||||
private Group createDefaultGroup() {
|
||||
Group group = new Group();
|
||||
group.setName("abc");
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import sonia.scm.user.User;
|
||||
import sonia.scm.user.UserManager;
|
||||
import sonia.scm.user.UserTestData;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
@@ -124,6 +125,21 @@ public class MeToUserDtoMapperTest {
|
||||
assertThat(userDto.getPassword()).as("hide password for the me resource").isBlank();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAppendLinks() {
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(Me.class, (ctx, appender) -> {
|
||||
User user = ctx.oneRequireByType(User.class);
|
||||
appender.appendOne("profile", "http://hitchhiker.com/users/" + user.getName());
|
||||
});
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
User trillian = UserTestData.createTrillian();
|
||||
UserDto dto = mapper.map(trillian);
|
||||
|
||||
assertEquals("http://hitchhiker.com/users/trillian", dto.getLinks().getLinkBy("profile").get().getHref());
|
||||
}
|
||||
|
||||
private User createDefaultUser() {
|
||||
User user = new User();
|
||||
user.setName("abc");
|
||||
|
||||
@@ -211,6 +211,19 @@ public class RepositoryToRepositoryDtoMapperTest {
|
||||
assertTrue(dto.getLinks().getLinksBy("protocol").isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAppendLinks() {
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(Repository.class, (ctx, appender) -> {
|
||||
Repository repository = ctx.oneRequireByType(Repository.class);
|
||||
appender.appendOne("id", "http://" + repository.getId());
|
||||
});
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
RepositoryDto dto = mapper.map(createTestRepository());
|
||||
assertEquals("http://1", dto.getLinks().getLinkBy("id").get().getHref());
|
||||
}
|
||||
|
||||
private ScmProtocol mockProtocol(String type, String protocol) {
|
||||
return new MockScmProtocol(type, protocol);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.repository.NamespaceAndName;
|
||||
import sonia.scm.repository.Tag;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class TagToTagDtoMapperTest {
|
||||
|
||||
@SuppressWarnings("unused") // Is injected
|
||||
private final ResourceLinks resourceLinks = ResourceLinksMock.createMock(URI.create("https://hitchhiker.com"));
|
||||
|
||||
@InjectMocks
|
||||
private TagToTagDtoMapperImpl mapper;
|
||||
|
||||
@Test
|
||||
void shouldAppendLinks() {
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(Tag.class, (ctx, appender) -> {
|
||||
NamespaceAndName repository = ctx.oneRequireByType(NamespaceAndName.class);
|
||||
Tag tag = ctx.oneRequireByType(Tag.class);
|
||||
appender.appendOne("yo", "http://" + repository.logString() + "/" + tag.getName());
|
||||
});
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
TagDto dto = mapper.map(new Tag("1.0.0", "42"), new NamespaceAndName("hitchhiker", "hog"));
|
||||
assertThat(dto.getLinks().getLinkBy("yo").get().getHref()).isEqualTo("http://hitchhiker/hog/1.0.0");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import sonia.scm.user.User;
|
||||
import sonia.scm.user.UserManager;
|
||||
import sonia.scm.user.UserTestData;
|
||||
|
||||
import java.net.URI;
|
||||
import java.time.Instant;
|
||||
@@ -149,4 +150,17 @@ public class UserToUserDtoMapperTest {
|
||||
assertEquals(expectedCreationDate, userDto.getCreationDate());
|
||||
assertEquals(expectedModificationDate, userDto.getLastModified());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldAppendLink() {
|
||||
User trillian = UserTestData.createTrillian();
|
||||
|
||||
LinkEnricherRegistry registry = new LinkEnricherRegistry();
|
||||
registry.register(User.class, (ctx, appender) -> appender.appendOne("sample", "http://" + ctx.oneByType(User.class).get().getName()));
|
||||
mapper.setRegistry(registry);
|
||||
|
||||
UserDto userDto = mapper.map(trillian);
|
||||
|
||||
assertEquals("http://trillian", userDto.getLinks().getLinkBy("sample").get().getHref());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user