diff --git a/src/fileActions.jsx b/src/fileActions.jsx index ece87d6b9..811c669ae 100644 --- a/src/fileActions.jsx +++ b/src/fileActions.jsx @@ -128,6 +128,7 @@ const CreateDirectoryModal = ({ currentPath }) => { const [name, setName] = useState(""); const [nameError, setNameError] = useState(null); const [errorMessage, setErrorMessage] = useState(undefined); + const { cwdInfo } = useFilesContext(); const createDirectory = () => { const path = currentPath + name; cockpit.spawn(["mkdir", path], { superuser: "try", err: "message" }) @@ -172,7 +173,7 @@ const CreateDirectoryModal = ({ currentPath }) => { setDirectoryName(val, setName, setNameError, setErrorMessage)} + onChange={(_, val) => setDirectoryName(val, setName, setNameError, setErrorMessage, cwdInfo)} id="create-directory-input" autoFocus // eslint-disable-line jsx-a11y/no-autofocus /> @@ -185,6 +186,7 @@ const CreateDirectoryModal = ({ currentPath }) => { const RenameItemModal = ({ path, selected }) => { const Dialogs = useDialogs(); + const { cwdInfo } = useFilesContext(); const [name, setName] = useState(selected.name); const [nameError, setNameError] = useState(null); const [errorMessage, setErrorMessage] = useState(undefined); @@ -241,7 +243,7 @@ const RenameItemModal = ({ path, selected }) => { setDirectoryName(val, setName, setNameError, setErrorMessage)} + onChange={(_, val) => setDirectoryName(val, setName, setNameError, setErrorMessage, cwdInfo)} id="rename-item-input" /> @@ -436,7 +438,7 @@ const EditPermissionsModal = ({ selected, path }) => { ); }; -const setDirectoryName = (val, setName, setNameError, setErrorMessage) => { +const setDirectoryName = (val, setName, setNameError, setErrorMessage, cwdInfo) => { setErrorMessage(undefined); setName(val); @@ -446,6 +448,8 @@ const setDirectoryName = (val, setName, setNameError, setErrorMessage) => { setNameError(_("Name too long.")); } else if (val.includes("/")) { setNameError(_("Name cannot include a /.")); + } else if (cwdInfo?.entries[val]) { + setNameError(_("File or directory already exists")); } else { setNameError(null); } diff --git a/test/check-application b/test/check-application index a89b93f3b..d9d462e14 100755 --- a/test/check-application +++ b/test/check-application @@ -488,9 +488,11 @@ class TestFiles(testlib.MachineCase): b.click(".pf-v5-c-modal-box__footer button.pf-m-link") # cancel # Creating folder with duplicate name should return an error - self.create_directory(b, "newdir") - self.wait_modal_inline_alert(b, "mkdir: cannot create directory ‘/home/admin/newdir’: File exists") - b.click("div.pf-v5-c-modal-box__close button.pf-v5-c-button") + b.click("#dropdown-menu") + b.click("#create-item") + b.set_input_text("#create-directory-input", "newdir") + b.wait_in_text("#create-directory-input-helper", "File or directory already exists") + b.click(".pf-v5-c-modal-box__footer button.pf-m-link") # cancel # Creating folder with empty name should return an error self.create_directory(b, "") @@ -636,8 +638,11 @@ class TestFiles(testlib.MachineCase): """) b.wait_visible("[data-item='newfile']") b.wait_visible("[data-item='dest']") - self.rename_item(b, "newfile", "dest") - self.wait_modal_inline_alert(b, "mv: cannot overwrite directory '/home/admin/dest' with non-directory") + b.click("[data-item='newfile']") + b.click("#dropdown-menu") + b.click("#rename-item") + b.set_input_text("#rename-item-input", "dest") + b.wait_in_text("#rename-item-input-helper", "File or directory already exists") b.click("button.pf-m-link:contains('Cancel')") b.wait_not_present(".pf-v5-c-modal-box")