Add null check for the nested data structure (#6479)

* Add null check for the nested data structure

* Add unit test for the null nested data
This commit is contained in:
Anagh Hegde 2021-08-09 19:24:19 +05:30 committed by GitHub
parent f4d4199183
commit e2284e4199
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 2 deletions

View File

@ -87,8 +87,12 @@ public class WidgetSuggestionHelper {
widgetTypeList.add(getWidget(WidgetType.TEXT_WIDGET));
} else {
String nestedFieldName = objectFields.get(0);
collectFieldsFromData(node.get(nestedFieldName).get(0).fields());
widgetTypeList = getWidgetsForTypeNestedObject(nestedFieldName);
if(node.get(nestedFieldName).size() == 0) {
widgetTypeList.add(getWidget(WidgetType.TEXT_WIDGET));
} else {
collectFieldsFromData(node.get(nestedFieldName).get(0).fields());
widgetTypeList = getWidgetsForTypeNestedObject(nestedFieldName);
}
}
}

View File

@ -2061,4 +2061,47 @@ public class ActionServiceTest {
}
@Test
@WithUserDetails(value = "api_user")
public void testWidgetSuggestionNestedData() throws JsonProcessingException {
Mockito.when(pluginExecutorHelper.getPluginExecutor(Mockito.any())).thenReturn(Mono.just(pluginExecutor));
ActionExecutionResult mockResult = new ActionExecutionResult();
final String data = "{\"data\": {\n" +
" \"next\": \"https://mock-api.appsmith.com/users?page=2&pageSize=10\",\n" +
" \"previous\": null,\n" +
" \"users\": []\n" +
"}}";
final JsonNode arrNode = new ObjectMapper().readTree(data).get("data");;
mockResult.setIsExecutionSuccess(true);
mockResult.setBody(arrNode);
mockResult.setStatusCode("200");
mockResult.setHeaders(objectMapper.valueToTree(Map.of("response-header-key", "response-header-value")));
mockResult.setDataTypes(List.of(new ParsedDataType(DisplayDataType.RAW)));
List<WidgetSuggestionDTO> widgetTypeList = new ArrayList<>();
widgetTypeList.add(WidgetSuggestionHelper.getWidgetNestedData(WidgetType.TEXT_WIDGET,"users"));
mockResult.setSuggestedWidgets(widgetTypeList);
ActionDTO action = new ActionDTO();
ActionConfiguration actionConfiguration = new ActionConfiguration();
actionConfiguration.setHttpMethod(HttpMethod.POST);
actionConfiguration.setBody("random-request-body");
actionConfiguration.setHeaders(List.of(new Property("random-header-key", "random-header-value")));
action.setActionConfiguration(actionConfiguration);
action.setPageId(testPage.getId());
action.setName("testActionExecute");
action.setDatasource(datasource);
ActionDTO createdAction = layoutActionService.createAction(action).block();
ExecuteActionDTO executeActionDTO = new ExecuteActionDTO();
executeActionDTO.setActionId(createdAction.getId());
executeActionDTO.setViewMode(false);
executeAndAssertAction(executeActionDTO, actionConfiguration, mockResult,
List.of(new ParsedDataType(DisplayDataType.RAW)));
}
}