Skip to content

Commit

Permalink
IT for grscicoll duplicates
Browse files Browse the repository at this point in the history
  • Loading branch information
marcos-lg committed May 4, 2021
1 parent 02aacf6 commit 2eb6110
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
import org.gbif.api.service.registry.IdentifierService;
import org.gbif.api.service.registry.MachineTagService;
import org.gbif.api.service.registry.TagService;
import org.gbif.api.vocabulary.Country;
import org.gbif.registry.search.test.EsManageServer;
import org.gbif.registry.service.collections.duplicates.CollectionDuplicatesService;
import org.gbif.registry.service.collections.duplicates.DuplicatesService;
import org.gbif.registry.ws.client.collections.CollectionClient;
import org.gbif.ws.client.filter.SimplePrincipalProvider;

Expand All @@ -38,6 +41,8 @@ public class CollectionResourceIT extends PrimaryCollectionEntityResourceIT<Coll

@MockBean private CollectionService collectionService;

@MockBean private CollectionDuplicatesService collectionDuplicatesService;

@Autowired
public CollectionResourceIT(
SimplePrincipalProvider simplePrincipalProvider,
Expand All @@ -61,7 +66,11 @@ public void listTest() {
when(collectionService.list(any(CollectionSearchRequest.class)))
.thenReturn(new PagingResponse<>(new PagingRequest(), Long.valueOf(views.size()), views));

PagingResponse<CollectionView> result = getClient().list(new CollectionSearchRequest());
CollectionSearchRequest req = new CollectionSearchRequest();
req.setCity("city");
req.setInstitution(UUID.randomUUID());
req.setCountry(Country.DENMARK);
PagingResponse<CollectionView> result = getClient().list(req);
assertEquals(views.size(), result.getResults().size());
}

Expand Down Expand Up @@ -97,7 +106,7 @@ public void listDeletedTest() {
assertEquals(views.size(), result.getResults().size());
}

// TODO: duplicates, merge, suggestions
// TODO: merge, suggestions

@Override
protected CrudService<Collection> getMockCrudService() {
Expand Down Expand Up @@ -134,6 +143,11 @@ protected OccurrenceMappingService getMockOccurrenceMappingService() {
return collectionService;
}

@Override
protected DuplicatesService getMockDuplicatesService() {
return collectionDuplicatesService;
}

protected CollectionClient getClient() {
return (CollectionClient) baseClient;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@
import org.gbif.api.service.registry.IdentifierService;
import org.gbif.api.service.registry.MachineTagService;
import org.gbif.api.service.registry.TagService;
import org.gbif.api.vocabulary.Country;
import org.gbif.registry.search.test.EsManageServer;
import org.gbif.registry.service.collections.duplicates.DuplicatesService;
import org.gbif.registry.service.collections.duplicates.InstitutionDuplicatesService;
import org.gbif.registry.ws.client.collections.InstitutionClient;
import org.gbif.ws.client.filter.SimplePrincipalProvider;

Expand All @@ -36,6 +39,8 @@ public class InstitutionResourceIT extends PrimaryCollectionEntityResourceIT<Ins

@MockBean private InstitutionService institutionService;

@MockBean private InstitutionDuplicatesService institutionDuplicatesService;

@Autowired
public InstitutionResourceIT(
SimplePrincipalProvider simplePrincipalProvider,
Expand All @@ -60,7 +65,12 @@ public void listTest() {
new PagingResponse<>(
new PagingRequest(), Long.valueOf(institutions.size()), institutions));

PagingResponse<Institution> result = getClient().list(new InstitutionSearchRequest());
InstitutionSearchRequest req = new InstitutionSearchRequest();
req.setCity("city");
req.setContact(UUID.randomUUID());
req.setCountry(Country.DENMARK);

PagingResponse<Institution> result = getClient().list(req);
assertEquals(institutions.size(), result.getResults().size());
}

Expand Down Expand Up @@ -97,7 +107,7 @@ public void listDeletedTest() {
assertEquals(institutions.size(), result.getResults().size());
}

// TODO: duplicates, merge, suggestions
// TODO: merge, suggestions

@Override
protected CrudService<Institution> getMockCrudService() {
Expand Down Expand Up @@ -134,6 +144,11 @@ protected OccurrenceMappingService getMockOccurrenceMappingService() {
return institutionService;
}

@Override
protected DuplicatesService getMockDuplicatesService() {
return institutionDuplicatesService;
}

protected InstitutionClient getClient() {
return (InstitutionClient) baseClient;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
import org.gbif.api.model.collections.OccurrenceMappeable;
import org.gbif.api.model.collections.OccurrenceMapping;
import org.gbif.api.model.collections.Person;
import org.gbif.api.model.collections.duplicates.Duplicate;
import org.gbif.api.model.collections.duplicates.DuplicatesRequest;
import org.gbif.api.model.collections.duplicates.DuplicatesResult;
import org.gbif.api.model.registry.Commentable;
import org.gbif.api.model.registry.Identifiable;
import org.gbif.api.model.registry.LenientEquals;
Expand All @@ -29,11 +32,14 @@
import org.gbif.api.service.collections.ContactService;
import org.gbif.api.service.collections.OccurrenceMappingService;
import org.gbif.api.vocabulary.Country;
import org.gbif.registry.persistence.mapper.collections.params.DuplicatesSearchParams;
import org.gbif.registry.search.test.EsManageServer;
import org.gbif.registry.service.collections.duplicates.DuplicatesService;
import org.gbif.registry.ws.client.collections.BaseCollectionEntityClient;
import org.gbif.registry.ws.client.collections.PrimaryCollectionEntityClient;
import org.gbif.ws.client.filter.SimplePrincipalProvider;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -158,11 +164,36 @@ public void occurrenceMappingsTest() {
.deleteOccurrenceMapping(UUID.randomUUID(), occurrenceMappingKey));
}

@Test
public void possibleDuplicatesTest() {
DuplicatesResult result = new DuplicatesResult();

Duplicate duplicate = new Duplicate();
duplicate.setActive(true);
duplicate.setInstitutionKey(UUID.randomUUID());
duplicate.setMailingCountry(Country.DENMARK);
result.setDuplicates(Collections.singletonList(Collections.singleton(duplicate)));
result.setGenerationDate(LocalDateTime.now());

when(getMockDuplicatesService().findPossibleDuplicates(any(DuplicatesSearchParams.class)))
.thenReturn(result);

DuplicatesRequest req = new DuplicatesRequest();
req.setInInstitutions(Collections.singletonList(UUID.randomUUID()));
req.setInCountries(
Arrays.asList(Country.DENMARK.getIso2LetterCode(), Country.SPAIN.getIso2LetterCode()));
req.setSameCode(true);
DuplicatesResult clientResult = getPrimaryCollectionEntityClient().findPossibleDuplicates(req);
assertEquals(result.getDuplicates().size(), clientResult.getDuplicates().size());
}

protected PrimaryCollectionEntityClient<T> getPrimaryCollectionEntityClient() {
return (PrimaryCollectionEntityClient<T>) baseClient;
}

protected abstract ContactService getMockContactService();

protected abstract OccurrenceMappingService getMockOccurrenceMappingService();

protected abstract DuplicatesService getMockDuplicatesService();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,13 @@

import org.gbif.api.annotation.NullToNotFound;
import org.gbif.api.model.collections.Collection;
import org.gbif.api.model.collections.duplicates.DuplicatesRequest;
import org.gbif.api.model.collections.duplicates.DuplicatesResult;
import org.gbif.api.model.collections.request.CollectionSearchRequest;
import org.gbif.api.model.collections.suggestions.CollectionChangeSuggestion;
import org.gbif.api.model.collections.view.CollectionView;
import org.gbif.api.model.common.paging.Pageable;
import org.gbif.api.model.common.paging.PagingResponse;
import org.gbif.api.model.registry.search.collections.KeyCodeNameResult;
import org.gbif.api.service.collections.CollectionService;
import org.gbif.registry.persistence.mapper.collections.params.DuplicatesSearchParams;
import org.gbif.registry.service.collections.duplicates.CollectionDuplicatesService;
import org.gbif.registry.service.collections.merge.CollectionMergeService;
import org.gbif.registry.service.collections.suggestions.CollectionChangeSuggestionService;
Expand All @@ -41,8 +38,6 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.google.common.base.Preconditions;

/**
* Class that acts both as the WS endpoint for {@link Collection} entities and also provides an
* implementation of {@link CollectionService}.
Expand Down Expand Up @@ -70,6 +65,7 @@ public CollectionResource(
collectionService,
collectionService,
collectionChangeSuggestionService,
duplicatesService,
Collection.class);
this.duplicatesService = duplicatesService;
this.collectionService = collectionService;
Expand All @@ -95,25 +91,4 @@ public PagingResponse<CollectionView> listDeleted(Pageable page) {
public List<KeyCodeNameResult> suggest(@RequestParam(value = "q", required = false) String q) {
return collectionService.suggest(q);
}

@GetMapping("possibleDuplicates")
public DuplicatesResult findPossibleDuplicates(DuplicatesRequest request) {
Preconditions.checkArgument(
!request.isEmpty(), "At least one param to check the same field is required");

return duplicatesService.findPossibleDuplicates(
DuplicatesSearchParams.builder()
.sameFuzzyName(request.getSameFuzzyName())
.sameName(request.getSameName())
.sameCode(request.getSameCode())
.sameCountry(request.getSameCountry())
.sameCity(request.getSameCity())
.inCountries(request.getInCountries())
.notInCountries(request.getNotInCountries())
.excludeKeys(request.getExcludeKeys())
.sameInstitutionKey(request.getSameInstitution())
.inInstitutions(request.getInInstitutions())
.notInInstitutions(request.getNotInInstitutions())
.build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ public InstitutionResource(
institutionService,
institutionService,
institutionChangeSuggestionService,
duplicatesService,
Institution.class);
this.institutionService = institutionService;
this.institutionMergeService = institutionMergeService;
Expand Down Expand Up @@ -106,22 +107,4 @@ public UUID convertToCollection(
return institutionMergeService.convertToCollection(
entityKey, params.getInstitutionForNewCollectionKey(), params.getNameForNewInstitution());
}

@GetMapping("possibleDuplicates")
public DuplicatesResult findPossibleDuplicates(DuplicatesRequest request) {
Preconditions.checkArgument(
!request.isEmpty(), "At least one param to check the same field is required");

return duplicatesService.findPossibleDuplicates(
DuplicatesSearchParams.builder()
.sameFuzzyName(request.getSameFuzzyName())
.sameName(request.getSameName())
.sameCode(request.getSameCode())
.sameCountry(request.getSameCountry())
.sameCity(request.getSameCity())
.inCountries(request.getInCountries())
.notInCountries(request.getNotInCountries())
.excludeKeys(request.getExcludeKeys())
.build());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
import org.gbif.api.model.collections.OccurrenceMappeable;
import org.gbif.api.model.collections.OccurrenceMapping;
import org.gbif.api.model.collections.Person;
import org.gbif.api.model.collections.duplicates.DuplicatesRequest;
import org.gbif.api.model.collections.duplicates.DuplicatesResult;
import org.gbif.api.model.collections.merge.MergeParams;
import org.gbif.api.model.collections.suggestions.ChangeSuggestion;
import org.gbif.api.model.collections.suggestions.ChangeSuggestionService;
Expand All @@ -40,6 +42,8 @@
import org.gbif.api.service.registry.MachineTagService;
import org.gbif.api.service.registry.TagService;
import org.gbif.api.vocabulary.Country;
import org.gbif.registry.persistence.mapper.collections.params.DuplicatesSearchParams;
import org.gbif.registry.service.collections.duplicates.DuplicatesService;
import org.gbif.registry.service.collections.merge.MergeService;

import java.util.List;
Expand All @@ -57,6 +61,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.google.common.base.Preconditions;

import static com.google.common.base.Preconditions.checkArgument;

/**
Expand All @@ -78,6 +84,7 @@ public abstract class PrimaryCollectionEntityResource<
private final ContactService contactService;
private final OccurrenceMappingService occurrenceMappingService;
private final ChangeSuggestionService<T, R> changeSuggestionService;
private final DuplicatesService duplicatesService;

protected PrimaryCollectionEntityResource(
MergeService<T> mergeService,
Expand All @@ -89,6 +96,7 @@ protected PrimaryCollectionEntityResource(
CommentService commentService,
OccurrenceMappingService occurrenceMappingService,
ChangeSuggestionService<T, R> changeSuggestionService,
DuplicatesService duplicatesService,
Class<T> objectClass) {
super(
objectClass, crudService, identifierService, tagService, machineTagService, commentService);
Expand All @@ -97,6 +105,7 @@ protected PrimaryCollectionEntityResource(
this.crudService = crudService;
this.contactService = contactService;
this.occurrenceMappingService = occurrenceMappingService;
this.duplicatesService = duplicatesService;
}

@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
Expand Down Expand Up @@ -154,6 +163,24 @@ public void merge(@PathVariable("key") UUID entityKey, @RequestBody MergeParams
mergeService.merge(entityKey, params.getReplacementEntityKey());
}

@GetMapping("possibleDuplicates")
public DuplicatesResult findPossibleDuplicates(DuplicatesRequest request) {
Preconditions.checkArgument(
!request.isEmpty(), "At least one param to check the same field is required");

return duplicatesService.findPossibleDuplicates(
DuplicatesSearchParams.builder()
.sameFuzzyName(request.getSameFuzzyName())
.sameName(request.getSameName())
.sameCode(request.getSameCode())
.sameCountry(request.getSameCountry())
.sameCity(request.getSameCity())
.inCountries(request.getInCountries())
.notInCountries(request.getNotInCountries())
.excludeKeys(request.getExcludeKeys())
.build());
}

@PostMapping(value = "changeSuggestion")
public int createChangeSuggestion(@RequestBody R createSuggestion) {
return changeSuggestionService.createChangeSuggestion(createSuggestion);
Expand Down

0 comments on commit 2eb6110

Please sign in to comment.