fix: Expose actions with collections in view mode (#8509)
* fix: Expose actions with collections in view mode * Dummy commit for tests to pass * Test fixes
This commit is contained in:
parent
23dbc6c6d7
commit
1cefa7e51b
|
|
@ -3,6 +3,7 @@ package com.appsmith.server.controllers;
|
||||||
import com.appsmith.server.constants.Url;
|
import com.appsmith.server.constants.Url;
|
||||||
import com.appsmith.server.dtos.ActionCollectionDTO;
|
import com.appsmith.server.dtos.ActionCollectionDTO;
|
||||||
import com.appsmith.server.dtos.ActionCollectionMoveDTO;
|
import com.appsmith.server.dtos.ActionCollectionMoveDTO;
|
||||||
|
import com.appsmith.server.dtos.ActionCollectionViewDTO;
|
||||||
import com.appsmith.server.dtos.LayoutDTO;
|
import com.appsmith.server.dtos.LayoutDTO;
|
||||||
import com.appsmith.server.dtos.RefactorActionCollectionNameDTO;
|
import com.appsmith.server.dtos.RefactorActionCollectionNameDTO;
|
||||||
import com.appsmith.server.dtos.RefactorActionNameInCollectionDTO;
|
import com.appsmith.server.dtos.RefactorActionNameInCollectionDTO;
|
||||||
|
|
@ -72,9 +73,9 @@ public class ActionCollectionController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/view")
|
@GetMapping("/view")
|
||||||
public Mono<ResponseDTO<List<ActionCollectionDTO>>> getAllPublishedActionCollections(@RequestParam MultiValueMap<String, String> params) {
|
public Mono<ResponseDTO<List<ActionCollectionViewDTO>>> getAllPublishedActionCollections(@RequestParam String applicationId) {
|
||||||
log.debug("Going to get all published action collections with params : {}", params);
|
log.debug("Going to get all published action collections with application Id : {}", applicationId);
|
||||||
return actionCollectionService.getPopulatedActionCollectionsByViewMode(params, true)
|
return actionCollectionService.getActionCollectionsForViewMode(applicationId)
|
||||||
.collectList()
|
.collectList()
|
||||||
.map(resources -> new ResponseDTO<>(HttpStatus.OK.value(), resources, null));
|
.map(resources -> new ResponseDTO<>(HttpStatus.OK.value(), resources, null));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.appsmith.server.dtos;
|
||||||
|
|
||||||
|
import com.appsmith.external.models.JSValue;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ToString
|
||||||
|
public class ActionCollectionViewDTO {
|
||||||
|
String id;
|
||||||
|
String name;
|
||||||
|
String pageId;
|
||||||
|
String applicationId;
|
||||||
|
List<JSValue> variables;
|
||||||
|
List<ActionDTO> actions;
|
||||||
|
}
|
||||||
|
|
@ -4,6 +4,7 @@ import com.appsmith.server.acl.AclPermission;
|
||||||
import com.appsmith.server.domains.ActionCollection;
|
import com.appsmith.server.domains.ActionCollection;
|
||||||
import com.appsmith.server.domains.NewPage;
|
import com.appsmith.server.domains.NewPage;
|
||||||
import com.appsmith.server.dtos.ActionCollectionDTO;
|
import com.appsmith.server.dtos.ActionCollectionDTO;
|
||||||
|
import com.appsmith.server.dtos.ActionCollectionViewDTO;
|
||||||
import com.appsmith.server.dtos.ActionDTO;
|
import com.appsmith.server.dtos.ActionDTO;
|
||||||
import org.springframework.data.domain.Sort;
|
import org.springframework.data.domain.Sort;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
|
|
@ -41,4 +42,5 @@ public interface ActionCollectionService extends CrudService<ActionCollection, S
|
||||||
|
|
||||||
Flux<ActionCollection> findByPageId(String pageId, AclPermission permission);
|
Flux<ActionCollection> findByPageId(String pageId, AclPermission permission);
|
||||||
|
|
||||||
|
Flux<ActionCollectionViewDTO> getActionCollectionsForViewMode(String applicationId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import com.appsmith.server.domains.ActionCollection;
|
||||||
import com.appsmith.server.domains.NewPage;
|
import com.appsmith.server.domains.NewPage;
|
||||||
import com.appsmith.server.domains.Page;
|
import com.appsmith.server.domains.Page;
|
||||||
import com.appsmith.server.dtos.ActionCollectionDTO;
|
import com.appsmith.server.dtos.ActionCollectionDTO;
|
||||||
|
import com.appsmith.server.dtos.ActionCollectionViewDTO;
|
||||||
import com.appsmith.server.dtos.ActionDTO;
|
import com.appsmith.server.dtos.ActionDTO;
|
||||||
import com.appsmith.server.exceptions.AppsmithError;
|
import com.appsmith.server.exceptions.AppsmithError;
|
||||||
import com.appsmith.server.exceptions.AppsmithException;
|
import com.appsmith.server.exceptions.AppsmithException;
|
||||||
|
|
@ -33,6 +34,7 @@ import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.appsmith.external.helpers.BeanCopyUtils.copyNewFieldValuesIntoOldObject;
|
import static com.appsmith.external.helpers.BeanCopyUtils.copyNewFieldValuesIntoOldObject;
|
||||||
|
import static com.appsmith.server.acl.AclPermission.EXECUTE_ACTIONS;
|
||||||
import static com.appsmith.server.acl.AclPermission.MANAGE_ACTIONS;
|
import static com.appsmith.server.acl.AclPermission.MANAGE_ACTIONS;
|
||||||
import static com.appsmith.server.acl.AclPermission.READ_ACTIONS;
|
import static com.appsmith.server.acl.AclPermission.READ_ACTIONS;
|
||||||
import static java.lang.Boolean.TRUE;
|
import static java.lang.Boolean.TRUE;
|
||||||
|
|
@ -146,6 +148,34 @@ public class ActionCollectionServiceImpl extends BaseService<ActionCollectionRep
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Flux<ActionCollectionViewDTO> getActionCollectionsForViewMode(String applicationId) {
|
||||||
|
if (applicationId == null || applicationId.isEmpty()) {
|
||||||
|
return Flux.error(new AppsmithException(AppsmithError.INVALID_PARAMETER, FieldName.APPLICATION_ID));
|
||||||
|
}
|
||||||
|
|
||||||
|
return repository
|
||||||
|
.findByApplicationIdAndViewMode(applicationId, true, EXECUTE_ACTIONS)
|
||||||
|
.flatMap(actionCollection -> {
|
||||||
|
ActionCollectionViewDTO actionCollectionViewDTO = new ActionCollectionViewDTO();
|
||||||
|
final ActionCollectionDTO publishedCollection = actionCollection.getPublishedCollection();
|
||||||
|
actionCollectionViewDTO.setId(actionCollection.getId());
|
||||||
|
actionCollectionViewDTO.setName(publishedCollection.getName());
|
||||||
|
actionCollectionViewDTO.setPageId(publishedCollection.getPageId());
|
||||||
|
actionCollectionViewDTO.setApplicationId(actionCollection.getApplicationId());
|
||||||
|
actionCollectionViewDTO.setVariables(publishedCollection.getVariables());
|
||||||
|
return Flux.fromIterable(publishedCollection.getActionIds())
|
||||||
|
.flatMap(actionId -> {
|
||||||
|
return newActionService.findActionDTObyIdAndViewMode(actionId, true, EXECUTE_ACTIONS);
|
||||||
|
})
|
||||||
|
.collectList()
|
||||||
|
.map(actionDTOList -> {
|
||||||
|
actionCollectionViewDTO.setActions(actionDTOList);
|
||||||
|
return actionCollectionViewDTO;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Flux<ActionCollectionDTO> getActionCollectionsByViewMode(MultiValueMap<String, String> params, Boolean viewMode) {
|
public Flux<ActionCollectionDTO> getActionCollectionsByViewMode(MultiValueMap<String, String> params, Boolean viewMode) {
|
||||||
if (params == null || viewMode == null) {
|
if (params == null || viewMode == null) {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package com.appsmith.server.services;
|
||||||
|
|
||||||
import com.appsmith.external.models.ActionConfiguration;
|
import com.appsmith.external.models.ActionConfiguration;
|
||||||
import com.appsmith.external.models.Datasource;
|
import com.appsmith.external.models.Datasource;
|
||||||
|
import com.appsmith.external.models.JSValue;
|
||||||
import com.appsmith.external.models.Policy;
|
import com.appsmith.external.models.Policy;
|
||||||
import com.appsmith.external.plugins.PluginExecutor;
|
import com.appsmith.external.plugins.PluginExecutor;
|
||||||
import com.appsmith.server.acl.AclPermission;
|
import com.appsmith.server.acl.AclPermission;
|
||||||
|
|
@ -16,6 +17,7 @@ import com.appsmith.server.domains.PluginType;
|
||||||
import com.appsmith.server.domains.User;
|
import com.appsmith.server.domains.User;
|
||||||
import com.appsmith.server.domains.UserRole;
|
import com.appsmith.server.domains.UserRole;
|
||||||
import com.appsmith.server.dtos.ActionCollectionDTO;
|
import com.appsmith.server.dtos.ActionCollectionDTO;
|
||||||
|
import com.appsmith.server.dtos.ActionCollectionViewDTO;
|
||||||
import com.appsmith.server.dtos.ActionDTO;
|
import com.appsmith.server.dtos.ActionDTO;
|
||||||
import com.appsmith.server.dtos.LayoutDTO;
|
import com.appsmith.server.dtos.LayoutDTO;
|
||||||
import com.appsmith.server.dtos.PageDTO;
|
import com.appsmith.server.dtos.PageDTO;
|
||||||
|
|
@ -412,4 +414,64 @@ public class ActionCollectionServiceTest {
|
||||||
})
|
})
|
||||||
.verifyComplete();
|
.verifyComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* For a given collection testCollection1, that refers to another action testCollection1.testAction1,
|
||||||
|
* When the page with this collection is published,
|
||||||
|
* Then the view mode collection should contain actions and variables
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@WithUserDetails(value = "api_user")
|
||||||
|
public void testActionCollectionInViewMode() {
|
||||||
|
Mockito.when(pluginExecutorHelper.getPluginExecutor(Mockito.any())).thenReturn(Mono.just(pluginExecutor));
|
||||||
|
Mockito.when(pluginExecutor.getHintMessages(Mockito.any(), Mockito.any()))
|
||||||
|
.thenReturn(Mono.zip(Mono.just(new HashSet<>()), Mono.just(new HashSet<>())));
|
||||||
|
|
||||||
|
ActionCollectionDTO actionCollectionDTO = new ActionCollectionDTO();
|
||||||
|
actionCollectionDTO.setName("testCollection1");
|
||||||
|
actionCollectionDTO.setPageId(testPage.getId());
|
||||||
|
actionCollectionDTO.setApplicationId(testApp.getId());
|
||||||
|
actionCollectionDTO.setOrganizationId(orgId);
|
||||||
|
actionCollectionDTO.setPluginId(datasource.getPluginId());
|
||||||
|
actionCollectionDTO.setVariables(List.of(new JSValue("test", "String", "test", true)));
|
||||||
|
ActionDTO action1 = new ActionDTO();
|
||||||
|
action1.setName("testAction1");
|
||||||
|
action1.setActionConfiguration(new ActionConfiguration());
|
||||||
|
action1.getActionConfiguration().setBody("mockBody");
|
||||||
|
actionCollectionDTO.setActions(List.of(action1));
|
||||||
|
actionCollectionDTO.setPluginType(PluginType.JS);
|
||||||
|
|
||||||
|
final ActionCollectionDTO createdActionCollectionDTO = layoutCollectionService.createCollection(actionCollectionDTO).block();
|
||||||
|
assert createdActionCollectionDTO != null;
|
||||||
|
|
||||||
|
final Mono<List<ActionCollectionViewDTO>> viewModeCollectionsMono = applicationPageService.publish(testApp.getId(), true)
|
||||||
|
.thenMany(actionCollectionService.getActionCollectionsForViewMode(testApp.getId()))
|
||||||
|
.collectList();
|
||||||
|
|
||||||
|
StepVerifier.create(viewModeCollectionsMono)
|
||||||
|
.assertNext(viewModeCollections -> {
|
||||||
|
assertThat(viewModeCollections.size()).isEqualTo(1);
|
||||||
|
|
||||||
|
final ActionCollectionViewDTO actionCollectionViewDTO = viewModeCollections.get(0);
|
||||||
|
|
||||||
|
// Actions
|
||||||
|
final List<ActionDTO> actions = actionCollectionViewDTO.getActions();
|
||||||
|
assertThat(actions.size()).isEqualTo(1);
|
||||||
|
assertThat(actions.get(0).getActionConfiguration().getBody()).isEqualTo("mockBody");
|
||||||
|
|
||||||
|
// Variables
|
||||||
|
final List<JSValue> variables = actionCollectionViewDTO.getVariables();
|
||||||
|
assertThat(variables.size()).isEqualTo(1);
|
||||||
|
assertThat(variables.get(0).getValue()).isEqualTo("test");
|
||||||
|
|
||||||
|
// Metadata
|
||||||
|
assertThat(actionCollectionViewDTO.getId()).isEqualTo(createdActionCollectionDTO.getId());
|
||||||
|
assertThat(actionCollectionViewDTO.getName()).isEqualTo("testCollection1");
|
||||||
|
assertThat(actionCollectionViewDTO.getApplicationId()).isEqualTo(testApp.getId());
|
||||||
|
assertThat(actionCollectionViewDTO.getPageId()).isEqualTo(testPage.getId());
|
||||||
|
|
||||||
|
})
|
||||||
|
.verifyComplete();
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user