From b7f047c8ddd5682ea649853ada8d83b778a0959b Mon Sep 17 00:00:00 2001 From: Gabriel MABILLE Date: Fri, 21 Apr 2023 13:03:13 +0200 Subject: [PATCH] Fix: Hide invite when disabled login form is set (#67031) * FIX: Hide Invite Button with external user management * Hide also when login form is disabled * add tests and readability --------- Co-authored-by: Eric Leijonmarck --- public/app/features/users/UsersActionBar.test.tsx | 15 +++++++++++++++ public/app/features/users/UsersActionBar.tsx | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/public/app/features/users/UsersActionBar.test.tsx b/public/app/features/users/UsersActionBar.test.tsx index d366e61e155..787a44d11d9 100644 --- a/public/app/features/users/UsersActionBar.test.tsx +++ b/public/app/features/users/UsersActionBar.test.tsx @@ -2,6 +2,8 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; import { mockToolkitActionCreator } from 'test/core/redux/mocks'; +import { config } from 'app/core/config'; + import { Props, UsersActionBarUnconnected } from './UsersActionBar'; import { searchQueryChanged } from './state/reducers'; @@ -62,4 +64,17 @@ describe('Render', () => { expect(screen.getByRole('link', { name: 'someUrl' })).toHaveAttribute('href', 'some/url'); }); + + it('should not show invite button when disableLoginForm is set', () => { + const originalDisableLoginForm = config.disableLoginForm; + config.disableLoginForm = true; + + setup({ + canInvite: true, + }); + + expect(screen.queryByRole('link', { name: 'Invite' })).not.toBeInTheDocument(); + // Reset the disableLoginForm mock to its original value + config.disableLoginForm = originalDisableLoginForm; + }); }); diff --git a/public/app/features/users/UsersActionBar.tsx b/public/app/features/users/UsersActionBar.tsx index 24bd045ad7d..e6ea3115f98 100644 --- a/public/app/features/users/UsersActionBar.tsx +++ b/public/app/features/users/UsersActionBar.tsx @@ -2,6 +2,7 @@ import React from 'react'; import { connect, ConnectedProps } from 'react-redux'; import { RadioButtonGroup, LinkButton, FilterInput } from '@grafana/ui'; +import config from 'app/core/config'; import { contextSrv } from 'app/core/core'; import { AccessControlAction, StoreState } from 'app/types'; @@ -48,6 +49,8 @@ export const UsersActionBarUnconnected = ({ { label: `Pending Invites (${pendingInvitesCount})`, value: 'invites' }, ]; const canAddToOrg: boolean = contextSrv.hasAccess(AccessControlAction.OrgUsersAdd, canInvite); + // backend rejects invitations if the login form is disabled + const showInviteButton: boolean = canAddToOrg && !config.disableLoginForm; return (
@@ -63,7 +66,7 @@ export const UsersActionBarUnconnected = ({
)} - {canAddToOrg && Invite} + {showInviteButton && Invite} {externalUserMngLinkUrl && ( {externalUserMngLinkName}