Skip to content

Commit

Permalink
fix(registrar): getApplicationsPage now returns only one application …
Browse files Browse the repository at this point in the history
…entry even if an application has multiple form data items.

* edited the SQL query to prevent duplicates
* wrote a test to cover this issue
  • Loading branch information
xflord committed Feb 28, 2022
1 parent f27ecf4 commit 4dbc97a
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2105,6 +2105,8 @@ public Paginated<RichApplication> getApplicationsPage(PerunSession userSession,
(query.getGroupId() == null ? "" : " AND a.group_id=(:groupId)") +
" AND (:dateFrom) <= a.created_at::date AND a.created_at::date <= (:dateTo)" +
searchQuery +
// group by to remove duplicates from application_data join
APP_PAGE_GROUP_BY +
" ORDER BY " + query.getSortColumn().getSqlOrderBy(query) +
" OFFSET (:offset)" +
" LIMIT (:limit)"
Expand Down Expand Up @@ -4613,6 +4615,10 @@ private static ResultSetExtractor<Paginated<RichApplication>> getPaginatedApplic
"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";

static final String APP_PAGE_GROUP_BY = " GROUP BY a.id, a.vo_id, a.group_id, a.apptype, a.fed_info, a.state, a.user_id, a.extsourcename, a.extsourcetype, a.extsourceloa, a.user_id, a.created_at, a.created_by, a.modified_at, a.modified_by," +
" v.name, v.short_name, v.created_by, v.created_at, v.created_by_uid, v.modified_by, v.modified_at, v.modified_by_uid, g.name, g.dsc, g.created_by, g.created_at, g.modified_by, g.created_by_uid, g.modified_by_uid, g.modified_at, g.vo_id, " +
"g.parent_group_id, g.uu_id, u.first_name, u.last_name, u.middle_name, u.title_before, u.title_after, u.service_acc, u.sponsored_acc, u.uu_id";

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

private static final String FORM_SELECT = "select id,vo_id,group_id,automatic_approval,automatic_approval_extension,automatic_approval_embedded,module_name from application_form";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1144,6 +1144,44 @@ public void getApplicationsPageApplicationFormSearch() throws Exception {
assertThat(result.getData().get(0).getFormData().size()).isEqualTo(2);
}

@Test
public void getApplicationsPageMultipleFormItems() throws Exception {
System.out.println("getApplicationsPageMultipleFormItems");

ApplicationForm form = registrarManager.getFormForVo(vo);
Group group1 = setUpGroup("Group1", "Cool folks");
User user1 = setUpUser("Joe", "Doe");

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");

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

testItem2 = registrarManager.addFormItem(session, form, testItem2);
registrarManager.updateFormItems(session, form, Collections.singletonList(testItem2));
ApplicationFormItemData testData2 = new ApplicationFormItemData(testItem2, "test2", "banana", "0");

List<ApplicationFormItemData> appItemsData = new ArrayList<>();
appItemsData.add(testData);
appItemsData.add(testData2);

Application application1 = setUpApplicationGroupWithData(user1, group1, appItemsData);

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

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

assertEquals(1, result.getData().size());
}

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

Expand Down

0 comments on commit 4dbc97a

Please sign in to comment.