import { Link } from 'react-router';
import ProductNewsMenuItem from './ProductNewsMenuItem';
import { SuggestionLink } from './SuggestionsProvider';
-import { CurrentUser, isLoggedIn } from '../../types';
+import { CurrentUser, isLoggedIn, hasGlobalPermission } from '../../types';
import { translate } from '../../../helpers/l10n';
import { getBaseUrl } from '../../../helpers/urls';
import { isSonarCloud } from '../../../helpers/system';
}
renderSonarQubeLinks() {
+ const { currentUser } = this.props;
return (
<React.Fragment>
- {isLoggedIn(this.props.currentUser) && (
- <li>
- <a href="#" onClick={this.onAnalyzeProjectClick}>
- {translate('embed_docs.analyze_new_project')}
- </a>
- </li>
- )}
+ {isLoggedIn(currentUser) &&
+ hasGlobalPermission(currentUser, 'provisioning') && (
+ <li>
+ <a data-test="analyze-new-project" href="#" onClick={this.onAnalyzeProjectClick}>
+ {translate('embed_docs.analyze_new_project')}
+ </a>
+ </li>
+ )}
<li className="divider" />
<li>
<a href="https://community.sonarsource.com/" rel="noopener noreferrer" target="_blank">
expect(wrapper).toMatchSnapshot();
});
+it('should display analyze new project link when user has permission', () => {
+ const wrapper = shallow(
+ <EmbedDocsPopup
+ currentUser={{ isLoggedIn: true, permissions: { global: ['provisioning'] } }}
+ onClose={jest.fn()}
+ suggestions={suggestions}
+ />
+ );
+ expect(wrapper.find('[data-test="analyze-new-project"]').exists()).toBe(true);
+});
+
+it('should not display analyze new project link when user does not have permission', () => {
+ const wrapper = shallow(
+ <EmbedDocsPopup
+ currentUser={{ isLoggedIn: true }}
+ onClose={jest.fn()}
+ suggestions={suggestions}
+ />
+ );
+ expect(wrapper.find('[data-test="analyze-new-project"]').exists()).toBe(false);
+});
+
it('should display correct links for SonarCloud', () => {
(isSonarCloud as jest.Mock<any>).mockReturnValueOnce(true);
const context = {};
export interface CurrentUser {
isLoggedIn: boolean;
+ permissions?: { global: string[] };
showOnboardingTutorial?: boolean;
}
return user.isLoggedIn;
}
+export function hasGlobalPermission(user: CurrentUser, permission: string): boolean {
+ if (!user.permissions) {
+ return false;
+ }
+ return user.permissions.global.includes(permission);
+}
+
export function isSameHomePage(a: HomePage, b: HomePage) {
return (
a.type === b.type &&