diff --git a/src/web/src/features/users/pages/UserEditPage.tsx b/src/web/src/features/users/pages/UserEditPage.tsx index bc4b7c6..8ac581d 100644 --- a/src/web/src/features/users/pages/UserEditPage.tsx +++ b/src/web/src/features/users/pages/UserEditPage.tsx @@ -18,6 +18,8 @@ import { } from '@/components/ui/form' import { useUser } from '../hooks/useUser' import { useUpdateUser } from '../hooks/useUpdateUser' +import { ResetPasswordModal } from '../components/ResetPasswordModal' +import { useAuthStore } from '@/stores/authStore' const editSchema = z.object({ nombre: z.string().min(1, 'El nombre es requerido'), @@ -45,6 +47,7 @@ export function UserEditPage() { const { id } = useParams<{ id: string }>() const userId = Number(id) const navigate = useNavigate() + const loggedUserId = useAuthStore((s) => s.user?.id) const { data: user, isLoading } = useUser(userId) const { mutate, isPending, error } = useUpdateUser(userId) @@ -112,9 +115,12 @@ export function UserEditPage() {

Editar Usuario

- +
+ {loggedUserId !== userId && } + +
{/* Username — display only, not editable */} diff --git a/src/web/src/tests/features/users/UserEditPage.test.tsx b/src/web/src/tests/features/users/UserEditPage.test.tsx index b13c183..5b8882c 100644 --- a/src/web/src/tests/features/users/UserEditPage.test.tsx +++ b/src/web/src/tests/features/users/UserEditPage.test.tsx @@ -138,4 +138,28 @@ describe('UserEditPage', () => { // Should NOT navigate expect(mockNavigate).not.toHaveBeenCalled() }) + + it('shows "Resetear contraseña" button when editing another user', async () => { + server.use( + http.get(`${API_URL}/api/v1/users/5`, () => HttpResponse.json(mockUserDetail)), + ) + + renderEditPage(5) + + await waitFor(() => expect(screen.getByDisplayValue('Juan')).toBeInTheDocument()) + expect(screen.getByRole('button', { name: /resetear contraseña/i })).toBeInTheDocument() + }) + + it('hides "Resetear contraseña" button when editing own profile', async () => { + server.use( + http.get(`${API_URL}/api/v1/users/1`, () => + HttpResponse.json({ ...mockUserDetail, id: 1, username: 'admin' }), + ), + ) + + renderEditPage(1) + + await waitFor(() => expect(screen.getByDisplayValue('Juan')).toBeInTheDocument()) + expect(screen.queryByRole('button', { name: /resetear contraseña/i })).not.toBeInTheDocument() + }) })