mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-10 23:45:44 +01:00
Enrich repository collection, too
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
package sonia.scm.api.v2.resources;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.google.common.io.Resources;
|
||||
import com.google.inject.Provider;
|
||||
import com.google.inject.util.Providers;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
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.NamespaceAndName;
|
||||
import sonia.scm.repository.Repository;
|
||||
import sonia.scm.repository.RepositoryManager;
|
||||
import sonia.scm.repository.api.Command;
|
||||
import sonia.scm.repository.api.RepositoryService;
|
||||
import sonia.scm.repository.api.RepositoryServiceFactory;
|
||||
import sonia.scm.web.JsonEnricherContext;
|
||||
import sonia.scm.web.VndMediaType;
|
||||
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URL;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class GitRepositoryConfigEnricherTest {
|
||||
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
private GitRepositoryConfigEnricher linkEnricher;
|
||||
private JsonNode rootNode;
|
||||
@Mock
|
||||
private RepositoryManager manager;
|
||||
|
||||
@BeforeEach
|
||||
void globalSetUp() {
|
||||
ScmPathInfoStore pathInfoStore = new ScmPathInfoStore();
|
||||
pathInfoStore.set(() -> URI.create("/"));
|
||||
Provider<ScmPathInfoStore> pathInfoStoreProvider = Providers.of(pathInfoStore);
|
||||
|
||||
linkEnricher = new GitRepositoryConfigEnricher(pathInfoStoreProvider, objectMapper, manager);
|
||||
}
|
||||
|
||||
@Nested
|
||||
class ForSingleRepository {
|
||||
@BeforeEach
|
||||
void setUp() throws IOException {
|
||||
URL resource = Resources.getResource("sonia/scm/repository/repository-001.json");
|
||||
rootNode = objectMapper.readTree(resource);
|
||||
|
||||
when(manager.get(new NamespaceAndName("scmadmin", "web-resources"))).thenReturn(new Repository("id", "git", "scmadmin", "web-resources"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldEnrichGitRepositories() {
|
||||
JsonEnricherContext context = new JsonEnricherContext(
|
||||
URI.create("/"),
|
||||
MediaType.valueOf(VndMediaType.REPOSITORY),
|
||||
rootNode
|
||||
);
|
||||
|
||||
linkEnricher.enrich(context);
|
||||
|
||||
String configLink = context.getResponseEntity()
|
||||
.get("_links")
|
||||
.get("configuration")
|
||||
.get("href")
|
||||
.asText();
|
||||
|
||||
assertThat(configLink).isEqualTo("/v2/config/git/scmadmin/web-resources");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotEnrichOtherRepositories() {
|
||||
when(manager.get(new NamespaceAndName("scmadmin", "web-resources"))).thenReturn(new Repository("id", "hg", "scmadmin", "web-resources"));
|
||||
|
||||
JsonEnricherContext context = new JsonEnricherContext(
|
||||
URI.create("/"),
|
||||
MediaType.valueOf(VndMediaType.REPOSITORY),
|
||||
rootNode
|
||||
);
|
||||
|
||||
linkEnricher.enrich(context);
|
||||
|
||||
JsonNode configLink = context.getResponseEntity()
|
||||
.get("_links")
|
||||
.get("configuration");
|
||||
|
||||
assertThat(configLink).isNull();
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
class ForRepositoryCollection {
|
||||
@BeforeEach
|
||||
void setUp() throws IOException {
|
||||
URL resource = Resources.getResource("sonia/scm/repository/repository-collection-001.json");
|
||||
rootNode = objectMapper.readTree(resource);
|
||||
|
||||
when(manager.get(new NamespaceAndName("scmadmin", "web-resources"))).thenReturn(new Repository("id", "git", "scmadmin", "web-resources"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldEnrichAllRepositories() {
|
||||
JsonEnricherContext context = new JsonEnricherContext(
|
||||
URI.create("/"),
|
||||
MediaType.valueOf(VndMediaType.REPOSITORY_COLLECTION),
|
||||
rootNode
|
||||
);
|
||||
|
||||
linkEnricher.enrich(context);
|
||||
|
||||
context.getResponseEntity()
|
||||
.get("_embedded")
|
||||
.withArray("repositories")
|
||||
.elements()
|
||||
.forEachRemaining(node -> {
|
||||
String configLink = node
|
||||
.get("_links")
|
||||
.get("configuration")
|
||||
.get("href")
|
||||
.asText();
|
||||
|
||||
assertThat(configLink).isEqualTo("/v2/config/git/scmadmin/web-resources");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotModifyObjectsWithUnsupportedMediaType() throws IOException {
|
||||
URL resource = Resources.getResource("sonia/scm/repository/repository-001.json");
|
||||
rootNode = objectMapper.readTree(resource);
|
||||
JsonEnricherContext context = new JsonEnricherContext(
|
||||
URI.create("/"),
|
||||
MediaType.valueOf(VndMediaType.USER),
|
||||
rootNode
|
||||
);
|
||||
|
||||
linkEnricher.enrich(context);
|
||||
|
||||
boolean hasNewPullRequestLink = context.getResponseEntity()
|
||||
.get("_links")
|
||||
.has("configuration");
|
||||
|
||||
assertThat(hasNewPullRequestLink).isFalse();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user