mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-03-21 03:21:36 +01:00
added new api to simplify the process of appending links to json responses
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
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.util.Optional;
|
||||
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class LinkAppenderMapperTest {
|
||||
|
||||
@Mock
|
||||
private LinkAppender appender;
|
||||
|
||||
private LinkEnricherRegistry registry;
|
||||
private LinkAppenderMapper mapper;
|
||||
|
||||
@BeforeEach
|
||||
void beforeEach() {
|
||||
registry = new LinkEnricherRegistry();
|
||||
mapper = new LinkAppenderMapper();
|
||||
mapper.setRegistry(registry);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAppendSimpleLink() {
|
||||
registry.register(String.class, (ctx, appender) -> appender.appendOne("42", "https://hitchhiker.com"));
|
||||
|
||||
mapper.appendLinks(appender, "hello");
|
||||
|
||||
verify(appender).appendOne("42", "https://hitchhiker.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCallMultipleEnrichers() {
|
||||
registry.register(String.class, (ctx, appender) -> appender.appendOne("42", "https://hitchhiker.com"));
|
||||
registry.register(String.class, (ctx, appender) -> appender.appendOne("21", "https://scm.hitchhiker.com"));
|
||||
|
||||
mapper.appendLinks(appender, "hello");
|
||||
|
||||
verify(appender).appendOne("42", "https://hitchhiker.com");
|
||||
verify(appender).appendOne("21", "https://scm.hitchhiker.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAppendLinkByUsingSourceFromContext() {
|
||||
registry.register(String.class, (ctx, appender) -> {
|
||||
Optional<String> rel = ctx.oneByType(String.class);
|
||||
appender.appendOne(rel.get(), "https://hitchhiker.com");
|
||||
});
|
||||
|
||||
mapper.appendLinks(appender, "42");
|
||||
|
||||
verify(appender).appendOne("42", "https://hitchhiker.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldAppendLinkByUsingMultipleContextEntries() {
|
||||
registry.register(Integer.class, (ctx, appender) -> {
|
||||
Optional<Integer> rel = ctx.oneByType(Integer.class);
|
||||
Optional<String> href = ctx.oneByType(String.class);
|
||||
appender.appendOne(String.valueOf(rel.get()), href.get());
|
||||
});
|
||||
|
||||
mapper.appendLinks(appender, Integer.valueOf(42), "https://hitchhiker.com");
|
||||
|
||||
verify(appender).appendOne("42", "https://hitchhiker.com");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
class LinkEnricherContextTest {
|
||||
|
||||
@Test
|
||||
void shouldCreateContextFromSingleObject() {
|
||||
LinkEnricherContext context = LinkEnricherContext.of("hello");
|
||||
assertThat(context.oneByType(String.class)).contains("hello");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCreateContextFromMultipleObjects() {
|
||||
LinkEnricherContext context = LinkEnricherContext.of("hello", Integer.valueOf(42), Long.valueOf(21L));
|
||||
assertThat(context.oneByType(String.class)).contains("hello");
|
||||
assertThat(context.oneByType(Integer.class)).contains(42);
|
||||
assertThat(context.oneByType(Long.class)).contains(21L);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnEmptyOptionalForUnknownTypes() {
|
||||
LinkEnricherContext context = LinkEnricherContext.of();
|
||||
assertThat(context.oneByType(String.class)).isNotPresent();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnRequiredObject() {
|
||||
LinkEnricherContext context = LinkEnricherContext.of("hello");
|
||||
assertThat(context.oneRequireByType(String.class)).isEqualTo("hello");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldThrowAnNoSuchElementExceptionForUnknownTypes() {
|
||||
LinkEnricherContext context = LinkEnricherContext.of();
|
||||
assertThrows(NoSuchElementException.class, () -> context.oneRequireByType(String.class));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class LinkEnricherRegistryTest {
|
||||
|
||||
private LinkEnricherRegistry registry;
|
||||
|
||||
@BeforeEach
|
||||
void setUpObjectUnderTest() {
|
||||
registry = new LinkEnricherRegistry();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRegisterTheEnricher() {
|
||||
SampleLinkEnricher enricher = new SampleLinkEnricher();
|
||||
registry.register(String.class, enricher);
|
||||
|
||||
Iterable<LinkEnricher> enrichers = registry.allByType(String.class);
|
||||
assertThat(enrichers).containsOnly(enricher);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRegisterMultipleEnrichers() {
|
||||
SampleLinkEnricher one = new SampleLinkEnricher();
|
||||
registry.register(String.class, one);
|
||||
|
||||
SampleLinkEnricher two = new SampleLinkEnricher();
|
||||
registry.register(String.class, two);
|
||||
|
||||
Iterable<LinkEnricher> enrichers = registry.allByType(String.class);
|
||||
assertThat(enrichers).containsOnly(one, two);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldRegisterEnrichersForDifferentTypes() {
|
||||
SampleLinkEnricher one = new SampleLinkEnricher();
|
||||
registry.register(String.class, one);
|
||||
|
||||
SampleLinkEnricher two = new SampleLinkEnricher();
|
||||
registry.register(Integer.class, two);
|
||||
|
||||
Iterable<LinkEnricher> enrichers = registry.allByType(String.class);
|
||||
assertThat(enrichers).containsOnly(one);
|
||||
|
||||
enrichers = registry.allByType(Integer.class);
|
||||
assertThat(enrichers).containsOnly(two);
|
||||
}
|
||||
|
||||
private static class SampleLinkEnricher implements LinkEnricher {
|
||||
@Override
|
||||
public void enrich(LinkEnricherContext context, LinkAppender appender) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user