Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[VAS] Story #11846: add ark-search page #1596

Merged
merged 9 commits into from
Jan 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,6 @@ public class RestApi {
public static final String ARCHIVE_UNITS = "/archive-units";
public static final String TRANSFER_ACKNOWLEDGMENT = "/transfer-acknowledgment";
public static final String BULK_OPERATION_THRESHOLDS = "/bulk-operations-thresholds";
public static final String UNITS_PERSISTENT_IDENTIFIER = "/units-by-persistent-identifier";

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,13 @@
import fr.gouv.vitamui.archives.search.common.rest.RestApi;
import fr.gouv.vitamui.commons.api.CommonConstants;
import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.commons.api.dtos.SearchCriteriaDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.commons.api.logger.VitamUILogger;
import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory;
import fr.gouv.vitamui.commons.rest.client.BasePaginatingAndSortingRestClient;
import fr.gouv.vitamui.commons.rest.client.ExternalHttpContext;
import fr.gouv.vitamui.commons.vitam.api.dto.PersistentIdentifierResponseDto;
import fr.gouv.vitamui.commons.vitam.api.dto.ResultsDto;
import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto;
import org.springframework.core.ParameterizedTypeReference;
Expand Down Expand Up @@ -231,4 +232,10 @@ public List<VitamUiOntologyDto> getExternalOntologyFieldsList(ExternalHttpContex
return restTemplate.exchange(uriBuilder.build().toUri(), HttpMethod.GET, request, ArrayList.class).getBody();
}

public PersistentIdentifierResponseDto findUnitsByPersistentIdentifier(String identifier, ExternalHttpContext context) {
final HttpEntity<?> request = new HttpEntity<>(buildHeaders(context));
final UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(getUrl() + RestApi.UNITS_PERSISTENT_IDENTIFIER).queryParam("id", identifier);
return restTemplate.exchange(uriBuilder.build().toUri(), HttpMethod.GET, request, PersistentIdentifierResponseDto.class).getBody();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory;
import fr.gouv.vitamui.commons.rest.client.ExternalHttpContext;
import fr.gouv.vitamui.commons.test.extension.ServerIdentityExtension;
import fr.gouv.vitamui.commons.vitam.api.dto.PersistentIdentifierResponseDto;
import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -50,16 +51,22 @@
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Objects;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
public class ArchiveSearchExternalRestClientTest extends ServerIdentityExtension {

ExternalHttpContext defaultContext = new ExternalHttpContext(9, "", "", "");

private static final VitamUILogger LOGGER =
VitamUILoggerFactory.getInstance(ArchiveSearchExternalRestClientTest.class);

Expand All @@ -74,7 +81,7 @@ public class ArchiveSearchExternalRestClientTest extends ServerIdentityExtension
@BeforeEach
public void setUp() {
archiveSearchExternalRestClient =
new ArchiveSearchExternalRestClient(restTemplate, RestApi.ARCHIVE_SEARCH_PATH);
new ArchiveSearchExternalRestClient(restTemplate, "https://test" + RestApi.ARCHIVE_SEARCH_PATH);
}

@Test
Expand All @@ -86,7 +93,6 @@ public void sampleArchiveTest() {

@Test
public void when_searchArchiveUnitsByCriteria_rest_template_ok_should_return_ok() {
ExternalHttpContext context = new ExternalHttpContext(9, "", "", "");
SearchCriteriaDto query = new SearchCriteriaDto();
final ArchiveUnitsDto responseEntity = new ArchiveUnitsDto();

Expand All @@ -95,30 +101,28 @@ public void when_searchArchiveUnitsByCriteria_rest_template_ok_should_return_ok(
.thenReturn(new ResponseEntity<>(responseEntity, HttpStatus.OK));

ArchiveUnitsDto response =
archiveSearchExternalRestClient.searchArchiveUnitsByCriteria(context, query);
archiveSearchExternalRestClient.searchArchiveUnitsByCriteria(defaultContext, query);

Assertions.assertEquals(response, responseEntity);
}

@Test
public void whenGetFilingHoldingSChemeRestTemplateOKThenShouldReturnOK() {
ExternalHttpContext context = new ExternalHttpContext(9, "", "", "");
final VitamUISearchResponseDto responseEntity = new VitamUISearchResponseDto();

when(restTemplate
.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(VitamUISearchResponseDto.class)))
.thenReturn(new ResponseEntity<>(responseEntity, HttpStatus.OK));

VitamUISearchResponseDto response =
archiveSearchExternalRestClient.getFilingHoldingScheme(context);
archiveSearchExternalRestClient.getFilingHoldingScheme(defaultContext);

Assertions.assertEquals(response, responseEntity);
}


@Test
public void whenGetexportCsvArchiveUnitsByCriteria_Srvc_ok_ThenShouldReturnOK() throws IOException {
ExternalHttpContext context = new ExternalHttpContext(9, "", "", "");
SearchCriteriaDto query = new SearchCriteriaDto();
final HttpEntity<SearchCriteriaDto> request = new HttpEntity<>(query);

Expand All @@ -130,22 +134,38 @@ public void whenGetexportCsvArchiveUnitsByCriteria_Srvc_ok_ThenShouldReturnOK()
any(HttpEntity.class), eq(Resource.class))).thenReturn(new ResponseEntity<>(resource, HttpStatus.OK));

ResponseEntity<Resource> response =
archiveSearchExternalRestClient.exportCsvArchiveUnitsByCriteria(query, context);
archiveSearchExternalRestClient.exportCsvArchiveUnitsByCriteria(query, defaultContext);

Assertions.assertEquals(response.getBody(), resource);
}

@Test
public void transferRequest_should_return_OK() {
ExternalHttpContext context = new ExternalHttpContext(9, "", "", "");
TransferRequestDto transferRequestDto = new TransferRequestDto();
final HttpEntity<TransferRequestDto> request = new HttpEntity<>(transferRequestDto);
when(restTemplate.exchange(anyString(), eq(HttpMethod.POST), any(HttpEntity.class), any(Class.class)))
.thenReturn(new ResponseEntity<>("OK", HttpStatus.OK));
// When
ResponseEntity<String> response = archiveSearchExternalRestClient.transferRequest(transferRequestDto, context);
ResponseEntity<String> response = archiveSearchExternalRestClient.transferRequest(transferRequestDto, defaultContext);

org.assertj.core.api.Assertions.assertThat(response).isNotNull();
org.assertj.core.api.Assertions.assertThat(response.getBody()).isEqualTo("OK");
}

@Test
public void findUnitsByPersistentIdentifier_ok() throws URISyntaxException {
// Given
String arkId = "ark:/225867/001a9d7db5eghxac";
PersistentIdentifierResponseDto result = new PersistentIdentifierResponseDto();
URI uri = new URI(archiveSearchExternalRestClient.getBaseUrl() + archiveSearchExternalRestClient.getPathUrl()
+ RestApi.UNITS_PERSISTENT_IDENTIFIER + "?id=ark:/225867/001a9d7db5eghxac");
when(restTemplate.exchange(any(URI.class), any(HttpMethod.class), any(HttpEntity.class), any(Class.class)))
.thenReturn(new ResponseEntity<>(result, HttpStatus.OK));
// When
PersistentIdentifierResponseDto persistentIdentifierResponse = archiveSearchExternalRestClient.findUnitsByPersistentIdentifier(arkId, defaultContext);
// Then
Assertions.assertEquals(persistentIdentifierResponse, result);
verify(restTemplate).exchange(eq(uri), eq(HttpMethod.GET), any(HttpEntity.class), eq(ArrayList.class));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import fr.gouv.vitam.common.exception.InvalidParseOperationException;
import fr.gouv.vitamui.archives.search.common.dto.ArchiveUnitsDto;
import fr.gouv.vitamui.archives.search.common.dto.ExportDipCriteriaDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.archives.search.common.dto.ReclassificationCriteriaDto;
import fr.gouv.vitamui.archives.search.common.dto.RuleSearchCriteriaDto;
import fr.gouv.vitamui.archives.search.common.dto.TransferRequestDto;
Expand All @@ -44,9 +43,11 @@
import fr.gouv.vitamui.commons.api.ParameterChecker;
import fr.gouv.vitamui.commons.api.domain.ServicesData;
import fr.gouv.vitamui.commons.api.dtos.SearchCriteriaDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.commons.api.exception.PreconditionFailedException;
import fr.gouv.vitamui.commons.api.logger.VitamUILogger;
import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory;
import fr.gouv.vitamui.commons.vitam.api.dto.PersistentIdentifierResponseDto;
import fr.gouv.vitamui.commons.vitam.api.dto.ResultsDto;
import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto;
import io.swagger.annotations.Api;
Expand Down Expand Up @@ -248,7 +249,7 @@ public String updateUnitById(final @PathVariable("id") String id,

@Secured(ServicesData.ROLE_TRANSFER_ACKNOWLEDGMENT)
@ApiOperation(value = "Upload an ATR file for the transfer acknowledgment", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping(value = RestApi.TRANSFER_ACKNOWLEDGMENT , consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@PostMapping(value = RestApi.TRANSFER_ACKNOWLEDGMENT, consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public String transferAcknowledgment(InputStream inputStream,
@RequestHeader(value = CommonConstants.X_ORIGINAL_FILENAME_HEADER) final String originalFileName
) throws InvalidParseOperationException, PreconditionFailedException {
Expand All @@ -268,4 +269,15 @@ public List<VitamUiOntologyDto> getExternalOntologiesList() {
LOGGER.debug("[EXTERNAL] : Get External ontologies list");
return archivesSearchExternalService.getExternalOntologiesList();
}

@GetMapping(RestApi.UNITS_PERSISTENT_IDENTIFIER)
public PersistentIdentifierResponseDto findUnitsByPersistentIdentifier(
final @RequestParam(value = "id") String arkId
) {
LOGGER.debug("[EXTERNAL] : Get by persistent identifier {}", arkId);
final PersistentIdentifierResponseDto persistentIdentifierResponse = archivesSearchExternalService.findUnitsByPersistentIdentifier(arkId);
LOGGER.debug("[EXTERNAL] : persistentIdentifierResponse = {}", persistentIdentifierResponse);
return persistentIdentifierResponse;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,15 @@
import fr.gouv.archive.internal.client.ArchiveSearchStreamingInternalRestClient;
import fr.gouv.vitamui.archives.search.common.dto.ArchiveUnitsDto;
import fr.gouv.vitamui.archives.search.common.dto.ExportDipCriteriaDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.archives.search.common.dto.ReclassificationCriteriaDto;
import fr.gouv.vitamui.archives.search.common.dto.RuleSearchCriteriaDto;
import fr.gouv.vitamui.archives.search.common.dto.TransferRequestDto;
import fr.gouv.vitamui.archives.search.common.dto.UnitDescriptiveMetadataDto;
import fr.gouv.vitamui.commons.api.dtos.SearchCriteriaDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.commons.api.logger.VitamUILogger;
import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory;
import fr.gouv.vitamui.commons.vitam.api.dto.PersistentIdentifierResponseDto;
import fr.gouv.vitamui.commons.vitam.api.dto.ResultsDto;
import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto;
import fr.gouv.vitamui.iam.security.client.AbstractResourceClientService;
Expand All @@ -65,6 +66,7 @@
@Setter
@Service
public class ArchivesSearchExternalService extends AbstractResourceClientService<ArchiveUnitsDto, ArchiveUnitsDto> {

private static final VitamUILogger LOGGER = VitamUILoggerFactory.getInstance(ArchivesSearchExternalService.class);

@Autowired
Expand Down Expand Up @@ -203,4 +205,9 @@ public String transferAcknowledgment(InputStream atrInputStream, final String or
public List<VitamUiOntologyDto> getExternalOntologiesList() {
return archiveInternalRestClient.getExternalOntologiesList(getInternalHttpContext());
}

public PersistentIdentifierResponseDto findUnitsByPersistentIdentifier(String arkId) {
return archiveInternalRestClient.findUnitsByPersistentIdentifier(arkId, getInternalHttpContext());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,13 @@
import fr.gouv.vitamui.archives.search.common.rest.RestApi;
import fr.gouv.vitamui.commons.api.CommonConstants;
import fr.gouv.vitamui.commons.api.domain.PaginatedValuesDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.commons.api.dtos.SearchCriteriaDto;
import fr.gouv.vitamui.commons.api.dtos.VitamUiOntologyDto;
import fr.gouv.vitamui.commons.api.logger.VitamUILogger;
import fr.gouv.vitamui.commons.api.logger.VitamUILoggerFactory;
import fr.gouv.vitamui.commons.rest.client.BasePaginatingAndSortingRestClient;
import fr.gouv.vitamui.commons.rest.client.InternalHttpContext;
import fr.gouv.vitamui.commons.vitam.api.dto.PersistentIdentifierResponseDto;
import fr.gouv.vitamui.commons.vitam.api.dto.ResultsDto;
import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto;
import org.springframework.core.ParameterizedTypeReference;
Expand Down Expand Up @@ -259,4 +260,10 @@ public List<VitamUiOntologyDto> getExternalOntologiesList(final InternalHttpCont
return restTemplate.exchange(uriBuilder.build().toUri(), HttpMethod.GET, request, ArrayList.class).getBody();
}

public PersistentIdentifierResponseDto findUnitsByPersistentIdentifier(String identifier, final InternalHttpContext context) {
final HttpEntity<?> request = new HttpEntity<>(buildHeaders(context));
final UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl(getUrl() + RestApi.UNITS_PERSISTENT_IDENTIFIER).queryParam("id", identifier);
return restTemplate.exchange(uriBuilder.build().toUri(), HttpMethod.GET, request, PersistentIdentifierResponseDto.class).getBody();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import fr.gouv.vitamui.commons.api.dtos.SearchCriteriaDto;
import fr.gouv.vitamui.commons.rest.client.InternalHttpContext;
import fr.gouv.vitamui.commons.test.extension.ServerIdentityExtension;
import fr.gouv.vitamui.commons.vitam.api.dto.PersistentIdentifierResponseDto;
import fr.gouv.vitamui.commons.vitam.api.dto.VitamUISearchResponseDto;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -47,15 +48,21 @@
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
public class ArchiveInternalRestClientTest extends ServerIdentityExtension {

String baseUrl = "https://tests" + RestApi.ARCHIVE_SEARCH_PATH;
InternalHttpContext defaultContext = new InternalHttpContext(9, "", "", "", "", "", "", "");
private ArchiveInternalRestClient archivesSearchExternalRestClient;
public final String ARCHIVE_UNITS_RESULTS_CSV = "data/vitam_archive_units_response.csv";

Expand All @@ -65,7 +72,7 @@ public class ArchiveInternalRestClientTest extends ServerIdentityExtension {

@BeforeEach
public void setUp() {
archivesSearchExternalRestClient = new ArchiveInternalRestClient(restTemplate, RestApi.ARCHIVE_SEARCH_PATH);
archivesSearchExternalRestClient = new ArchiveInternalRestClient(restTemplate, baseUrl);
}

@Test
Expand All @@ -75,10 +82,8 @@ public void sampleArchiveTest() {
}



@Test
public void when_searchArchiveUnitsByCriteria_rest_template_ok_should_return_ok() {
InternalHttpContext context = new InternalHttpContext(9, "", "", "", "", "", "", "");
SearchCriteriaDto query = new SearchCriteriaDto();

final ArchiveUnitsDto responseEntity = new ArchiveUnitsDto();
Expand All @@ -89,26 +94,24 @@ public void when_searchArchiveUnitsByCriteria_rest_template_ok_should_return_ok(
eq(ArchiveUnitsDto.class)))
.thenReturn(new ResponseEntity<>(responseEntity, HttpStatus.OK));
ArchiveUnitsDto response =
archivesSearchExternalRestClient.searchArchiveUnitsByCriteria(context, query);
archivesSearchExternalRestClient.searchArchiveUnitsByCriteria(defaultContext, query);
Assertions.assertEquals(response, responseEntity);
}

@Test
public void testSearchFilingHoldingSchemeResultsThanReturnVitamUISearchResponseDto() {
InternalHttpContext context = new InternalHttpContext(9, "", "", "", "", "", "", "");
final VitamUISearchResponseDto responseEntity = new VitamUISearchResponseDto();

when(restTemplate
.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(VitamUISearchResponseDto.class)))
.thenReturn(new ResponseEntity<>(responseEntity, HttpStatus.OK));
VitamUISearchResponseDto response =
archivesSearchExternalRestClient.getFilingHoldingScheme(context);
archivesSearchExternalRestClient.getFilingHoldingScheme(defaultContext);
Assertions.assertEquals(response, responseEntity);
}

@Test
public void whenGetexportCsvArchiveUnitsByCriteria_Srvc_ok_ThenShouldReturnOK() throws IOException {
InternalHttpContext context = new InternalHttpContext(9, "", "", "", "", "", "", "");
SearchCriteriaDto query = new SearchCriteriaDto();

Resource resource = new ByteArrayResource(ArchiveInternalRestClientTest.class.getClassLoader()
Expand All @@ -118,10 +121,26 @@ public void whenGetexportCsvArchiveUnitsByCriteria_Srvc_ok_ThenShouldReturnOK()
any(HttpEntity.class), eq(Resource.class))).thenReturn(new ResponseEntity<>(resource, HttpStatus.OK));

Resource response =
archivesSearchExternalRestClient.exportCsvArchiveUnitsByCriteria(query, context);
archivesSearchExternalRestClient.exportCsvArchiveUnitsByCriteria(query, defaultContext);


Assertions.assertEquals(response, resource);
}

@Test
public void findUnitsByPersistentIdentifier_ok() throws URISyntaxException {
// Given
String arkId = "ark:/225867/001a9d7db5eghxac";
PersistentIdentifierResponseDto result = new PersistentIdentifierResponseDto();
URI uri = new URI(archivesSearchExternalRestClient.getBaseUrl() + archivesSearchExternalRestClient.getPathUrl()
+ RestApi.UNITS_PERSISTENT_IDENTIFIER + "?id=ark:/225867/001a9d7db5eghxac");
when(restTemplate.exchange(any(URI.class), any(HttpMethod.class), any(HttpEntity.class), any(Class.class)))
.thenReturn(new ResponseEntity<>(result, HttpStatus.OK));
// When
PersistentIdentifierResponseDto persistentIdentifierResponse = archivesSearchExternalRestClient.findUnitsByPersistentIdentifier(arkId, defaultContext);
// Then
Assertions.assertEquals(persistentIdentifierResponse, result);
verify(restTemplate).exchange(eq(uri), eq(HttpMethod.GET), any(HttpEntity.class), eq(ArrayList.class));
}

}
Loading