Support reading object by other identifiers than id

Therefore split adapter class for single entity and collection handling.
This commit is contained in:
René Pfeuffer
2018-07-03 13:11:18 +02:00
parent 0768b638ed
commit 1bcc35d48b
10 changed files with 254 additions and 50 deletions

View File

@@ -0,0 +1,77 @@
package sonia.scm.api.v2.resources;
import org.jboss.resteasy.core.Dispatcher;
import org.jboss.resteasy.mock.MockDispatcherFactory;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.jboss.resteasy.mock.MockHttpResponse;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryManager;
import java.net.URI;
import java.net.URISyntaxException;
import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
import static javax.servlet.http.HttpServletResponse.SC_OK;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
public class RepositoryRootResourceTest {
private final Dispatcher dispatcher = MockDispatcherFactory.createDispatcher();
@Mock
private RepositoryManager repositoryManager;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ResourceLinks resourceLinks;
@InjectMocks
private RepositoryToRepositoryDtoMapperImpl repositoryToDtoMapper;
@Before
public void prepareEnvironment() {
initMocks(this);
ResourceLinksMock.initMock(resourceLinks, URI.create("/"));
RepositoryResource repositoryResource = new RepositoryResource(repositoryToDtoMapper, repositoryManager);
RepositoryRootResource repositoryRootResource = new RepositoryRootResource(MockProvider.of(repositoryResource));
dispatcher.getRegistry().addSingletonResource(repositoryRootResource);
}
@Test
public void shouldFailForNotExistingRepository() throws URISyntaxException {
mockRepository("space", "repo");
MockHttpRequest request = MockHttpRequest.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/other");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
assertEquals(SC_NOT_FOUND, response.getStatus());
}
@Test
public void shouldFindExistingRepository() throws URISyntaxException {
mockRepository("space", "repo");
MockHttpRequest request = MockHttpRequest.get("/" + RepositoryRootResource.REPOSITORIES_PATH_V2 + "space/repo");
MockHttpResponse response = new MockHttpResponse();
dispatcher.invoke(request, response);
assertEquals(SC_OK, response.getStatus());
assertTrue(response.getContentAsString().contains("\"name\":\"repo\""));
}
private Repository mockRepository(String namespace, String name) {
Repository repository = new Repository();
repository.setNamespace(namespace);
repository.setName(name);
when(repositoryManager.getByNamespace(namespace, name)).thenReturn(repository);
return repository;
}
}