diff --git a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/browser/BrowserUtilTest.java b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/browser/BrowserUtilTest.java index 8290d9338672..8e1b8b2ac72d 100644 --- a/dotCMS/src/integration-test/java/com/dotmarketing/portlets/browser/BrowserUtilTest.java +++ b/dotCMS/src/integration-test/java/com/dotmarketing/portlets/browser/BrowserUtilTest.java @@ -120,7 +120,45 @@ public void defaultPathEqualsToFieldVariable() throws DotDataException, DotSecur final Field field = (Field) map.get(FIELD); - addDefaultPathFieldVariable(host, field, folder.getPath()); + final Folder defaultPathFolderValue = new FolderDataGen().nextPersisted(); + addDefaultPathFieldVariable(host, field, defaultPathFolderValue.getPath()); + + final Optional defaultPathFolder = BrowserUtil.getDefaultPathFolder( + (Contentlet) map.get(CONTENTLET), field, APILocator.systemUser()); + + assertEquals(defaultPathFolderValue.getIdentifier(), defaultPathFolder.get().getIdentifier()); + } + + /** + * Method to test: {@link BrowserUtil#getDefaultPathFolder(Contentlet, Field, User)} + * When: The {@link Field} has a wrong defaultPath's Field Variable + * Should: Return the folder set in the defaultPath + * + * @throws DotDataException + * @throws IOException + * @throws DotSecurityException + */ + @Test + public void defaultPathEqualsToWrongFieldVariable() throws DotDataException, DotSecurityException { + + final Map map = createContentletWithImageFieldWithoutValue(); + addFolderHostField((ContentType) map.get(CONTENT_TYPE), (Contentlet) map.get(CONTENTLET)); + + final Host host = (Host) map.get(HOST); + final Folder folder = (Folder) map.get(FOLDER); + + final HttpServletRequest request = mock(HttpServletRequest.class); + HttpServletRequestThreadLocal.INSTANCE.setRequest(request); + + final HttpSession httpSession = mock(HttpSession.class); + when(request.getSession(false)).thenReturn(httpSession); + when(request.getAttribute(Host.HOST_VELOCITY_VAR_NAME)).thenReturn(host.getIdentifier()); + + final Folder selectAsLastFolder = selectAsLastFolder(httpSession); + + final Field field = (Field) map.get(FIELD); + + addDefaultPathFieldVariable(host, field, "wrong_path"); final Optional defaultPathFolder = BrowserUtil.getDefaultPathFolder( (Contentlet) map.get(CONTENTLET), field, APILocator.systemUser()); diff --git a/dotCMS/src/main/java/com/dotmarketing/portlets/browser/BrowserUtil.java b/dotCMS/src/main/java/com/dotmarketing/portlets/browser/BrowserUtil.java index f71f056d90e9..0c172e41c94a 100644 --- a/dotCMS/src/main/java/com/dotmarketing/portlets/browser/BrowserUtil.java +++ b/dotCMS/src/main/java/com/dotmarketing/portlets/browser/BrowserUtil.java @@ -111,13 +111,12 @@ private static Optional resolveWithFieldVariable(final Field field, fina List fieldVariables = APILocator.getFieldAPI() .getFieldVariablesForField(field.id(), user, true); - final List defaulPathVariable = fieldVariables.stream() + final Optional defaulPathVariable = fieldVariables.stream() .filter(fieldVariable -> "defaultPath".equals(fieldVariable.getKey())) - .limit(1) - .collect(Collectors.toList()); + .findFirst(); - if (UtilMethods.isSet(defaulPathVariable)) { - final FieldVariable defaultPathVariable = defaulPathVariable.get(0); + if (defaulPathVariable.isPresent()) { + final FieldVariable defaultPathVariable = defaulPathVariable.get(); final String fieldVariableValue = defaultPathVariable.getValue(); if (fieldVariableValue.startsWith(HOST_INDICATOR)) { @@ -141,11 +140,13 @@ private static Optional resolveWithFieldVariable(final Field field, fina } else { final String currentHost = WebAPILocator.getHostWebAPI().getCurrentHost() .getIdentifier(); - return Optional.of( - APILocator.getFolderAPI() + + final Folder folderByPath = APILocator.getFolderAPI() .findFolderByPath(fieldVariableValue, currentHost, - APILocator.systemUser(), false) - ); + APILocator.systemUser(), false); + + return UtilMethods.isSet(folderByPath) && UtilMethods.isSet(folderByPath.getIdentifier()) + ? Optional.of(folderByPath) : Optional.empty(); } } else { Logger.warn(BrowserUtil.class, () -> "defaultPath variable not exists for field " + field.name());