diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/WidgetSuggestionHelper.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/WidgetSuggestionHelper.java index 18bf7b5bf5..f3b9134150 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/WidgetSuggestionHelper.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/WidgetSuggestionHelper.java @@ -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); + } } } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ActionServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ActionServiceTest.java index 3849dc0cd0..95dab86748 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ActionServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ActionServiceTest.java @@ -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 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))); + + } + }