Add additional help to quick search and an advanced search documentation page (#1757)

Co-authored-by: Sebastian Sdorra <sebastian.sdorra@cloudogu.com>
This commit is contained in:
Konstantin Schaper
2021-08-09 12:07:28 +02:00
committed by GitHub
parent f2249cea73
commit ddd2fc1055
43 changed files with 1494 additions and 94 deletions

View File

@@ -228,5 +228,6 @@ class IndexDtoGeneratorTest {
when(resourceLinks.namespaceCollection()).thenReturn(new ResourceLinks.NamespaceCollectionLinks(scmPathInfo));
when(resourceLinks.me()).thenReturn(new ResourceLinks.MeLinks(scmPathInfo, new ResourceLinks.UserLinks(scmPathInfo)));
when(resourceLinks.repository()).thenReturn(new ResourceLinks.RepositoryLinks(scmPathInfo));
when(resourceLinks.search()).thenReturn(new ResourceLinks.SearchLinks(scmPathInfo));
}
}

View File

@@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import de.otto.edison.hal.HalRepresentation;
import lombok.Getter;
import lombok.Setter;
import org.assertj.core.util.Lists;
import org.jboss.resteasy.mock.MockHttpRequest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
@@ -45,6 +46,7 @@ import sonia.scm.search.Hit;
import sonia.scm.search.QueryCountResult;
import sonia.scm.search.QueryResult;
import sonia.scm.search.SearchEngine;
import sonia.scm.search.SearchableType;
import sonia.scm.web.JsonMockHttpResponse;
import sonia.scm.web.RestDispatcher;
import sonia.scm.web.VndMediaType;
@@ -80,23 +82,47 @@ class SearchResourceTest {
@Mock
private HalEnricherRegistry enricherRegistry;
@Mock
private SearchableType searchableTypeOne;
@Mock
private SearchableType searchableTypeTwo;
@BeforeEach
void setUpDispatcher() {
ScmPathInfoStore scmPathInfoStore = new ScmPathInfoStore();
scmPathInfoStore.set(() -> URI.create("/"));
QueryResultMapper mapper = Mappers.getMapper(QueryResultMapper.class);
mapper.setRepositoryManager(repositoryManager);
mapper.setResourceLinks(new ResourceLinks(scmPathInfoStore));
QueryResultMapper queryResultMapper = Mappers.getMapper(QueryResultMapper.class);
queryResultMapper.setRepositoryManager(repositoryManager);
queryResultMapper.setResourceLinks(new ResourceLinks(scmPathInfoStore));
mapper.setRegistry(enricherRegistry);
SearchableTypeMapper searchableTypeMapper = Mappers.getMapper(SearchableTypeMapper.class);
queryResultMapper.setRegistry(enricherRegistry);
SearchResource resource = new SearchResource(
searchEngine, mapper
searchEngine, queryResultMapper, searchableTypeMapper
);
dispatcher = new RestDispatcher();
dispatcher.addSingletonResource(resource);
}
@Test
void shouldReturnSearchableTypes() throws URISyntaxException {
when(searchEngine.getSearchableTypes()).thenReturn(Lists.list(searchableTypeOne, searchableTypeTwo));
when(searchableTypeOne.getName()).thenReturn("Type One");
when(searchableTypeTwo.getName()).thenReturn("Type Two");
MockHttpRequest request = MockHttpRequest.get("/v2/search/searchableTypes");
JsonMockHttpResponse response = new JsonMockHttpResponse();
dispatcher.invoke(request, response);
JsonNode contentAsJson = response.getContentAsJson();
assertThat(response.getStatus()).isEqualTo(200);
assertThat(contentAsJson.isArray()).isTrue();
assertThat(contentAsJson.get(0).get("name").asText()).isEqualTo("Type One");
assertThat(contentAsJson.get(1).get("name").asText()).isEqualTo("Type Two");
}
@Test
void shouldEnrichQueryResult() throws IOException, URISyntaxException {
when(enricherRegistry.allByType(QueryResult.class))
@@ -330,7 +356,6 @@ class SearchResourceTest {
return response;
}
@Getter
@Setter
public static class SampleEmbedded extends HalRepresentation {

View File

@@ -0,0 +1,63 @@
/*
* MIT License
*
* Copyright (c) 2020-present Cloudogu GmbH and Contributors
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package sonia.scm.api.v2.resources;
import com.google.common.collect.ImmutableList;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mapstruct.factory.Mappers;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.search.SearchableField;
import sonia.scm.search.SearchableType;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
class SearchableTypeMapperTest {
@Mock
private SearchableType searchableType;
@Mock
private SearchableField searchableField;
private final SearchableTypeMapper searchableTypeMapper = Mappers.getMapper(SearchableTypeMapper.class);
@Test
void shouldMapType() {
when(searchableType.getName()).thenReturn("HitchhikerType");
doReturn(ImmutableList.of(searchableField)).when(searchableType).getFields();
when(searchableField.getName()).thenReturn("HitchhikerField");
doReturn(Integer.class).when(searchableField).getType();
final SearchableTypeDto typeDto = searchableTypeMapper.map(searchableType);
Assertions.assertThat(typeDto.getName()).isEqualTo("HitchhikerType");
final SearchableFieldDto searchableFieldDto = typeDto.getFields().stream().findFirst().get();
Assertions.assertThat(searchableFieldDto.getName()).isEqualTo("HitchhikerField");
Assertions.assertThat(searchableFieldDto.getType()).isEqualTo("number");
}
}