Skip to content
Snippets Groups Projects
Commit 026a422a authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-2938 Suche per DB ausbauen' (#71) from...

Merge pull request 'OZG-2938 Suche per DB ausbauen' (#71) from OZG-2938-remove_db_search into master

Reviewed-on: https://git.ozg-sh.de/mgm/pluto/pulls/71


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents ef44ee34 9b29ab0d
Branches
Tags
No related merge requests found
......@@ -5,6 +5,4 @@ import org.springframework.data.domain.Page;
interface CustomVorgangHeaderRepository {
Page<VorgangHeader> findAll(FindVorgangRequest request);
Page<VorgangHeader> searchBy(FindVorgangRequest request);
}
\ No newline at end of file
......@@ -42,11 +42,6 @@ class VorgangHeaderRepositoryImpl implements CustomVorgangHeaderRepository {
return checkAndExecuteRequest(request, buildFilterQuery(request.getFilterBy()));
}
@Override
public Page<VorgangHeader> searchBy(FindVorgangRequest request) {
return checkAndExecuteRequest(request, buildFilterQuery(request.getFilterBy(), request.getSearchBy()));
}
private Page<VorgangHeader> checkAndExecuteRequest(FindVorgangRequest request, Query totalQuery) {
if (hasNoPermissionByOrganisationseinheitenId(request.getFilterBy())) {
return new PageImpl<>(Collections.emptyList());
......@@ -83,10 +78,6 @@ class VorgangHeaderRepositoryImpl implements CustomVorgangHeaderRepository {
return Query.query(filterToCriteria(filterCriteria));
}
Query buildFilterQuery(FilterCriteria filterCriteria, String searchBy) {
return Query.query(new Criteria().andOperator(filterToCriteria(filterCriteria), CriteriaUtil.searchCriteria(searchBy)));
}
private Criteria filterToCriteria(FilterCriteria filterCriteria) {
var organisationseinheitenIdCriteria = buildOrganisationseinheitenCriteria(filterCriteria);
var assignedToCriteria = buildAssignedToCriteria(filterCriteria);
......
package de.itvsh.ozg.pluto.vorgang;
import java.util.Objects;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
......@@ -26,11 +24,8 @@ class VorgangHeaderService {
public Page<VorgangHeader> findAll(FindVorgangRequest request) {
if (Objects.nonNull(searchService) && Objects.nonNull(request.getSearchBy())) {
return removeUnpermitted(searchService.find(request));
} else {
return removeUnpermitted(Optional.ofNullable(StringUtils.trimToNull(request.getSearchBy()))
.map(searchString -> repository.searchBy(request))
.orElseGet(() -> repository.findAll(request)));
}
return removeUnpermitted(repository.findAll(request));
}
private Page<VorgangHeader> removeUnpermitted(Page<VorgangHeader> loaded) {
......
......@@ -16,7 +16,6 @@ import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.EnumSource;
import org.junit.jupiter.params.provider.EnumSource.Mode;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -48,239 +47,6 @@ class VorgangHeaderRepositoryITCase {
mongoOperations.dropCollection(Vorgang.class);
}
@Nested
class TestSearchBy {
@ParameterizedTest
@CsvSource({ "test--", "--test", "-test-", "TEst--" })
void shouldFindByAktenzeichen(String aktenzeichen) {
mongoOperations.save(buildWithAktenzeichen(aktenzeichen));
var result = repository.searchBy(createRequestWithSearchBy("test")).getContent();
assertThat(result).hasSize(1);
}
@ParameterizedTest
@CsvSource({ "Paul", "Pauline", "testpauler", "PaULie" })
void shouldFindByVornamen(String vornamen) {
mongoOperations.save(buildVorgangWithVornamen(vornamen));
var result = repository.searchBy(createRequestWithSearchBy("Paul")).getContent();
assertThat(result).hasSize(1);
}
private Vorgang buildVorgangWithVornamen(String vornamen) {
return VorgangTestFactory.createBuilder()
.id(null)
.clearEingangs()
.eingang(EingangTestFactory.createBuilder()
.antragsteller(AntragstellerTestFactory.createBuilder()
.vorname(vornamen)
.build())
.build())
.build();
}
@ParameterizedTest
@CsvSource({ "Maier", "Biermaier", "Maiertest", "Testmaiertest" })
void shouldFindByNachnamen(String nachname) {
mongoOperations.save(buildWithNachname(nachname));
var result = repository.searchBy(createRequestWithSearchBy("Maier")).getContent();
assertThat(result).hasSize(1);
}
@ParameterizedTest
@CsvSource({ "Fischereischein", "Fischer", "AFischereischein", "xFischEreischEinx" })
void shouldFindByVorgangName(String name) {
mongoOperations.save(buildWithVorgangName(name));
var result = repository.searchBy(createRequestWithSearchBy("Fischer")).getContent();
assertThat(result).hasSize(1);
}
@ParameterizedTest
@CsvSource({ "32456 0815 34", "0815 123 456", "123 456 0815" })
void shouldFindByRequestId(String requestId) {
mongoOperations.save(buildVorgangWithRequestId(requestId));
var result = repository.searchBy(createRequestWithSearchBy("0815")).getContent();
assertThat(result).hasSize(1);
}
private Vorgang buildVorgangWithRequestId(String requestId) {
return VorgangTestFactory.createBuilder()
.eingang(EingangTestFactory.createBuilder()
.header(EingangHeaderTestFactory.createBuilder()
.requestId(requestId)
.build())
.build())
.build();
}
@ParameterizedTest
@CsvSource({ "Testaktenzeichen, Paultest, Testmaier, TEstvorgang", "Aktenzeichentest, Test-Marie, Meiertest, vorgangTEst" })
void shouldFindByInSomeFields(String aktenzeichen, String vorname, String nachname, String vorgangId) {
mongoOperations.save(buildWithAktenzeichen(aktenzeichen));
mongoOperations.save(buildVorgangWithVornamen(vorname));
mongoOperations.save(buildWithNachname(nachname));
mongoOperations.save(buildWithVorgangName(vorgangId));
var result = repository.searchBy(createRequestWithSearchBy("test")).getContent();
assertThat(result).hasSize(4);
}
@ParameterizedTest
@CsvSource({ "Testaktenzeichen, Pinguin, bla, bla-vorgang", "Aktenzeichentest, Pechbla, blub, vorgang-blub" })
void shouldNotFindMultipleWordsByInSomeFields(String aktenzeichen, String vorname, String nachname, String vorgangId) {
mongoOperations.save(buildWithAktenzeichen(aktenzeichen));
mongoOperations.save(buildWithVorgangName(vorname));
mongoOperations.save(buildWithNachname(nachname));
mongoOperations.save(buildWithVorgangName(vorgangId));
var result = repository.searchBy(createRequestWithSearchBy("test bla")).getContent();
assertThat(result).isEmpty();
}
private Vorgang buildWithAktenzeichen(String aktenzeichen) {
return VorgangTestFactory.createBuilder().id(null).aktenzeichen(aktenzeichen).status(Status.ANGENOMMEN).build();
}
private Vorgang buildWithVorgangName(String name) {
return VorgangTestFactory.createBuilder().id(null).name(name).build();
}
private Vorgang buildWithNachname(String nachname) {
return VorgangTestFactory.createBuilder().id(null)
.clearEingangs().eingang(EingangTestFactory.createBuilder()
.antragsteller(AntragstellerTestFactory.createBuilder()
.nachname(nachname)
.build())
.build())
.build();
}
@ParameterizedTest
@CsvSource({ "Testaktenzeichen, bla-vorgang", "Aktenzeichentest, vorgang-bla" })
void shouldFindMultipleWordsByInSomeFields(String aktenzeichen, String vorgangId) {
mongoOperations.save(buildWithAktenzeichenAndVorgangnamen(aktenzeichen, vorgangId));
mongoOperations.save(buildWithAktenzeichenAndVorgangnamen(aktenzeichen, vorgangId));
var result = repository.searchBy(createRequestWithSearchBy("test bla")).getContent();
assertThat(result).hasSize(2);
}
private Vorgang buildWithAktenzeichenAndVorgangnamen(String aktenzeichen, String name) {
return VorgangTestFactory.createBuilder()
.id(UUID.randomUUID().toString())
.name(name)
.aktenzeichen(aktenzeichen)
.build();
}
@ParameterizedTest
@CsvSource({ "vorgangNummer1234", "--Nummer1234", "-ngNu-", "VorgangNu--" })
void shouldFindByNummer(String nummer) {
mongoOperations.save(buildWithNummer(nummer));
var result = repository.searchBy(createRequestWithSearchBy("Nu")).getContent();
assertThat(result).hasSize(1);
}
private Vorgang buildWithNummer(String nummer) {
return VorgangTestFactory.createBuilder().id(null).nummer(nummer).build();
}
private FindVorgangRequest createRequestWithSearchBy(String searchTerm) {
return FindVorgangRequestTestFactory.createBuilder()
.searchBy(searchTerm).filterBy(null).limit(10).offset(0)
.build();
}
}
@Nested
class TestSearchByEingangsKennzeichen {
private final String NO_DEFAULT_MATCH = "no match";
private final String EINGANGSKENNZEICHEN = "0815";
@ParameterizedTest
@EnumSource
void shouldFindInAnyStatus(Status status) {
mongoOperations.save(buildWithEingangsKennzeichen(EINGANGSKENNZEICHEN, status));
mongoOperations.save(buildWithEingangsKennzeichen(NO_DEFAULT_MATCH, status));
var request = FindVorgangRequestTestFactory.createBuilder()
.searchBy(EINGANGSKENNZEICHEN).filterBy(null)
.build();
var result = repository.searchBy(request).getContent();
assertThat(result).hasSize(1);
}
@Test
void shouldHaveTotalByEingangskennzeichenAndOrganisationseinheitenId() {
mongoOperations.save(buildWithEingangsKennzeichen(EINGANGSKENNZEICHEN));
mongoOperations.save(buildWithEingangsKennzeichen(EINGANGSKENNZEICHEN));
mongoOperations.save(buildWithEingangsKennzeichen(EINGANGSKENNZEICHEN));
mongoOperations.save(buildWithEingangsKennzeichen(NO_DEFAULT_MATCH));
mongoOperations.save(buildWithEingangsKennzeichenAndOrganisationseinheitenId(NO_DEFAULT_MATCH, NO_DEFAULT_MATCH, Status.NEU));
var request = FindVorgangRequestTestFactory.createBuilder()
.searchBy(EINGANGSKENNZEICHEN).filterBy(FilterCriteriaTestFactory.create()).limit(1).offset(0)
.build();
var result = repository.searchBy(request);
assertThat(result.getTotalElements()).isEqualTo(3);
}
private Vorgang buildWithEingangsKennzeichen(String eingangskennzeichen) {
return buildWithEingangsKennzeichen(eingangskennzeichen, Status.NEU);
}
@Nested
class TestWithFilterByOrganisationseinheit {
@ParameterizedTest
@EnumSource
void shouldFindInAnyStatus(Status status) {
mongoOperations.save(buildWithEingangsKennzeichen(EINGANGSKENNZEICHEN, status));
mongoOperations.save(buildWithEingangsKennzeichen(NO_DEFAULT_MATCH, status));
mongoOperations.save(buildWithEingangsKennzeichenAndOrganisationseinheitenId(NO_DEFAULT_MATCH, NO_DEFAULT_MATCH, status));
var request = FindVorgangRequestTestFactory.createBuilder()
.searchBy(EINGANGSKENNZEICHEN).filterBy(FilterCriteriaTestFactory.createBuilder().clearStatus().assignedTo(null).build())
.build();
var result = repository.searchBy(request).getContent();
assertThat(result).hasSize(1);
}
}
private Vorgang buildWithEingangsKennzeichen(String kennz, Status status) {
var header = EingangHeaderTestFactory.createBuilder().requestId(kennz).build();
var eingang = EingangTestFactory.createBuilder().header(header).build();
return VorgangTestFactory.createBuilder().id(null).status(status).clearEingangs().eingang(eingang).build();
}
private Vorgang buildWithEingangsKennzeichenAndOrganisationseinheitenId(String kennz, String organisationseinheitenId, Status status) {
var header = EingangHeaderTestFactory.createBuilder().requestId(kennz).build();
var zustaendigeStelle = ZustaendigeStelleTestFactory.createBuilder().organisationseinheitenId(organisationseinheitenId)
.build();
var eingang = EingangTestFactory.createBuilder().header(header).zustaendigeStelle(zustaendigeStelle).build();
return VorgangTestFactory.createBuilder().id(null).status(status).clearEingangs().eingang(eingang).build();
}
}
@Nested
class TestSortByPriority {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment