Added validation for refactor name (#6165)
This commit is contained in:
parent
b35b3c84e9
commit
2cb1aa3de1
|
|
@ -166,7 +166,13 @@ public class LayoutActionServiceImpl implements LayoutActionService {
|
||||||
String oldName = refactorActionNameDTO.getOldName();
|
String oldName = refactorActionNameDTO.getOldName();
|
||||||
String newName = refactorActionNameDTO.getNewName();
|
String newName = refactorActionNameDTO.getNewName();
|
||||||
String actionId = refactorActionNameDTO.getActionId();
|
String actionId = refactorActionNameDTO.getActionId();
|
||||||
return isNameAllowed(pageId, layoutId, newName)
|
return Mono.just(newActionService.validateActionName(newName))
|
||||||
|
.flatMap(isValidName -> {
|
||||||
|
if (!isValidName) {
|
||||||
|
return Mono.error(new AppsmithException(AppsmithError.INVALID_ACTION_NAME));
|
||||||
|
}
|
||||||
|
return isNameAllowed(pageId, layoutId, newName);
|
||||||
|
})
|
||||||
.flatMap(allowed -> {
|
.flatMap(allowed -> {
|
||||||
if (!allowed) {
|
if (!allowed) {
|
||||||
return Mono.error(new AppsmithException(AppsmithError.NAME_CLASH_NOT_ALLOWED_IN_REFACTOR, oldName, newName));
|
return Mono.error(new AppsmithException(AppsmithError.NAME_CLASH_NOT_ALLOWED_IN_REFACTOR, oldName, newName));
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,8 @@ import java.util.Set;
|
||||||
|
|
||||||
public interface NewActionService extends CrudService<NewAction, String> {
|
public interface NewActionService extends CrudService<NewAction, String> {
|
||||||
|
|
||||||
|
Boolean validateActionName(String name);
|
||||||
|
|
||||||
void setCommonFieldsFromActionDTOIntoNewAction(ActionDTO action, NewAction newAction);
|
void setCommonFieldsFromActionDTOIntoNewAction(ActionDTO action, NewAction newAction);
|
||||||
|
|
||||||
Mono<ActionDTO> generateActionByViewMode(NewAction newAction, Boolean viewMode);
|
Mono<ActionDTO> generateActionByViewMode(NewAction newAction, Boolean viewMode);
|
||||||
|
|
|
||||||
|
|
@ -72,12 +72,12 @@ 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.external.helpers.DataTypeStringUtils.getDisplayDataTypes;
|
import static com.appsmith.external.helpers.DataTypeStringUtils.getDisplayDataTypes;
|
||||||
import static com.appsmith.server.helpers.WidgetSuggestionHelper.getSuggestedWidgets;
|
|
||||||
import static com.appsmith.server.acl.AclPermission.EXECUTE_ACTIONS;
|
import static com.appsmith.server.acl.AclPermission.EXECUTE_ACTIONS;
|
||||||
import static com.appsmith.server.acl.AclPermission.EXECUTE_DATASOURCES;
|
import static com.appsmith.server.acl.AclPermission.EXECUTE_DATASOURCES;
|
||||||
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.MANAGE_DATASOURCES;
|
import static com.appsmith.server.acl.AclPermission.MANAGE_DATASOURCES;
|
||||||
import static com.appsmith.server.acl.AclPermission.READ_ACTIONS;
|
import static com.appsmith.server.acl.AclPermission.READ_ACTIONS;
|
||||||
|
import static com.appsmith.server.helpers.WidgetSuggestionHelper.getSuggestedWidgets;
|
||||||
import static java.lang.Boolean.FALSE;
|
import static java.lang.Boolean.FALSE;
|
||||||
import static java.lang.Boolean.TRUE;
|
import static java.lang.Boolean.TRUE;
|
||||||
|
|
||||||
|
|
@ -132,7 +132,8 @@ public class NewActionServiceImpl extends BaseService<NewActionRepository, NewAc
|
||||||
this.objectMapper = new ObjectMapper();
|
this.objectMapper = new ObjectMapper();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Boolean validateActionName(String name) {
|
@Override
|
||||||
|
public Boolean validateActionName(String name) {
|
||||||
boolean isValidName = SourceVersion.isName(name);
|
boolean isValidName = SourceVersion.isName(name);
|
||||||
String pattern = "^((?=[A-Za-z0-9_])(?![\\\\-]).)*$";
|
String pattern = "^((?=[A-Za-z0-9_])(?![\\\\-]).)*$";
|
||||||
boolean doesPatternMatch = name.matches(pattern);
|
boolean doesPatternMatch = name.matches(pattern);
|
||||||
|
|
|
||||||
|
|
@ -324,6 +324,52 @@ public class LayoutActionServiceTest {
|
||||||
.verifyComplete();
|
.verifyComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithUserDetails(value = "api_user")
|
||||||
|
public void testRefactorActionName_withInvalidName_throwsError() {
|
||||||
|
Mockito.when(pluginExecutorHelper.getPluginExecutor(Mockito.any())).thenReturn(Mono.just(new MockPluginExecutor()));
|
||||||
|
|
||||||
|
ActionDTO action = new ActionDTO();
|
||||||
|
action.setName("beforeNameChange");
|
||||||
|
action.setPageId(testPage.getId());
|
||||||
|
ActionConfiguration actionConfiguration = new ActionConfiguration();
|
||||||
|
actionConfiguration.setHttpMethod(HttpMethod.GET);
|
||||||
|
action.setActionConfiguration(actionConfiguration);
|
||||||
|
action.setDatasource(datasource);
|
||||||
|
|
||||||
|
JSONObject dsl = new JSONObject();
|
||||||
|
dsl.put("widgetName", "firstWidget");
|
||||||
|
JSONArray temp = new JSONArray();
|
||||||
|
temp.addAll(List.of(new JSONObject(Map.of("key", "testField"))));
|
||||||
|
dsl.put("dynamicBindingPathList", temp);
|
||||||
|
dsl.put("testField", "{{ beforeNameChange.data }}");
|
||||||
|
|
||||||
|
Layout layout = testPage.getLayouts().get(0);
|
||||||
|
layout.setDsl(dsl);
|
||||||
|
layout.setPublishedDsl(dsl);
|
||||||
|
|
||||||
|
ActionDTO createdAction = layoutActionService.createAction(action).block();
|
||||||
|
|
||||||
|
LayoutDTO firstLayout = layoutActionService.updateLayout(testPage.getId(), layout.getId(), layout).block();
|
||||||
|
|
||||||
|
RefactorActionNameDTO refactorActionNameDTO = new RefactorActionNameDTO();
|
||||||
|
refactorActionNameDTO.setPageId(testPage.getId());
|
||||||
|
assert firstLayout != null;
|
||||||
|
refactorActionNameDTO.setLayoutId(firstLayout.getId());
|
||||||
|
refactorActionNameDTO.setOldName("beforeNameChange");
|
||||||
|
refactorActionNameDTO.setNewName("!PostNameChange");
|
||||||
|
assert createdAction != null;
|
||||||
|
refactorActionNameDTO.setActionId(createdAction.getId());
|
||||||
|
|
||||||
|
final Mono<LayoutDTO> layoutDTOMono = layoutActionService.refactorActionName(refactorActionNameDTO);
|
||||||
|
|
||||||
|
StepVerifier
|
||||||
|
.create(layoutDTOMono)
|
||||||
|
.expectErrorMatches(e -> e instanceof AppsmithException &&
|
||||||
|
AppsmithError.INVALID_ACTION_NAME.getMessage().equalsIgnoreCase(e.getMessage()))
|
||||||
|
.verify();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithUserDetails(value = "api_user")
|
@WithUserDetails(value = "api_user")
|
||||||
public void actionExecuteOnLoadChangeOnUpdateLayout() {
|
public void actionExecuteOnLoadChangeOnUpdateLayout() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user