diff --git a/public/locales/de-DE/translation.json b/public/locales/de-DE/translation.json index 5f7d6a9..72e2ebc 100644 --- a/public/locales/de-DE/translation.json +++ b/public/locales/de-DE/translation.json @@ -583,9 +583,11 @@ "new-password": "Neues Passwort", "new-password-repeat": "Neues Passwort (wiederholen)", "change-password": "Passwort ändern", + "unlock": "Benutzer entsperren", "success-created": "Neuer Benutzer erfolgreich erstellt.", "success-updated": "Profil aktualisiert.", "password-success": "Passwort geändert.", + "unlock-success": "Benutzer entsperrt.", "password-mismatch": "Die Passwörter stimmen nicht überein.", "remove-from-group": "Aus Gruppe entfernen", "confirm-remove-from-group": "Möchten Sie den Benutzer wirklich aus dieser Gruppe entfernen?", diff --git a/public/locales/en-US/translation.json b/public/locales/en-US/translation.json index ac20fbe..7386b19 100644 --- a/public/locales/en-US/translation.json +++ b/public/locales/en-US/translation.json @@ -583,9 +583,11 @@ "new-password": "New Password", "new-password-repeat": "New Password (repeat)", "change-password": "Change Password", + "unlock": "Unlock User", "success-created": "Successfully created new user.", "success-updated": "Profile updated.", "password-success": "Password changed.", + "unlock-success": "User unlocked.", "password-mismatch": "Passwords do not match.", "remove-from-group": "Remove from group", "confirm-remove-from-group": "Do you really want to remove the user from this group?", diff --git a/src/pages/Admin.jsx b/src/pages/Admin.jsx index 92ac95e..9a91b08 100644 --- a/src/pages/Admin.jsx +++ b/src/pages/Admin.jsx @@ -711,7 +711,7 @@ const UserProfile = ({ user_id }) => { const UserPassword = ({ user_id }) => { const state = useContext(AppState), - { api: { user: { credentials } } } = state, + { api: { user: { credentials, unlock } } } = state, [t] = useTranslation(), password = useSignal(''), password_repeat = useSignal(''), @@ -730,6 +730,7 @@ const UserPassword = ({ user_id }) => { return <>

{t("admin.user.password")}

+ {mismatch.value ?

{t("admin.user.password-mismatch")}

: null}
@@ -742,6 +743,7 @@ const UserPassword = ({ user_id }) => {
+
diff --git a/src/pages/Admin.test.jsx b/src/pages/Admin.test.jsx index 250f5d9..36e1f55 100644 --- a/src/pages/Admin.test.jsx +++ b/src/pages/Admin.test.jsx @@ -177,6 +177,17 @@ describe("AdminPage", () => { expect(engine_rest.user.delete.mock.lastCall[0]).toBe(state); expect(engine_rest.user.delete.mock.lastCall[1]).toBe("jdoe"); }); + + it("unlocks the user from the password section", () => { + mockParams = { page_id: "users", selection_id: "jdoe" }; + const { getByText } = renderPage(state); + + fireEvent.click(getByText("admin.user.unlock")); + + expect(engine_rest.user.unlock).toHaveBeenCalled(); + expect(engine_rest.user.unlock.mock.lastCall[0]).toBe(state); + expect(engine_rest.user.unlock.mock.lastCall[1]).toBe("jdoe"); + }); }); describe("Groups", () => {