FINERACT-1724: Client search V2 API

This commit is contained in:
Arnold Galovics
2023-05-23 13:41:30 +02:00
committed by Arnold Gálovics
parent c18fead7f3
commit 68c6053bd7
31 changed files with 1473 additions and 6 deletions
@@ -0,0 +1,196 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.fineract.integrationtests.client;
import static org.assertj.core.api.Assertions.assertThat;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.builder.ResponseSpecBuilder;
import io.restassured.http.ContentType;
import io.restassured.specification.RequestSpecification;
import io.restassured.specification.ResponseSpecification;
import org.apache.fineract.client.models.GetClientsClientIdResponse;
import org.apache.fineract.client.models.PageClientSearchData;
import org.apache.fineract.client.models.PostClientsRequest;
import org.apache.fineract.client.models.PostClientsResponse;
import org.apache.fineract.client.models.SortOrder;
import org.apache.fineract.integrationtests.common.ClientHelper;
import org.apache.fineract.integrationtests.common.Utils;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class ClientSearchTest {
private ResponseSpecification responseSpec;
private RequestSpecification requestSpec;
private ClientHelper clientHelper;
@BeforeEach
public void setup() {
Utils.initializeRESTAssured();
requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build();
requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey());
responseSpec = new ResponseSpecBuilder().expectStatusCode(200).build();
clientHelper = new ClientHelper(requestSpec, responseSpec);
}
@Test
public void testClientSearchWorks_WithLastnameTextOnDefaultOrdering() {
// given
String lastname = Utils.randomStringGenerator("Client_LastName_", 5);
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
request1.setLastname(lastname);
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
request2.setLastname(lastname);
clientHelper.createClient(request2);
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
request3.setLastname(lastname);
clientHelper.createClient(request3);
// when
PageClientSearchData result = clientHelper.searchClients(lastname);
// then
assertThat(result.getTotalElements()).isEqualTo(3);
assertThat(result.getContent().get(0).getExternalId().getValue()).isEqualTo(request3.getExternalId());
assertThat(result.getContent().get(1).getExternalId().getValue()).isEqualTo(request2.getExternalId());
assertThat(result.getContent().get(2).getExternalId().getValue()).isEqualTo(request1.getExternalId());
}
@Test
public void testClientSearchWorks_WithLastnameText_OrderedByIdAsc() {
// given
String lastname = Utils.randomStringGenerator("Client_LastName_", 5);
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
request1.setLastname(lastname);
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
request2.setLastname(lastname);
clientHelper.createClient(request2);
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
request3.setLastname(lastname);
clientHelper.createClient(request3);
SortOrder sortOrder = new SortOrder().property("id").direction(SortOrder.DirectionEnum.ASC);
// when
PageClientSearchData result = clientHelper.searchClients(lastname, sortOrder);
// then
assertThat(result.getTotalElements()).isEqualTo(3);
assertThat(result.getContent().get(0).getExternalId().getValue()).isEqualTo(request1.getExternalId());
assertThat(result.getContent().get(1).getExternalId().getValue()).isEqualTo(request2.getExternalId());
assertThat(result.getContent().get(2).getExternalId().getValue()).isEqualTo(request3.getExternalId());
}
@Test
public void testClientSearchWorks_ByExternalId() {
// given
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request2);
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request3);
// when
PageClientSearchData result = clientHelper.searchClients(request2.getExternalId());
// then
assertThat(result.getTotalElements()).isEqualTo(1);
assertThat(result.getContent().get(0).getExternalId().getValue()).isEqualTo(request2.getExternalId());
}
@Test
public void testClientSearchWorks_ByAccountNumber() {
// given
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
PostClientsResponse response2 = clientHelper.createClient(request2);
GetClientsClientIdResponse client2Data = ClientHelper.getClient(requestSpec, responseSpec,
Math.toIntExact(response2.getClientId()));
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request3);
// when
PageClientSearchData result = clientHelper.searchClients(client2Data.getAccountNo());
// then
assertThat(result.getTotalElements()).isEqualTo(1);
assertThat(result.getContent().get(0).getAccountNo()).isEqualTo(client2Data.getAccountNo());
}
@Test
public void testClientSearchWorks_ByDisplayName() {
// given
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request2);
String client2DisplayName = "%s %s".formatted(request2.getFirstname(), request2.getLastname());
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request3);
// when
PageClientSearchData result = clientHelper.searchClients(client2DisplayName);
// then
assertThat(result.getTotalElements()).isEqualTo(1);
assertThat(result.getContent().get(0).getDisplayName()).isEqualTo(client2DisplayName);
}
@Test
public void testClientSearchWorks_ByMobileNo() {
// given
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
request2.setMobileNo(Utils.randomNumberGenerator(8).toString());
clientHelper.createClient(request2);
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request3);
// when
PageClientSearchData result = clientHelper.searchClients(request2.getMobileNo());
// then
assertThat(result.getTotalElements()).isEqualTo(1);
assertThat(result.getContent().get(0).getMobileNo()).isEqualTo(request2.getMobileNo());
}
@Test
public void testClientSearchDoesntReturnAnything_ByMobileNo() {
// given
PostClientsRequest request1 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request1);
PostClientsRequest request2 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request2);
PostClientsRequest request3 = ClientHelper.defaultClientCreationRequest();
clientHelper.createClient(request3);
// when
PageClientSearchData result = clientHelper.searchClients(Utils.randomNumberGenerator(8).toString());
// then
assertThat(result.getTotalElements()).isEqualTo(0);
assertThat(result.getContent()).isEmpty();
}
}
@@ -38,18 +38,22 @@ import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.fineract.client.models.ClientTextSearch;
import org.apache.fineract.client.models.DeleteClientsClientIdResponse;
import org.apache.fineract.client.models.GetClientClientIdAddressesResponse;
import org.apache.fineract.client.models.GetClientTransferProposalDateResponse;
import org.apache.fineract.client.models.GetClientsClientIdAccountsResponse;
import org.apache.fineract.client.models.GetClientsClientIdResponse;
import org.apache.fineract.client.models.GetObligeeData;
import org.apache.fineract.client.models.PageClientSearchData;
import org.apache.fineract.client.models.PagedRequestClientTextSearch;
import org.apache.fineract.client.models.PostClientClientIdAddressesRequest;
import org.apache.fineract.client.models.PostClientClientIdAddressesResponse;
import org.apache.fineract.client.models.PostClientsClientIdResponse;
import org.apache.fineract.client.models.PostClientsRequest;
import org.apache.fineract.client.models.PostClientsResponse;
import org.apache.fineract.client.models.PutClientsClientIdResponse;
import org.apache.fineract.client.models.SortOrder;
import org.apache.fineract.client.util.JSON;
import org.apache.fineract.infrastructure.bulkimport.data.GlobalEntityType;
import org.apache.fineract.integrationtests.client.IntegrationTest;
@@ -97,6 +101,27 @@ public class ClientHelper extends IntegrationTest {
return ok(fineract().clients.create6(request));
}
public PageClientSearchData searchClients(String text) {
ClientTextSearch clientTextSearch = new ClientTextSearch();
clientTextSearch.setText(text);
PagedRequestClientTextSearch request = new PagedRequestClientTextSearch();
request.setRequest(clientTextSearch);
return searchClients(request);
}
public PageClientSearchData searchClients(String text, SortOrder sortOrder) {
ClientTextSearch clientTextSearch = new ClientTextSearch();
clientTextSearch.setText(text);
PagedRequestClientTextSearch request = new PagedRequestClientTextSearch();
request.setRequest(clientTextSearch);
request.setSorts(List.of(sortOrder));
return searchClients(request);
}
public PageClientSearchData searchClients(PagedRequestClientTextSearch request) {
return ok(fineract().clientSearchV2.searchByText(request));
}
public static PostClientsResponse addClientAsPerson(final RequestSpecification requestSpec, final ResponseSpecification responseSpec,
final String jsonPayload) {
final String response = Utils.performServerPost(requestSpec, responseSpec, CREATE_CLIENT_URL, jsonPayload);