Skip to content

Commit

Permalink
feat(registrar): make searchString in applications page search in app…
Browse files Browse the repository at this point in the history
…lication_data table as well
  • Loading branch information
xflord committed Feb 16, 2022
1 parent 472c814 commit fb8a2d1
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 2 deletions.
12 changes: 12 additions & 0 deletions perun-core/src/main/java/cz/metacentrum/perun/core/impl/Utils.java
Original file line number Diff line number Diff line change
Expand Up @@ -2123,6 +2123,15 @@ public static String prepareGroupNameDscAppsSearchQuerySimilarMatch() {
return "(strpos(lower("+Compatibility.convertToAscii("COALESCE(g.name,'') || COALESCE(g.dsc,'')")+"), lower(" + Compatibility.convertToAscii(":searchString") + ")) > 0)";
}

/**
* Returns search query to search by application's form data values based on databased in use.
*
* @return search query
*/
public static String prepareApplicationDataSearchQuerySimilarMatch() {
return "(strpos(lower("+Compatibility.convertToAscii("COALESCE(d.value,'')")+"), lower(" + Compatibility.convertToAscii(":searchString") + ")) > 0)";
}

/**
* Returns a part of WHERE condition to search groups in their ids, uuids, names and descriptions
* by given search string.
Expand Down Expand Up @@ -2208,13 +2217,16 @@ public static String prepareSqlWhereForApplicationsSearch(String searchString, M

String groupNameDscQueryString = prepareGroupNameDscAppsSearchQuerySimilarMatch();
String usernameQueryString = prepareUsernameSearchQuerySimilarMatch();
String appdataQueryString = prepareApplicationDataSearchQuerySimilarMatch();
namedParams.addValue("searchString", searchString);

return
"(" +
groupNameDscQueryString +
" OR " +
usernameQueryString +
" OR " +
appdataQueryString +
appIdQueryString +
groupIdQueryString +
uuidQueryString +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4572,7 +4572,8 @@ private static ResultSetExtractor<Paginated<Application>> getPaginatedApplicatio
"v.name as vo_name, v.short_name as vo_short_name, v.created_by as vo_created_by, v.created_at as vo_created_at, v.created_by_uid as vo_created_by_uid, v.modified_by as vo_modified_by, " +
"v.modified_at as vo_modified_at, v.modified_by_uid as vo_modified_by_uid, g.name as group_name, g.dsc as group_description, g.created_by as group_created_by, g.created_at as group_created_at, g.modified_by as group_modified_by, g.created_by_uid as group_created_by_uid, g.modified_by_uid as group_modified_by_uid," +
"g.modified_at as group_modified_at, g.vo_id as group_vo_id, g.parent_group_id as group_parent_group_id, g.uu_id as group_uu_id, u.first_name as user_first_name, u.last_name as user_last_name, u.middle_name as user_middle_name, " +
"u.title_before as user_title_before, u.title_after as user_title_after, u.service_acc as user_service_acc, u.sponsored_acc as user_sponsored_acc , u.uu_id as user_uu_id, count(*) OVER() AS total_count from application a left outer join vos v on a.vo_id = v.id left outer join groups g on a.group_id = g.id left outer join users u on a.user_id = u.id";
"u.title_before as user_title_before, u.title_after as user_title_after, u.service_acc as user_service_acc, u.sponsored_acc as user_sponsored_acc , u.uu_id as user_uu_id, count(*) OVER() AS total_count from application a" +
" left outer join vos v on a.vo_id = v.id left outer join groups g on a.group_id = g.id left outer join users u on a.user_id = u.id left outer join application_data d on a.id = d.app_id";

private static final String APP_TYPE_SELECT = "select apptype from application_form_item_apptypes";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1092,6 +1092,44 @@ public void getApplicationsPageForUserIsNotMember() throws Exception {
assertEquals(0, result.getData().size());
}

@Test
public void getApplicationsPageApplicationFormSearch() throws Exception {
System.out.println("getApplicationsPageApplicationFormSearch");
ApplicationForm form = registrarManager.getFormForVo(vo);


Group group1 = setUpGroup("Group1", "Cool folks");
Group group2 = setUpGroup("Group2", "Cooler folks");

User user1 = setUpUser("Joe", "Doe");
User user2 = setUpUser("Barney", "Stinson");

// set up application


ApplicationFormItem testItem = new ApplicationFormItem();
testItem.setType(ApplicationFormItem.Type.TEXTFIELD);
testItem.setShortname("testItem");

testItem = registrarManager.addFormItem(session, form, testItem);
registrarManager.updateFormItems(session, form, Collections.singletonList(testItem));
ApplicationFormItemData testData = new ApplicationFormItemData(testItem, "test", "testval", "0");
List<ApplicationFormItemData> appItemsData = new ArrayList<>();
appItemsData.add(testData);

Application application1 = setUpApplicationGroupWithData(user1, group1, appItemsData);
Application application2 = setUpApplicationGroup(user2, group2);

ApplicationsPageQuery query = new ApplicationsPageQuery(4, 0, SortingOrder.DESCENDING, ApplicationsOrderColumn.STATE, "testval", List.of(Application.AppState.VERIFIED, Application.AppState.APPROVED), true);

Paginated<Application> result = registrarManager.getApplicationsPage(session, vo, query);

List<User> returnedIds = result.getData().stream()
.map(Application::getUser).toList();

assertThat(returnedIds).containsOnly(user1);
}

private Group setUpGroup(String name, String desc) throws Exception {
GroupsManager groupsManager = perun.getGroupsManager();

Expand Down Expand Up @@ -1126,6 +1164,15 @@ private Application setUpApplicationGroup(User user, Group group) throws PerunEx

return voApplication;
}
private Application setUpApplicationGroupWithData(User user, Group group, List<ApplicationFormItemData> data) throws PerunException {
Application voApplication = prepareApplicationToVo(user);
Application groupApplication = prepareApplicationToGroup(user, group);
voApplication = registrarManager.submitApplication(session, voApplication, data);
registrarManager.submitApplication(session, groupApplication, data);
registrarManager.approveApplication(session, voApplication.getId());

return voApplication;
}

@Test
public void testAddFormItem_multipleEmbeddedGroupsItems() throws PerunException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@
$objectExamples{"List&lt;RichGroup&gt;"} = $listPrepend . $objectExamples{"RichGroup"} . $listAppend;
$objectExamples{"List<RichGroup>"} = $objectExamples{"List&lt;RichGroup&gt;"};

$objectExamples{"Application} = "{ \"id\" : 12 , \"vo\" : ". $objectExamples{"Vo"} . " , \"type\" : \"INITIAL\" , \"fedInfo\" : \"\" , \"state\" : \"NEW\" , \"extSourceName\" : \"PERUNPEOPLE\" , \"extSourceType\" : \"cz.metacentrum.perun.core.impl.ExtSourceSql\" , \"user\" : " . $objectExamples{"User"} . ", \"beanName\" : \"Application\" }";
$objectExamples{"Application"} = "{ \"id\" : 12 , \"vo\" : ". $objectExamples{"Vo"} . " , \"type\" : \"INITIAL\" , \"fedInfo\" : \"\" , \"state\" : \"NEW\" , \"extSourceName\" : \"PERUNPEOPLE\" , \"extSourceType\" : \"cz.metacentrum.perun.core.impl.ExtSourceSql\" , \"user\" : " . $objectExamples{"User"} . ", \"beanName\" : \"Application\" }";
$objectExamples{"List&lt;Application&gt;"} = $listPrepend . $objectExamples{"Application"} . $listAppend;
$objectExamples{"List<Application>"} = $objectExamples{"List&lt;Application&gt;"};

Expand Down

0 comments on commit fb8a2d1

Please sign in to comment.