diff options
author | Jeremy Davis <jeremy.davis@sonarsource.com> | 2020-12-14 14:57:33 +0100 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2020-12-22 20:09:36 +0000 |
commit | 4d95e4f93fc695ef1eb492e0d823b1d76abb31e8 (patch) | |
tree | 0c093ca502437508d39646bf14f3503223fb4285 /server/sonar-web | |
parent | 9dc6361a06ccec4f33c6ac4691cb7739a83defb3 (diff) | |
download | sonarqube-4d95e4f93fc695ef1eb492e0d823b1d76abb31e8.tar.gz sonarqube-4d95e4f93fc695ef1eb492e0d823b1d76abb31e8.zip |
SONAR-13999 Remove orgs from issues
Diffstat (limited to 'server/sonar-web')
69 files changed, 356 insertions, 531 deletions
diff --git a/server/sonar-web/src/main/js/api/issues.ts b/server/sonar-web/src/main/js/api/issues.ts index d0756260502..bb3a396e702 100644 --- a/server/sonar-web/src/main/js/api/issues.ts +++ b/server/sonar-web/src/main/js/api/issues.ts @@ -20,27 +20,7 @@ import { getJSON, post, postJSON, RequestData } from 'sonar-ui-common/helpers/request'; import throwGlobalError from '../app/utils/throwGlobalError'; import getCoverageStatus from '../components/SourceViewer/helpers/getCoverageStatus'; -import { RawIssue } from '../helpers/issues'; - -export interface IssueResponse { - components?: Array<{ key: string; name: string }>; - issue: RawIssue; - rules?: Array<{}>; - users?: Array<T.UserBase>; -} - -interface IssuesResponse { - components?: { key: string; organization: string; name: string }[]; - effortTotal: number; - facets: Array<{ - property: string; - values: { count: number; val: string }[]; - }>; - issues: RawIssue[]; - paging: T.Paging; - rules?: Array<{}>; - users?: Array<T.UserBase>; -} +import { IssueResponse, RawIssuesResponse } from '../types/issues'; type FacetName = | 'assigned_to_me' @@ -63,7 +43,7 @@ type FacetName = | 'tags' | 'types'; -export function searchIssues(query: RequestData): Promise<IssuesResponse> { +export function searchIssues(query: RequestData): Promise<RawIssuesResponse> { return getJSON('/api/issues/search', query); } @@ -72,7 +52,7 @@ export function getFacets( facets: FacetName[] ): Promise<{ facets: Array<{ property: string; values: T.FacetValue[] }>; - response: IssuesResponse; + response: RawIssuesResponse; }> { const data = { ...query, @@ -88,7 +68,7 @@ export function getFacets( export function getFacet( query: RequestData, facet: FacetName -): Promise<{ facet: { count: number; val: string }[]; response: IssuesResponse }> { +): Promise<{ facet: { count: number; val: string }[]; response: RawIssuesResponse }> { return getFacets(query, [facet]).then(r => { return { facet: r.facets[0].values, response: r.response }; }); diff --git a/server/sonar-web/src/main/js/apps/issues/components/App.tsx b/server/sonar-web/src/main/js/apps/issues/components/App.tsx index 1532651a140..93783d44945 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/App.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/App.tsx @@ -51,6 +51,13 @@ import { } from '../../../helpers/branch-like'; import { isSonarCloud } from '../../../helpers/system'; import { BranchLike } from '../../../types/branch-like'; +import { + Facet, + FetchIssuesPromise, + ReferencedComponent, + ReferencedLanguage, + ReferencedRule +} from '../../../types/issues'; import { SecurityStandard } from '../../../types/security'; import * as actions from '../actions'; import ConciseIssuesList from '../conciseIssuesList/ConciseIssuesList'; @@ -60,16 +67,11 @@ import '../styles.css'; import { areMyIssuesSelected, areQueriesEqual, - Facet, getOpen, mapFacet, parseFacets, parseQuery, Query, - RawFacet, - ReferencedComponent, - ReferencedLanguage, - ReferencedRule, saveMyIssues, scrollToIssue, serializeQuery, @@ -86,28 +88,15 @@ import NoIssues from './NoIssues'; import NoMyIssues from './NoMyIssues'; import PageActions from './PageActions'; -interface FetchIssuesPromise { - components: ReferencedComponent[]; - effortTotal: number; - facets: RawFacet[]; - issues: T.Issue[]; - languages: ReferencedLanguage[]; - paging: T.Paging; - rules: ReferencedRule[]; - users: T.UserBase[]; -} - interface Props { branchLike?: BranchLike; component?: T.Component; currentUser: T.CurrentUser; fetchBranchStatus: (branchLike: BranchLike, projectKey: string) => Promise<void>; - fetchIssues: (query: T.RawQuery, requestOrganizations?: boolean) => Promise<FetchIssuesPromise>; + fetchIssues: (query: T.RawQuery) => Promise<FetchIssuesPromise>; location: Location; onBranchesChange?: () => void; - organization?: { key: string }; router: Pick<Router, 'push' | 'replace'>; - userOrganizations: T.Organization[]; } export interface State { @@ -424,17 +413,12 @@ export default class App extends React.PureComponent<Props, State> { .join(',') : undefined; - const organizationKey = - (component && component.organization) || - (this.props.organization && this.props.organization.key); - const parameters: T.Dict<string | undefined> = { ...getBranchLikeQuery(this.props.branchLike), componentKeys: component && component.key, s: 'FILE_LINE', ...serializeQuery(query), ps: '100', - organization: organizationKey, facets, ...additional }; @@ -452,7 +436,7 @@ export default class App extends React.PureComponent<Props, State> { Object.assign(parameters, { assignees: '__me__' }); } - return this.props.fetchIssues(parameters, false); + return this.props.fetchIssues(parameters); }; fetchFirstIssues() { @@ -630,7 +614,9 @@ export default class App extends React.PureComponent<Props, State> { })); } }, - () => {} + () => { + /* Do nothing */ + } ); }; @@ -701,27 +687,20 @@ export default class App extends React.PureComponent<Props, State> { const { component } = this.props; const { myIssues, query } = this.state; - const organizationKey = - (component && component.organization) || - (this.props.organization && this.props.organization.key); - const parameters = { ...getBranchLikeQuery(this.props.branchLike), componentKeys: component && component.key, facets: mapFacet(property), s: 'FILE_LINE', ...serializeQuery({ ...query, ...changes }), - ps: 1, - organization: organizationKey + ps: 1 }; if (myIssues) { Object.assign(parameters, { assignees: '__me__' }); } - return this.props - .fetchIssues(parameters, false) - .then(({ facets }) => parseFacets(facets)[property]); + return this.props.fetchIssues(parameters).then(({ facets }) => parseFacets(facets)[property]); }; closeFacet = (property: string) => { @@ -918,7 +897,6 @@ export default class App extends React.PureComponent<Props, State> { fetchIssues={checkAll ? this.fetchIssues : this.getCheckedIssues} onClose={this.handleCloseBulkChange} onDone={this.handleBulkChangeDone} - organization={this.props.organization} /> )} </div> @@ -926,20 +904,9 @@ export default class App extends React.PureComponent<Props, State> { } renderFacets() { - const { component, currentUser, userOrganizations, branchLike } = this.props; + const { component, currentUser, branchLike } = this.props; const { query } = this.state; - const organizationKey = - (component && component.organization) || - (this.props.organization && this.props.organization.key); - - const userOrganization = - !isSonarCloud() || - userOrganizations.find(o => { - return o.key === organizationKey; - }); - const hideAuthorFacet = !userOrganization; - return ( <div className="layout-page-filters"> {currentUser.isLoggedIn && !isSonarCloud() && ( @@ -954,14 +921,12 @@ export default class App extends React.PureComponent<Props, State> { component={component} createdAfterIncludesTime={this.createdAfterIncludesTime()} facets={this.state.facets} - hideAuthorFacet={hideAuthorFacet} loadSearchResultCount={this.loadSearchResultCount} loadingFacets={this.state.loadingFacets} myIssues={this.state.myIssues} onFacetToggle={this.handleFacetToggle} onFilterChange={this.handleFilterChange} openFacets={this.state.openFacets} - organization={this.props.organization} query={query} referencedComponentsById={this.state.referencedComponentsById} referencedComponentsByKey={this.state.referencedComponentsByKey} @@ -1029,7 +994,7 @@ export default class App extends React.PureComponent<Props, State> { } renderList() { - const { branchLike, component, currentUser, organization } = this.props; + const { branchLike, component, currentUser } = this.props; const { issues, loading, loadingMore, openIssue, paging } = this.state; const selectedIndex = this.getSelectedIndex(); const selectedIssue = selectedIndex !== undefined ? issues[selectedIndex] : undefined; @@ -1063,7 +1028,6 @@ export default class App extends React.PureComponent<Props, State> { onIssueClick={this.openIssue} onPopupToggle={this.handlePopupToggle} openPopup={this.state.openPopup} - organization={organization} selectedIssue={selectedIssue} /> )} @@ -1101,7 +1065,7 @@ export default class App extends React.PureComponent<Props, State> { {this.renderBulkChange(openIssue)} <PageActions - canSetHome={Boolean(!this.props.organization && !this.props.component)} + canSetHome={!this.props.component} effortTotal={this.state.effortTotal} onReload={this.handleReload} paging={paging} diff --git a/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx b/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx index 97f04d40be5..ba2169c52b4 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/AppContainer.tsx @@ -17,53 +17,29 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { uniq } from 'lodash'; import { connect } from 'react-redux'; -import { Dispatch } from 'redux'; import { lazyLoadComponent } from 'sonar-ui-common/components/lazyLoadComponent'; import { searchIssues } from '../../../api/issues'; -import { getOrganizations } from '../../../api/organizations'; import throwGlobalError from '../../../app/utils/throwGlobalError'; import { withRouter } from '../../../components/hoc/withRouter'; import { parseIssueFromResponse } from '../../../helpers/issues'; -import { receiveOrganizations } from '../../../store/organizations'; import { fetchBranchStatus } from '../../../store/rootActions'; -import { - areThereCustomOrganizations, - getCurrentUser, - getMyOrganizations, - Store -} from '../../../store/rootReducer'; +import { getCurrentUser, Store } from '../../../store/rootReducer'; +import { FetchIssuesPromise } from '../../../types/issues'; const IssuesAppContainer = lazyLoadComponent(() => import('./App'), 'IssuesAppContainer'); interface StateProps { currentUser: T.CurrentUser; - userOrganizations: T.Organization[]; + fetchIssues: (query: T.RawQuery) => Promise<FetchIssuesPromise>; } const mapStateToProps = (state: Store): StateProps => ({ currentUser: getCurrentUser(state), - userOrganizations: getMyOrganizations(state) + fetchIssues }); -const fetchIssueOrganizations = (organizationKeys: string[]) => (dispatch: Dispatch) => { - if (!organizationKeys.length) { - return Promise.resolve(); - } - - return getOrganizations({ organizations: organizationKeys.join() }).then( - response => dispatch(receiveOrganizations(response.organizations)), - throwGlobalError - ); -}; - -const fetchIssues = (query: T.RawQuery, requestOrganizations = true) => ( - // use `Function` to be able to do `dispatch(...).then(...)` - dispatch: Function, - getState: () => Store -) => { - const organizationsEnabled = areThereCustomOrganizations(getState()); +const fetchIssues = (query: T.RawQuery) => { return searchIssues({ ...query, additionalFields: '_all', @@ -75,22 +51,12 @@ const fetchIssues = (query: T.RawQuery, requestOrganizations = true) => ( ); return { ...response, issues: parsedIssues }; }) - .then(response => { - const organizationKeys = uniq([ - ...response.issues.map(issue => issue.organization), - ...(response.components || []).map(component => component.organization) - ]); - return organizationsEnabled && requestOrganizations - ? dispatch(fetchIssueOrganizations(organizationKeys)).then(() => response) - : response; - }) .catch(throwGlobalError); }; // have to type cast this, because of async action const mapDispatchToProps = { - fetchBranchStatus: fetchBranchStatus as any, - fetchIssues: fetchIssues as any + fetchBranchStatus: fetchBranchStatus as any }; export default withRouter(connect(mapStateToProps, mapDispatchToProps)(IssuesAppContainer)); diff --git a/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx b/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx index a5c94c651a6..3bcb1606ebf 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/BulkChangeModal.tsx @@ -56,7 +56,6 @@ interface Props { fetchIssues: (x: {}) => Promise<{ issues: T.Issue[]; paging: T.Paging }>; onClose: () => void; onDone: () => void; - organization: { key: string } | undefined; } interface FormFields { @@ -64,7 +63,6 @@ interface FormFields { assignee?: AssigneeOption; comment?: string; notifications?: boolean; - organization?: string; removeTags?: Array<{ label: string; value: string }>; severity?: string; transition?: string; @@ -94,20 +92,13 @@ export default class BulkChangeModal extends React.PureComponent<Props, State> { constructor(props: Props) { super(props); - let organization = props.component && props.component.organization; - if (props.organization && !organization) { - organization = props.organization.key; - } - this.state = { initialTags: [], issues: [], loading: true, submitting: false, organization }; + this.state = { initialTags: [], issues: [], loading: true, submitting: false }; } componentDidMount() { this.mounted = true; - Promise.all([ - this.loadIssues(), - searchIssueTags({ organization: this.state.organization }) - ]).then( + Promise.all([this.loadIssues(), searchIssueTags({})]).then( ([{ issues, paging }, tags]) => { if (this.mounted) { if (issues.length > MAX_PAGE_SIZE) { @@ -178,7 +169,7 @@ export default class BulkChangeModal extends React.PureComponent<Props, State> { }; handleTagsSearch = (query: string) => { - return searchIssueTags({ organization: this.state.organization, q: query }).then(tags => + return searchIssueTags({ q: query }).then(tags => tags.map(tag => ({ label: tag, value: tag })) ); }; diff --git a/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx b/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx index 0b0cfdc2cd0..8cde7b93c53 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/ComponentBreadcrumbs.tsx @@ -20,26 +20,12 @@ import * as React from 'react'; import QualifierIcon from 'sonar-ui-common/components/icons/QualifierIcon'; import { collapsePath, limitComponentName } from 'sonar-ui-common/helpers/path'; -import Organization from '../../../components/shared/Organization'; import { getSelectedLocation } from '../utils'; interface Props { component?: T.Component; - issue: Pick< - T.Issue, - | 'component' - | 'componentLongName' - | 'componentQualifier' - | 'flows' - | 'organization' - | 'project' - | 'projectName' - | 'secondaryLocations' - | 'subProject' - | 'subProjectName' - >; + issue: T.Issue; link?: boolean; - organization: { key: string } | undefined; selectedFlowIndex?: number; selectedLocationIndex?: number; } @@ -47,12 +33,9 @@ interface Props { export default function ComponentBreadcrumbs({ component, issue, - organization, selectedFlowIndex, selectedLocationIndex }: Props) { - const displayOrganization = - !organization && (!component || ['VW', 'SVW'].includes(component.qualifier)); const displayProject = !component || !['TRK', 'BRC', 'DIR'].includes(component.qualifier); const displaySubProject = !component || !['BRC', 'DIR'].includes(component.qualifier); @@ -63,8 +46,6 @@ export default function ComponentBreadcrumbs({ <div className="component-name text-ellipsis"> <QualifierIcon className="spacer-right" qualifier={issue.componentQualifier} /> - {displayOrganization && <Organization link={false} organizationKey={issue.organization} />} - {displayProject && ( <span title={issue.projectName}> {limitComponentName(issue.projectName)} diff --git a/server/sonar-web/src/main/js/apps/issues/components/IssuesList.tsx b/server/sonar-web/src/main/js/apps/issues/components/IssuesList.tsx index d16a1585e34..cd35d9e3328 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/IssuesList.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/IssuesList.tsx @@ -33,7 +33,6 @@ interface Props { onIssueClick: (issueKey: string) => void; onPopupToggle: (issue: string, popupName: string, open?: boolean) => void; openPopup: { issue: string; name: string } | undefined; - organization: { key: string } | undefined; selectedIssue: T.Issue | undefined; } @@ -85,7 +84,6 @@ export default class IssuesList extends React.PureComponent<Props, State> { onFilterChange={this.props.onFilterChange} onPopupToggle={this.props.onPopupToggle} openPopup={openPopup && openPopup.issue === issue.key ? openPopup.name : undefined} - organization={this.props.organization} previousIssue={index > 0 ? issues[index - 1] : undefined} selected={selectedIssue != null && selectedIssue.key === issue.key} /> diff --git a/server/sonar-web/src/main/js/apps/issues/components/ListItem.tsx b/server/sonar-web/src/main/js/apps/issues/components/ListItem.tsx index 780d2bda72f..0d2ea282495 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/ListItem.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/ListItem.tsx @@ -34,7 +34,6 @@ interface Props { onFilterChange: (changes: Partial<Query>) => void; onPopupToggle: (issue: string, popupName: string, open?: boolean) => void; openPopup: string | undefined; - organization: { key: string } | undefined; previousIssue: T.Issue | undefined; selected: boolean; } @@ -99,11 +98,7 @@ export default class ListItem extends React.PureComponent<Props> { <div className="issues-workspace-list-item"> {displayComponent && ( <div className="issues-workspace-list-component note"> - <ComponentBreadcrumbs - component={component} - issue={this.props.issue} - organization={this.props.organization} - /> + <ComponentBreadcrumbs component={component} issue={this.props.issue} /> </div> )} <Issue diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/App-test.tsx b/server/sonar-web/src/main/js/apps/issues/components/__tests__/App-test.tsx index 7f639106c24..11d1ab3c705 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/App-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/App-test.tsx @@ -71,7 +71,7 @@ const ISSUES = [ const FACETS = [{ property: 'severities', values: [{ val: 'MINOR', count: 4 }] }]; const PAGING = { pageIndex: 1, pageSize: 100, total: 4 }; -const referencedComponent = { key: 'foo-key', name: 'bar', organization: 'John', uuid: 'foo-uuid' }; +const referencedComponent = { key: 'foo-key', name: 'bar', uuid: 'foo-uuid' }; it('should render a list of issue', async () => { const wrapper = shallowRender(); @@ -393,13 +393,12 @@ it('should handle createAfter query param with time', async () => { wrapper.instance().fetchIssues({}); expect(fetchIssues).toBeCalledWith( - expect.objectContaining({ createdAfter: '2020-10-21T17:21:00+0000' }), - false + expect.objectContaining({ createdAfter: '2020-10-21T17:21:00+0000' }) ); }); function fetchIssuesMockFactory(keyCount = 0, lineCount = 1) { - return jest.fn().mockImplementation(({ p }: any) => + return jest.fn().mockImplementation(({ p }: { p: number }) => Promise.resolve({ components: [referencedComponent], effortTotal: 1, @@ -439,7 +438,6 @@ function shallowRender(props: Partial<App['props']> = {}) { breadcrumbs: [], key: 'foo', name: 'bar', - organization: 'John', qualifier: 'Doe' }} currentUser={mockLoggedInUser()} @@ -456,9 +454,7 @@ function shallowRender(props: Partial<App['props']> = {}) { })} location={mockLocation({ pathname: '/issues', query: {} })} onBranchesChange={() => {}} - organization={{ key: 'foo' }} router={mockRouter()} - userOrganizations={[]} {...props} /> ); diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/BulkChangeModal-test.tsx b/server/sonar-web/src/main/js/apps/issues/components/__tests__/BulkChangeModal-test.tsx index 9fb4eb8d9b7..21c9b4dd256 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/BulkChangeModal-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/BulkChangeModal-test.tsx @@ -20,15 +20,16 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import { waitAndUpdate } from 'sonar-ui-common/helpers/testUtils'; +import { searchIssueTags } from '../../../../api/issues'; import { mockIssue } from '../../../../helpers/testMocks'; import BulkChangeModal, { MAX_PAGE_SIZE } from '../BulkChangeModal'; jest.mock('../../../../api/issues', () => ({ - searchIssueTags: () => Promise.resolve([undefined, []]) + searchIssueTags: jest.fn().mockResolvedValue([undefined, []]) })); jest.mock('../BulkChangeModal', () => { - const mock = require.requireActual('../BulkChangeModal'); + const mock = jest.requireActual('../BulkChangeModal'); mock.MAX_PAGE_SIZE = 1; return mock; }); @@ -92,6 +93,12 @@ it('should properly handle the search for assignee', async () => { expect(result).toMatchSnapshot(); }); +it('should properly handle the search for tags', async () => { + const wrapper = getWrapper([]); + await wrapper.instance().handleTagsSearch('query'); + expect(searchIssueTags).toBeCalled(); +}); + const getWrapper = (issues: T.Issue[]) => { return shallow<BulkChangeModal>( <BulkChangeModal @@ -109,7 +116,6 @@ const getWrapper = (issues: T.Issue[]) => { } onClose={() => {}} onDone={() => {}} - organization={undefined} /> ); }; diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/ComponentBreadcrumbs-test.tsx b/server/sonar-web/src/main/js/apps/issues/components/__tests__/ComponentBreadcrumbs-test.tsx index 0b2dd2ca53f..5776b81b648 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/ComponentBreadcrumbs-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/ComponentBreadcrumbs-test.tsx @@ -19,31 +19,25 @@ */ import { shallow } from 'enzyme'; import * as React from 'react'; +import { mockIssue } from '../../../../helpers/testMocks'; import { ComponentQualifier } from '../../../../types/component'; import ComponentBreadcrumbs from '../ComponentBreadcrumbs'; -const baseIssue = { +const baseIssue = mockIssue(false, { component: 'comp', componentLongName: 'comp-name', componentQualifier: ComponentQualifier.File, - flows: [], - organization: 'org', project: 'proj', - projectName: 'proj-name', - secondaryLocations: [] -}; + projectName: 'proj-name' +}); it('renders', () => { expect( - shallow( - <ComponentBreadcrumbs component={undefined} issue={baseIssue} organization={undefined} /> - ) + shallow(<ComponentBreadcrumbs component={undefined} issue={baseIssue} />) ).toMatchSnapshot(); }); it('renders with sub-project', () => { const issue = { ...baseIssue, subProject: 'sub-proj', subProjectName: 'sub-proj-name' }; - expect( - shallow(<ComponentBreadcrumbs component={undefined} issue={issue} organization={undefined} />) - ).toMatchSnapshot(); + expect(shallow(<ComponentBreadcrumbs component={undefined} issue={issue} />)).toMatchSnapshot(); }); diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/IssuesList-test.tsx b/server/sonar-web/src/main/js/apps/issues/components/__tests__/IssuesList-test.tsx index 87e6fd84be0..292d143000d 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/IssuesList-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/IssuesList-test.tsx @@ -46,7 +46,6 @@ function shallowRender(overrides: Partial<IssuesList['props']> = {}) { onIssueClick={jest.fn()} onPopupToggle={jest.fn()} openPopup={undefined} - organization={undefined} selectedIssue={undefined} {...overrides} /> diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/App-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/App-test.tsx.snap index 46e089390d2..51d877ba775 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/App-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/App-test.tsx.snap @@ -103,7 +103,6 @@ exports[`should switch to source view if an issue is selected 1`] = ` "breadcrumbs": Array [], "key": "foo", "name": "bar", - "organization": "John", "qualifier": "Doe", } } @@ -121,11 +120,9 @@ exports[`should switch to source view if an issue is selected 1`] = ` "key": "foo", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -152,11 +149,9 @@ exports[`should switch to source view if an issue is selected 1`] = ` "key": "bar", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -233,11 +228,9 @@ exports[`should switch to source view if an issue is selected 1`] = ` "key": "third", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ @@ -283,11 +276,9 @@ exports[`should switch to source view if an issue is selected 1`] = ` "key": "fourth", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -309,11 +300,6 @@ exports[`should switch to source view if an issue is selected 1`] = ` onIssueCheck={[Function]} onIssueClick={[Function]} onPopupToggle={[Function]} - organization={ - Object { - "key": "foo", - } - } selectedIssue={ Object { "actions": Array [], @@ -327,11 +313,9 @@ exports[`should switch to source view if an issue is selected 1`] = ` "key": "foo", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -403,11 +387,9 @@ exports[`should switch to source view if an issue is selected 2`] = ` "key": "foo", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -434,11 +416,9 @@ exports[`should switch to source view if an issue is selected 2`] = ` "key": "bar", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -515,11 +495,9 @@ exports[`should switch to source view if an issue is selected 2`] = ` "key": "third", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ @@ -565,11 +543,9 @@ exports[`should switch to source view if an issue is selected 2`] = ` "key": "fourth", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -654,11 +630,9 @@ exports[`should switch to source view if an issue is selected 2`] = ` "key": "third", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/ComponentBreadcrumbs-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/ComponentBreadcrumbs-test.tsx.snap index 33e198ab34e..bc18b11ab3a 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/ComponentBreadcrumbs-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/ComponentBreadcrumbs-test.tsx.snap @@ -8,10 +8,6 @@ exports[`renders 1`] = ` className="spacer-right" qualifier="FIL" /> - <Connect(Organization) - link={false} - organizationKey="org" - /> <span title="proj-name" > @@ -36,10 +32,6 @@ exports[`renders with sub-project 1`] = ` className="spacer-right" qualifier="FIL" /> - <Connect(Organization) - link={false} - organizationKey="org" - /> <span title="proj-name" > diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesList-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesList-test.tsx.snap index c7a30dd2379..975eb1fe1cf 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesList-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesList-test.tsx.snap @@ -25,11 +25,9 @@ exports[`should render correctly 2`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -68,11 +66,9 @@ exports[`should render correctly 2`] = ` "key": "AVsae-CQS-9G3txfbFN3", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -107,11 +103,9 @@ exports[`should render correctly 2`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesSourceViewer-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesSourceViewer-test.tsx.snap index a0bd5ab199c..fe59402ddfe 100644 --- a/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesSourceViewer-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/components/__tests__/__snapshots__/IssuesSourceViewer-test.tsx.snap @@ -77,11 +77,9 @@ exports[`should render CrossComponentSourceViewer correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ @@ -180,11 +178,9 @@ exports[`should render CrossComponentSourceViewer correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/ConciseIssue-test.tsx b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/ConciseIssue-test.tsx index c9a124f9661..b1e7934034a 100644 --- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/ConciseIssue-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/ConciseIssue-test.tsx @@ -32,11 +32,9 @@ const issue: T.Issue = { fromHotspot: false, key: '', message: '', - organization: '', project: '', projectKey: '', projectName: '', - projectOrganization: '', rule: '', ruleName: '', secondaryLocations: [], diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssue-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssue-test.tsx.snap index 002ac690399..67deeb639ef 100644 --- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssue-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssue-test.tsx.snap @@ -18,11 +18,9 @@ exports[`should render 1`] = ` "fromHotspot": false, "key": "", "message": "", - "organization": "", "project": "", "projectKey": "", "projectName": "", - "projectOrganization": "", "rule": "", "ruleName": "", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueBox-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueBox-test.tsx.snap index 4acba10db82..4eb63a1a28c 100644 --- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueBox-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueBox-test.tsx.snap @@ -33,11 +33,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -71,11 +69,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -110,11 +106,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -217,11 +211,9 @@ exports[`should render correctly 2`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ @@ -324,11 +316,9 @@ exports[`should render correctly 2`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ @@ -432,11 +422,9 @@ exports[`should render correctly 2`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ diff --git a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocationsNavigator-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocationsNavigator-test.tsx.snap index d90ab990817..0434816e9e4 100644 --- a/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocationsNavigator-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/conciseIssuesList/__tests__/__snapshots__/ConciseIssueLocationsNavigator-test.tsx.snap @@ -40,11 +40,9 @@ exports[`should render flow locations in different file 1`] = ` "key": "", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -211,11 +209,9 @@ exports[`should render taint analysis issues correctly 1`] = ` "key": "", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/apps/issues/crossComponentSourceViewer/__tests__/__snapshots__/CrossComponentSourceViewerWrapper-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/crossComponentSourceViewer/__tests__/__snapshots__/CrossComponentSourceViewerWrapper-test.tsx.snap index 277d63d0309..06624417ee0 100644 --- a/server/sonar-web/src/main/js/apps/issues/crossComponentSourceViewer/__tests__/__snapshots__/CrossComponentSourceViewerWrapper-test.tsx.snap +++ b/server/sonar-web/src/main/js/apps/issues/crossComponentSourceViewer/__tests__/__snapshots__/CrossComponentSourceViewerWrapper-test.tsx.snap @@ -111,11 +111,9 @@ exports[`should render correctly 2`] = ` "key": "1", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/AssigneeFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/AssigneeFacet.tsx index ee703c4f321..9a507b0e40e 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/AssigneeFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/AssigneeFacet.tsx @@ -24,7 +24,8 @@ import { highlightTerm } from 'sonar-ui-common/helpers/search'; import ListStyleFacet from '../../../components/facet/ListStyleFacet'; import Avatar from '../../../components/ui/Avatar'; import { isUserActive } from '../../../helpers/users'; -import { Facet, Query, searchAssignees } from '../utils'; +import { Facet } from '../../../types/issues'; +import { Query, searchAssignees } from '../utils'; interface Props { assigned: boolean; diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/AuthorFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/AuthorFacet.tsx index 96590327447..540e77a8817 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/AuthorFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/AuthorFacet.tsx @@ -23,7 +23,8 @@ import { translate } from 'sonar-ui-common/helpers/l10n'; import { highlightTerm } from 'sonar-ui-common/helpers/search'; import { searchIssueAuthors } from '../../../api/issues'; import ListStyleFacet from '../../../components/facet/ListStyleFacet'; -import { Facet, Query } from '../utils'; +import { Facet } from '../../../types/issues'; +import { Query } from '../utils'; interface Props { component: T.Component | undefined; @@ -32,7 +33,6 @@ interface Props { onChange: (changes: Partial<Query>) => void; onToggle: (property: string) => void; open: boolean; - organization: string | undefined; query: Query; stats: T.Dict<number> | undefined; authors: string[]; @@ -50,7 +50,6 @@ export default class AuthorFacet extends React.PureComponent<Props> { const project = component && ['TRK', 'VW', 'APP'].includes(component.qualifier) ? component.key : undefined; return searchIssueAuthors({ - organization: this.props.organization, project, ps: SEARCH_SIZE, // maximum q: query diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx index d00d2b91ae5..122050d76ce 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx @@ -28,7 +28,8 @@ import ListStyleFacet from '../../../components/facet/ListStyleFacet'; import { getBranchLikeQuery } from '../../../helpers/branch-like'; import { BranchLike } from '../../../types/branch-like'; import { TreeComponentWithPath } from '../../../types/component'; -import { Facet, Query } from '../utils'; +import { Facet } from '../../../types/issues'; +import { Query } from '../utils'; interface Props { branchLike?: BranchLike; diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx index cd6a0f1dee3..c37fcbd731e 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx @@ -29,7 +29,8 @@ import ListStyleFacet from '../../../components/facet/ListStyleFacet'; import { getBranchLikeQuery } from '../../../helpers/branch-like'; import { BranchLike } from '../../../types/branch-like'; import { TreeComponentWithPath } from '../../../types/component'; -import { Facet, Query } from '../utils'; +import { Facet } from '../../../types/issues'; +import { Query } from '../utils'; interface Props { branchLike?: BranchLike; diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx index f9b6206999a..72e0332fa52 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/LanguageFacet.tsx @@ -24,7 +24,8 @@ import { translate } from 'sonar-ui-common/helpers/l10n'; import { highlightTerm } from 'sonar-ui-common/helpers/search'; import ListStyleFacet from '../../../components/facet/ListStyleFacet'; import { getLanguages, Store } from '../../../store/rootReducer'; -import { Facet, Query, ReferencedLanguage } from '../utils'; +import { Facet, ReferencedLanguage } from '../../../types/issues'; +import { Query } from '../utils'; interface InstalledLanguage { key: string; diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx index de55ac147b3..3bb0ca3ab87 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx @@ -25,7 +25,8 @@ import { highlightTerm } from 'sonar-ui-common/helpers/search'; import { getTree, searchProjects } from '../../../api/components'; import ListStyleFacet from '../../../components/facet/ListStyleFacet'; import { ComponentQualifier } from '../../../types/component'; -import { Facet, Query, ReferencedComponent } from '../utils'; +import { Facet, ReferencedComponent } from '../../../types/issues'; +import { Query } from '../utils'; interface Props { component: T.Component | undefined; diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx index 5d078cba546..4f0d2d1148a 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/RuleFacet.tsx @@ -22,7 +22,8 @@ import * as React from 'react'; import { translate } from 'sonar-ui-common/helpers/l10n'; import { searchRules } from '../../../api/rules'; import ListStyleFacet from '../../../components/facet/ListStyleFacet'; -import { Facet, Query, ReferencedRule } from '../utils'; +import { Facet, ReferencedRule } from '../../../types/issues'; +import { Query } from '../utils'; interface Props { fetching: boolean; @@ -31,7 +32,6 @@ interface Props { onChange: (changes: Partial<Query>) => void; onToggle: (property: string) => void; open: boolean; - organization: string | undefined; query: Query; referencedRules: T.Dict<ReferencedRule>; rules: string[]; @@ -40,11 +40,10 @@ interface Props { export default class RuleFacet extends React.PureComponent<Props> { handleSearch = (query: string, page = 1) => { - const { languages, organization } = this.props; + const { languages } = this.props; return searchRules({ f: 'name,langName', languages: languages.length ? languages.join() : undefined, - organization, q: query, p: page, ps: 30, diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx index 7442fad4ca2..6797d3fb828 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/Sidebar.tsx @@ -22,7 +22,13 @@ import { connect } from 'react-redux'; import { getGlobalSettingValue, Store } from '../../../store/rootReducer'; import { BranchLike } from '../../../types/branch-like'; import { ComponentQualifier } from '../../../types/component'; -import { Facet, Query, ReferencedComponent, ReferencedLanguage, ReferencedRule } from '../utils'; +import { + Facet, + ReferencedComponent, + ReferencedLanguage, + ReferencedRule +} from '../../../types/issues'; +import { Query } from '../utils'; import AssigneeFacet from './AssigneeFacet'; import AuthorFacet from './AuthorFacet'; import CreationDateFacet from './CreationDateFacet'; @@ -44,14 +50,12 @@ export interface Props { component: T.Component | undefined; createdAfterIncludesTime: boolean; facets: T.Dict<Facet | undefined>; - hideAuthorFacet?: boolean; loadSearchResultCount: (property: string, changes: Partial<Query>) => Promise<Facet>; loadingFacets: T.Dict<boolean>; myIssues: boolean; onFacetToggle: (property: string) => void; onFilterChange: (changes: Partial<Query>) => void; openFacets: T.Dict<boolean>; - organization: { key: string } | undefined; query: Query; referencedComponentsById: T.Dict<ReferencedComponent>; referencedComponentsByKey: T.Dict<ReferencedComponent>; @@ -99,22 +103,11 @@ export class Sidebar extends React.PureComponent<Props> { } render() { - const { - component, - createdAfterIncludesTime, - facets, - hideAuthorFacet, - openFacets, - query - } = this.props; + const { component, createdAfterIncludesTime, facets, openFacets, query } = this.props; const displayProjectsFacet = !component || !['TRK', 'BRC', 'DIR', 'DEV_PRJ'].includes(component.qualifier); - const displayAuthorFacet = !hideAuthorFacet && (!component || component.qualifier !== 'DEV'); - - const organizationKey = - (component && component.organization) || - (this.props.organization && this.props.organization.key); + const displayAuthorFacet = !component || component.qualifier !== 'DEV'; return ( <> @@ -214,7 +207,6 @@ export class Sidebar extends React.PureComponent<Props> { onChange={this.props.onFilterChange} onToggle={this.props.onFacetToggle} open={!!openFacets.rules} - organization={organizationKey} query={query} referencedRules={this.props.referencedRules} rules={query.rules} @@ -227,7 +219,6 @@ export class Sidebar extends React.PureComponent<Props> { onChange={this.props.onFilterChange} onToggle={this.props.onFacetToggle} open={!!openFacets.tags} - organization={organizationKey} query={query} stats={facets.tags} tags={query.tags} @@ -270,7 +261,6 @@ export class Sidebar extends React.PureComponent<Props> { onChange={this.props.onFilterChange} onToggle={this.props.onFacetToggle} open={!!openFacets.authors} - organization={organizationKey} query={query} stats={facets.authors} /> diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/StandardFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/StandardFacet.tsx index 541989aabf1..9657291c3d7 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/StandardFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/StandardFacet.tsx @@ -34,8 +34,9 @@ import { renderSansTop25Category, renderSonarSourceSecurityCategory } from '../../../helpers/security-standard'; +import { Facet } from '../../../types/issues'; import { SecurityStandard, Standards, StandardType } from '../../../types/security'; -import { Facet, formatFacetStat, Query, STANDARDS } from '../utils'; +import { formatFacetStat, Query, STANDARDS } from '../utils'; interface Props { cwe: string[]; diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx index a80b8af5154..16d6b93fa0a 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx @@ -25,7 +25,8 @@ import { highlightTerm } from 'sonar-ui-common/helpers/search'; import { searchIssueTags } from '../../../api/issues'; import { colors } from '../../../app/theme'; import ListStyleFacet from '../../../components/facet/ListStyleFacet'; -import { Facet, Query } from '../utils'; +import { Facet } from '../../../types/issues'; +import { Query } from '../utils'; interface Props { component: T.Component | undefined; @@ -34,7 +35,6 @@ interface Props { onChange: (changes: Partial<Query>) => void; onToggle: (property: string) => void; open: boolean; - organization: string | undefined; query: Query; stats: T.Dict<number> | undefined; tags: string[]; @@ -48,7 +48,6 @@ export default class TagFacet extends React.PureComponent<Props> { const project = component && ['TRK', 'VW', 'APP'].includes(component.qualifier) ? component.key : undefined; return searchIssueTags({ - organization: this.props.organization, project, ps: SEARCH_SIZE, q: query diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/ProjectFacet-test.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/ProjectFacet-test.tsx index bead8220531..4267fac4043 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/ProjectFacet-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/ProjectFacet-test.tsx @@ -23,7 +23,8 @@ import * as React from 'react'; import { getTree, searchProjects } from '../../../../api/components'; import { mockComponent } from '../../../../helpers/testMocks'; import { ComponentQualifier } from '../../../../types/component'; -import { Query, ReferencedComponent } from '../../utils'; +import { ReferencedComponent } from '../../../../types/issues'; +import { Query } from '../../utils'; import ProjectFacet from '../ProjectFacet'; jest.mock('../../../../api/components', () => ({ @@ -31,7 +32,6 @@ jest.mock('../../../../api/components', () => ({ searchProjects: jest.fn().mockResolvedValue({ components: [], facets: [], - organizations: [], paging: {} }) })); @@ -77,8 +77,8 @@ it('should handle search for projects in portfolio', async () => { describe("ListStyleFacet's renderers", () => { const components: ReferencedComponent[] = [ - { key: 'projectKey', name: 'First Project Name', organization: '', uuid: '141324' }, - { key: 'projectKey2', name: 'Second Project Name', organization: '', uuid: '643878' } + { key: 'projectKey', name: 'First Project Name', uuid: '141324' }, + { key: 'projectKey2', name: 'Second Project Name', uuid: '643878' } ]; const referencedComponents = keyBy(components, c => c.key); const wrapper = shallowRender({ referencedComponents }); diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/RuleFacet-test.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/RuleFacet-test.tsx new file mode 100644 index 00000000000..67f0c5835f6 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/RuleFacet-test.tsx @@ -0,0 +1,80 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +import { shallow } from 'enzyme'; +import * as React from 'react'; +import { searchRules } from '../../../../api/rules'; +import { mockReferencedRule } from '../../../../helpers/mocks/issues'; +import { mockRule } from '../../../../helpers/testMocks'; +import { Query } from '../../utils'; +import RuleFacet from '../RuleFacet'; + +jest.mock('../../../../api/rules', () => ({ + searchRules: jest.fn().mockResolvedValue({}) +})); + +it('should render correctly', () => { + expect(shallowRender()).toMatchSnapshot(); +}); + +it('should handle search', async () => { + const wrapper = shallowRender(); + + const query = 'query'; + + await wrapper.instance().handleSearch(query); + + expect(searchRules).toBeCalledWith(expect.objectContaining({ languages: 'js,java', q: query })); +}); + +describe('ListStyleFacet Renderers', () => { + const referencedRules = { r1: mockReferencedRule() }; + const instance = shallowRender({ referencedRules }).instance(); + + it('should include renderFacetItem', () => { + const rule = referencedRules.r1; + expect(instance.getRuleName('r1')).toBe(`(${rule.langName}) ${rule.name}`); + expect(instance.getRuleName('nonexistent')).toBe('nonexistent'); + }); + + it('should include renderSearchResult', () => { + const rule = mockRule(); + expect(instance.renderSearchResult(rule)).toBe(`(${rule.langName}) ${rule.name}`); + expect(instance.renderSearchResult(mockRule({ langName: '' }))).toBe(rule.name); + }); +}); + +function shallowRender(props: Partial<RuleFacet['props']> = {}) { + return shallow<RuleFacet>( + <RuleFacet + fetching={true} + languages={['js', 'java']} + loadSearchResultCount={jest.fn()} + onChange={jest.fn()} + onToggle={jest.fn()} + open={false} + query={{} as Query} + referencedRules={{}} + rules={['r1']} + stats={{}} + {...props} + /> + ); +} diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/Sidebar-test.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/Sidebar-test.tsx index a72ba4cb645..a74b9ba7238 100644 --- a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/Sidebar-test.tsx +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/Sidebar-test.tsx @@ -85,7 +85,6 @@ const renderSidebar = (props?: Partial<Sidebar['props']>) => { onFacetToggle={jest.fn()} onFilterChange={jest.fn()} openFacets={{}} - organization={undefined} query={{ types: [''] } as Query} referencedComponentsById={{}} referencedComponentsByKey={{}} diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/RuleFacet-test.tsx.snap b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/RuleFacet-test.tsx.snap new file mode 100644 index 00000000000..bfbc8e0c0e7 --- /dev/null +++ b/server/sonar-web/src/main/js/apps/issues/sidebar/__tests__/__snapshots__/RuleFacet-test.tsx.snap @@ -0,0 +1,30 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`should render correctly 1`] = ` +<ListStyleFacet + facetHeader="issues.facet.rules" + fetching={true} + getFacetItemText={[Function]} + getSearchResultKey={[Function]} + getSearchResultText={[Function]} + loadSearchResultCount={[Function]} + maxInitialItems={15} + maxItems={100} + minSearchLength={2} + onChange={[MockFunction]} + onSearch={[Function]} + onToggle={[MockFunction]} + open={false} + property="rules" + query={Object {}} + renderFacetItem={[Function]} + renderSearchResult={[Function]} + searchPlaceholder="search.search_for_rules" + stats={Object {}} + values={ + Array [ + "r1", + ] + } +/> +`; diff --git a/server/sonar-web/src/main/js/apps/issues/utils.ts b/server/sonar-web/src/main/js/apps/issues/utils.ts index a75278626fe..0e112d06186 100644 --- a/server/sonar-web/src/main/js/apps/issues/utils.ts +++ b/server/sonar-web/src/main/js/apps/issues/utils.ts @@ -32,6 +32,7 @@ import { import { scrollToElement } from 'sonar-ui-common/helpers/scrolling'; import { get, save } from 'sonar-ui-common/helpers/storage'; import { searchUsers } from '../../api/users'; +import { Facet, RawFacet } from '../../types/issues'; import { SecurityStandard, StandardType } from '../../types/security'; export interface Query { @@ -150,15 +151,6 @@ export function serializeQuery(query: Query): T.RawQuery { export const areQueriesEqual = (a: T.RawQuery, b: T.RawQuery) => queriesEqual(parseQuery(a), parseQuery(b)); -export interface RawFacet { - property: string; - values: Array<{ val: string; count: number }>; -} - -export interface Facet { - [value: string]: number; -} - export function mapFacet(facet: string) { const propertyMapping: T.Dict<string> = { modules: 'moduleUuids' @@ -192,23 +184,6 @@ export function formatFacetStat(stat: number | undefined) { return stat && formatMeasure(stat, 'SHORT_INT'); } -export interface ReferencedComponent { - key: string; - name: string; - organization: string; - path?: string; - uuid: string; -} - -export interface ReferencedLanguage { - name: string; -} - -export interface ReferencedRule { - langName?: string; - name: string; -} - export const searchAssignees = ( query: string, page = 1 diff --git a/server/sonar-web/src/main/js/components/SourceViewer/__tests__/__snapshots__/SourceViewerBase-test.tsx.snap b/server/sonar-web/src/main/js/components/SourceViewer/__tests__/__snapshots__/SourceViewerBase-test.tsx.snap index 6aa4a3556eb..6c3cbd2af18 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/__tests__/__snapshots__/SourceViewerBase-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/__tests__/__snapshots__/SourceViewerBase-test.tsx.snap @@ -84,11 +84,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -120,11 +118,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/LineIssuesList-test.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/LineIssuesList-test.tsx index 54255e0bef2..f204e58dfbf 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/LineIssuesList-test.tsx +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/LineIssuesList-test.tsx @@ -32,10 +32,8 @@ const issueBase: T.Issue = { flows: [], fromHotspot: false, message: '', - organization: '', project: '', projectName: '', - projectOrganization: '', projectKey: '', rule: '', ruleName: '', diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/Line-test.tsx.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/Line-test.tsx.snap index 864377427da..ec5a30fd9ec 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/Line-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/Line-test.tsx.snap @@ -65,11 +65,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -96,11 +94,9 @@ exports[`should render correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -207,11 +203,9 @@ exports[`should render correctly for last, new, and highlighted lines 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -238,11 +232,9 @@ exports[`should render correctly for last, new, and highlighted lines 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -364,11 +356,9 @@ exports[`should render correctly with coverage 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -395,11 +385,9 @@ exports[`should render correctly with coverage 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -567,11 +555,9 @@ exports[`should render correctly with duplication information 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -598,11 +584,9 @@ exports[`should render correctly with duplication information 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -694,11 +678,9 @@ exports[`should render correctly with issues info 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -725,11 +707,9 @@ exports[`should render correctly with issues info 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -789,11 +769,9 @@ exports[`should render correctly with issues info 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -820,11 +798,9 @@ exports[`should render correctly with issues info 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -916,11 +892,9 @@ exports[`should render correctly: no SCM 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -947,11 +921,9 @@ exports[`should render correctly: no SCM 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.tsx.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.tsx.snap index fa3ee7c6dba..13141eafff8 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineCode-test.tsx.snap @@ -64,11 +64,9 @@ exports[`render code 1`] = ` "key": "issue-1", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -95,11 +93,9 @@ exports[`render code 1`] = ` "key": "issue-2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.tsx.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.tsx.snap index 457c4cad762..a5ed57fdcf2 100644 --- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineIssuesList-test.tsx.snap @@ -17,11 +17,9 @@ exports[`render issues list 1`] = ` "fromHotspot": false, "key": "foo", "message": "", - "organization": "", "project": "", "projectKey": "", "projectName": "", - "projectOrganization": "", "rule": "", "ruleName": "", "secondaryLocations": Array [], @@ -50,11 +48,9 @@ exports[`render issues list 1`] = ` "fromHotspot": false, "key": "bar", "message": "", - "organization": "", "project": "", "projectKey": "", "projectName": "", - "projectOrganization": "", "rule": "", "ruleName": "", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/components/issue/__tests__/__snapshots__/IssueView-test.tsx.snap b/server/sonar-web/src/main/js/components/issue/__tests__/__snapshots__/IssueView-test.tsx.snap index 159ead79b11..dfa6de16cee 100644 --- a/server/sonar-web/src/main/js/components/issue/__tests__/__snapshots__/IssueView-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/issue/__tests__/__snapshots__/IssueView-test.tsx.snap @@ -22,11 +22,9 @@ exports[`should render hotspots correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -58,11 +56,9 @@ exports[`should render hotspots correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -121,11 +117,9 @@ exports[`should render issues correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -171,11 +165,9 @@ exports[`should render issues correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/components/issue/actions.ts b/server/sonar-web/src/main/js/components/issue/actions.ts index 978512ca3d4..ada7255b899 100644 --- a/server/sonar-web/src/main/js/components/issue/actions.ts +++ b/server/sonar-web/src/main/js/components/issue/actions.ts @@ -17,9 +17,9 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import { IssueResponse } from '../../api/issues'; import throwGlobalError from '../../app/utils/throwGlobalError'; import { parseIssueFromResponse } from '../../helpers/issues'; +import { IssueResponse } from '../../types/issues'; export const updateIssue = ( onChange: (issue: T.Issue) => void, diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.tsx index 0d062921417..2f703d48618 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.tsx @@ -19,7 +19,7 @@ */ import * as React from 'react'; import { translate, translateWithParameters } from 'sonar-ui-common/helpers/l10n'; -import { IssueResponse } from '../../../api/issues'; +import { IssueResponse } from '../../../types/issues'; import { updateIssue } from '../actions'; import IssueAssign from './IssueAssign'; import IssueCommentAction from './IssueCommentAction'; diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueAssign.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueAssign.tsx index 400bb63add8..33f554bacac 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueAssign.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueAssign.tsx @@ -27,10 +27,7 @@ import SetAssigneePopup from '../popups/SetAssigneePopup'; interface Props { isOpen: boolean; - issue: Pick< - T.Issue, - 'assignee' | 'assigneeActive' | 'assigneeAvatar' | 'assigneeName' | 'projectOrganization' - >; + issue: T.Issue; canAssign: boolean; onAssign: (login: string) => void; togglePopup: (popup: string, show?: boolean) => void; @@ -80,7 +77,7 @@ export default class IssueAssign extends React.PureComponent<Props> { closeOnEscape={true} onRequestClose={this.handleClose} open={this.props.isOpen && this.props.canAssign} - overlay={<SetAssigneePopup issue={this.props.issue} onSelect={this.props.onAssign} />}> + overlay={<SetAssigneePopup onSelect={this.props.onAssign} />}> <ButtonLink className="issue-action issue-action-with-options js-issue-assign" onClick={this.toggleAssign}> diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueMessage.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueMessage.tsx index e0ccc98b4f8..f45f7349ec4 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueMessage.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueMessage.tsx @@ -31,21 +31,12 @@ export interface IssueMessageProps { manualVulnerability: boolean; message: string; onOpenRule: WorkspaceContextShape['openRule']; - organization: string; ruleKey: string; ruleStatus?: RuleStatus; } export default function IssueMessage(props: IssueMessageProps) { - const { - engine, - engineName, - manualVulnerability, - message, - organization, - ruleKey, - ruleStatus - } = props; + const { engine, engineName, manualVulnerability, message, ruleKey, ruleStatus } = props; const ruleEngine = engineName ? engineName : engine; return ( @@ -54,7 +45,11 @@ export default function IssueMessage(props: IssueMessageProps) { <ButtonLink aria-label={translate('issue.why_this_issue.long')} className="issue-see-rule spacer-right text-baseline" - onClick={() => props.onOpenRule({ key: ruleKey, organization })}> + onClick={() => + props.onOpenRule({ + key: ruleKey + }) + }> {translate('issue.why_this_issue')} </ButtonLink> diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueSeverity.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueSeverity.tsx index 8c3ab1f4d58..eb9335541b0 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueSeverity.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueSeverity.tsx @@ -21,7 +21,8 @@ import * as React from 'react'; import { ButtonLink } from 'sonar-ui-common/components/controls/buttons'; import Toggler from 'sonar-ui-common/components/controls/Toggler'; import DropdownIcon from 'sonar-ui-common/components/icons/DropdownIcon'; -import { IssueResponse, setIssueSeverity } from '../../../api/issues'; +import { setIssueSeverity } from '../../../api/issues'; +import { IssueResponse } from '../../../types/issues'; import SeverityHelper from '../../shared/SeverityHelper'; import SetSeverityPopup from '../popups/SetSeverityPopup'; diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueTags.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueTags.tsx index 68be8b40a25..2e7fb8ad155 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueTags.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueTags.tsx @@ -29,7 +29,7 @@ import SetIssueTagsPopup from '../popups/SetIssueTagsPopup'; interface Props { canSetTags: boolean; isOpen: boolean; - issue: Pick<T.Issue, 'key' | 'projectOrganization' | 'tags'>; + issue: Pick<T.Issue, 'key' | 'tags'>; onChange: (issue: T.Issue) => void; togglePopup: (popup: string, show?: boolean) => void; } @@ -64,13 +64,7 @@ export default class IssueTags extends React.PureComponent<Props> { <Toggler onRequestClose={this.handleClose} open={this.props.isOpen} - overlay={ - <SetIssueTagsPopup - organization={issue.projectOrganization} - selectedTags={tags} - setTags={this.setTags} - /> - }> + overlay={<SetIssueTagsPopup selectedTags={tags} setTags={this.setTags} />}> <ButtonLink className="issue-action issue-action-with-options js-issue-edit-tags" onClick={this.toggleSetTags}> diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.tsx index c19554396a6..62587827389 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.tsx @@ -84,7 +84,6 @@ export default function IssueTitleBar(props: IssueTitleBarProps) { manualVulnerability={issue.fromHotspot && issue.type === 'VULNERABILITY'} message={issue.message} onOpenRule={openRule} - organization={issue.organization} ruleKey={issue.rule} ruleStatus={issue.ruleStatus as RuleStatus | undefined} /> diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueType.tsx b/server/sonar-web/src/main/js/components/issue/components/IssueType.tsx index f1cba97151b..1c6066f61b7 100644 --- a/server/sonar-web/src/main/js/components/issue/components/IssueType.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/IssueType.tsx @@ -23,8 +23,9 @@ import Toggler from 'sonar-ui-common/components/controls/Toggler'; import DropdownIcon from 'sonar-ui-common/components/icons/DropdownIcon'; import IssueTypeIcon from 'sonar-ui-common/components/icons/IssueTypeIcon'; import { translate } from 'sonar-ui-common/helpers/l10n'; -import { IssueResponse, setIssueType } from '../../../api/issues'; +import { setIssueType } from '../../../api/issues'; import { colors } from '../../../app/theme'; +import { IssueResponse } from '../../../types/issues'; import SetTypePopup from '../popups/SetTypePopup'; interface Props { diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueAssign-test.tsx b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueAssign-test.tsx index 8654ce3d0f6..f7d96bba152 100644 --- a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueAssign-test.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueAssign-test.tsx @@ -20,14 +20,14 @@ import { shallow } from 'enzyme'; import * as React from 'react'; import { click } from 'sonar-ui-common/helpers/testUtils'; +import { mockIssue } from '../../../../helpers/testMocks'; import IssueAssign from '../IssueAssign'; -const issue = { +const issue = mockIssue(false, { assignee: 'john', assigneeAvatar: 'gravatarhash', - assigneeName: 'John Doe', - projectOrganization: 'org' -}; + assigneeName: 'John Doe' +}); it('should render without the action when the correct rights are missing', () => { expect(shallowRender({ canAssign: false })).toMatchSnapshot(); @@ -38,7 +38,9 @@ it('should render with the action', () => { }); it('should render a fallback assignee display if assignee info are not available', () => { - expect(shallowRender({ issue: { projectOrganization: 'org' } })).toMatchSnapshot(); + expect( + shallowRender({ issue: mockIssue(false, { assignee: undefined, assigneeName: undefined }) }) + ).toMatchSnapshot(); }); it('should open the popup when the button is clicked', () => { diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.tsx b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.tsx index a53ad25f7c0..368e46f1d5c 100644 --- a/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.tsx +++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/IssueMessage-test.tsx @@ -40,7 +40,9 @@ it('should handle click correctly', () => { const onOpenRule = jest.fn(); const wrapper = shallowRender({ onOpenRule }); click(wrapper.find(ButtonLink)); - expect(onOpenRule).toBeCalledWith({ key: 'javascript:S1067', organization: 'myorg' }); + expect(onOpenRule).toBeCalledWith({ + key: 'javascript:S1067' + }); }); function shallowRender(props: Partial<IssueMessageProps> = {}) { @@ -49,7 +51,6 @@ function shallowRender(props: Partial<IssueMessageProps> = {}) { manualVulnerability={false} message="Reduce the number of conditional operators (4) used in the expression" onOpenRule={jest.fn()} - organization="myorg" ruleKey="javascript:S1067" {...props} /> diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueActionsBar-test.tsx.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueActionsBar-test.tsx.snap index 229651354a3..a63ade64730 100644 --- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueActionsBar-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueActionsBar-test.tsx.snap @@ -28,11 +28,9 @@ exports[`should render commentable correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -73,11 +71,9 @@ exports[`should render commentable correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -118,11 +114,9 @@ exports[`should render commentable correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -163,11 +157,9 @@ exports[`should render commentable correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -219,11 +211,9 @@ exports[`should render commentable correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -274,11 +264,9 @@ exports[`should render effort correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -318,11 +306,9 @@ exports[`should render effort correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -362,11 +348,9 @@ exports[`should render effort correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -406,11 +390,9 @@ exports[`should render effort correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -463,11 +445,9 @@ exports[`should render effort correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -517,11 +497,9 @@ exports[`should render issue correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -560,11 +538,9 @@ exports[`should render issue correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -603,11 +579,9 @@ exports[`should render issue correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -646,11 +620,9 @@ exports[`should render issue correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -693,11 +665,9 @@ exports[`should render issue correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -747,11 +717,9 @@ exports[`should render security hotspot correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -790,11 +758,9 @@ exports[`should render security hotspot correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -833,11 +799,9 @@ exports[`should render security hotspot correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -880,11 +844,9 @@ exports[`should render security hotspot correctly 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueAssign-test.tsx.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueAssign-test.tsx.snap index 324452de6ab..7f3fc48c7c2 100644 --- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueAssign-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueAssign-test.tsx.snap @@ -19,14 +19,6 @@ exports[`should open the popup when the button is clicked 2`] = ` open={true} overlay={ <Connect(withCurrentUser(SetAssigneePopup)) - issue={ - Object { - "assignee": "john", - "assigneeAvatar": "gravatarhash", - "assigneeName": "John Doe", - "projectOrganization": "org", - } - } onSelect={[MockFunction]} /> } @@ -68,11 +60,6 @@ exports[`should render a fallback assignee display if assignee info are not avai open={false} overlay={ <Connect(withCurrentUser(SetAssigneePopup)) - issue={ - Object { - "projectOrganization": "org", - } - } onSelect={[MockFunction]} /> } @@ -104,14 +91,6 @@ exports[`should render with the action 1`] = ` open={false} overlay={ <Connect(withCurrentUser(SetAssigneePopup)) - issue={ - Object { - "assignee": "john", - "assigneeAvatar": "gravatarhash", - "assigneeName": "John Doe", - "projectOrganization": "org", - } - } onSelect={[MockFunction]} /> } diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTags-test.tsx.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTags-test.tsx.snap index 33b1bf6a40b..001d1d6908f 100644 --- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTags-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTags-test.tsx.snap @@ -18,7 +18,6 @@ exports[`should open the popup when the button is clicked 2`] = ` open={true} overlay={ <SetIssueTagsPopup - organization="foo" selectedTags={ Array [ "mytag", @@ -56,7 +55,6 @@ exports[`should render with the action 1`] = ` open={false} overlay={ <SetIssueTagsPopup - organization="foo" selectedTags={ Array [ "mytag", diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.tsx.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.tsx.snap index 927066dc9da..2e401f7f8bd 100644 --- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.tsx.snap @@ -33,11 +33,9 @@ exports[`should render correctly: default 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -102,7 +100,6 @@ exports[`should render correctly: issue message 1`] = ` manualVulnerability={false} message="Reduce the number of conditional operators (4) used in the expression" onOpenRule={[Function]} - organization="myorg" ruleKey="javascript:S1067" /> `; @@ -140,11 +137,9 @@ exports[`should render correctly: with filter 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -217,11 +212,9 @@ exports[`should render correctly: with filter 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [], @@ -328,11 +321,9 @@ exports[`should render correctly: with multi locations 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ @@ -503,11 +494,9 @@ exports[`should render correctly: with multi locations and link 1`] = ` "key": "AVsae-CQS-9G3txfbFN2", "line": 25, "message": "Reduce the number of conditional operators (4) used in the expression", - "organization": "myorg", "project": "myproject", "projectKey": "foo", "projectName": "Foo", - "projectOrganization": "org", "rule": "javascript:S1067", "ruleName": "foo", "secondaryLocations": Array [ diff --git a/server/sonar-web/src/main/js/components/issue/popups/SetAssigneePopup.tsx b/server/sonar-web/src/main/js/components/issue/popups/SetAssigneePopup.tsx index 759c43169fd..da42ac63dd1 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/SetAssigneePopup.tsx +++ b/server/sonar-web/src/main/js/components/issue/popups/SetAssigneePopup.tsx @@ -31,7 +31,6 @@ import Avatar from '../../ui/Avatar'; interface Props { currentUser: T.CurrentUser; - issue: Pick<T.Issue, 'projectOrganization'>; onSelect: (login: string) => void; } diff --git a/server/sonar-web/src/main/js/components/issue/popups/SetIssueTagsPopup.tsx b/server/sonar-web/src/main/js/components/issue/popups/SetIssueTagsPopup.tsx index a4a29fd13fe..2a85bbf5d2e 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/SetIssueTagsPopup.tsx +++ b/server/sonar-web/src/main/js/components/issue/popups/SetIssueTagsPopup.tsx @@ -25,7 +25,6 @@ import { searchIssueTags } from '../../../api/issues'; import TagsSelector from '../../tags/TagsSelector'; interface Props { - organization: string; selectedTags: string[]; setTags: (tags: string[]) => void; } @@ -35,6 +34,7 @@ interface State { } const LIST_SIZE = 10; +const MAX_LIST_SIZE = 100; export default class SetIssueTagsPopup extends React.PureComponent<Props, State> { mounted = false; @@ -51,8 +51,7 @@ export default class SetIssueTagsPopup extends React.PureComponent<Props, State> onSearch = (query: string) => { return searchIssueTags({ q: query, - ps: Math.min(this.props.selectedTags.length - 1 + LIST_SIZE, 100), - organization: this.props.organization + ps: Math.min(this.props.selectedTags.length - 1 + LIST_SIZE, MAX_LIST_SIZE) }).then( (tags: string[]) => { if (this.mounted) { diff --git a/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetAssigneePopup-test.tsx b/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetAssigneePopup-test.tsx index 58cde836f8e..7049e67e90e 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetAssigneePopup-test.tsx +++ b/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetAssigneePopup-test.tsx @@ -47,11 +47,6 @@ it('should allow to search for a user on SQ', async () => { function shallowRender(props: Partial<SetAssigneePopup['props']> = {}) { return shallow( - <SetAssigneePopup - currentUser={mockLoggedInUser()} - issue={{ projectOrganization: 'foo' }} - onSelect={jest.fn()} - {...props} - /> + <SetAssigneePopup currentUser={mockLoggedInUser()} onSelect={jest.fn()} {...props} /> ); } diff --git a/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetIssueTagsPopup-test.tsx b/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetIssueTagsPopup-test.tsx index 41a8ffe526c..c0c02e38d4e 100644 --- a/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetIssueTagsPopup-test.tsx +++ b/server/sonar-web/src/main/js/components/issue/popups/__tests__/SetIssueTagsPopup-test.tsx @@ -22,9 +22,7 @@ import * as React from 'react'; import SetIssueTagsPopup from '../SetIssueTagsPopup'; it('should render tags popup correctly', () => { - const element = shallow( - <SetIssueTagsPopup organization="foo" selectedTags={['mytag']} setTags={jest.fn()} /> - ); + const element = shallow(<SetIssueTagsPopup selectedTags={['mytag']} setTags={jest.fn()} />); element.setState({ searchResult: ['mytag', 'test', 'second'] }); expect(element).toMatchSnapshot(); }); diff --git a/server/sonar-web/src/main/js/components/workspace/__tests__/Workspace-test.tsx b/server/sonar-web/src/main/js/components/workspace/__tests__/Workspace-test.tsx index 7d2e11d8126..8115b6eecce 100644 --- a/server/sonar-web/src/main/js/components/workspace/__tests__/Workspace-test.tsx +++ b/server/sonar-web/src/main/js/components/workspace/__tests__/Workspace-test.tsx @@ -79,19 +79,18 @@ it('should render correctly', () => { ).toMatchSnapshot('open component'); expect( shallowRender({ - rules: [{ key: 'foo', organization: 'default' }], + rules: [{ key: 'foo' }], open: { rule: 'foo' } }) ).toMatchSnapshot('open rule'); }); it('should correctly load data from local storage', () => { - const rule1 = { [TYPE_KEY]: WorkspaceTypes.Rule, key: 'foo', organization: 'default' }; + const rule1 = { [TYPE_KEY]: WorkspaceTypes.Rule, key: 'foo' }; const rule2 = { [TYPE_KEY]: WorkspaceTypes.Rule, key: 'baz', - name: 'Baz', - organization: 'default' + name: 'Baz' }; const component = { [TYPE_KEY]: WorkspaceTypes.Component, @@ -115,7 +114,7 @@ it('should correctly load data from local storage', () => { it('should correctly store data locally', () => { const wrapper = shallowRender({ components: [{ branchLike: mockBranch(), key: 'foo' }], - rules: [{ key: 'foo', organization: 'default' }] + rules: [{ key: 'foo' }] }); wrapper.instance().saveWorkspace(); expect((save as jest.Mock).mock.calls[0][1]).toMatchSnapshot(); @@ -129,7 +128,7 @@ it('should load rule engine names', async () => { it('should allow elements to be loaded and updated', () => { const component = { key: 'foo', branchLike: mockBranch() }; - const rule = { key: 'bar', organization: 'default' }; + const rule = { key: 'bar' }; const wrapper = shallowRender({ components: [component], rules: [rule] @@ -155,7 +154,7 @@ it('should allow elements to be loaded and updated', () => { it('should be resizable', () => { (get as jest.Mock).mockReturnValue( - JSON.stringify([{ [TYPE_KEY]: WorkspaceTypes.Rule, key: 'foo', organization: 'default' }]) + JSON.stringify([{ [TYPE_KEY]: WorkspaceTypes.Rule, key: 'foo' }]) ); const wrapper = shallowRender({ open: { rule: 'foo' } }); const instance = wrapper.instance(); @@ -180,8 +179,7 @@ it('should be resizable', () => { it('should be openable/collapsible', () => { const rule = { key: 'baz', - name: 'Baz', - organization: 'default' + name: 'Baz' }; const component = { branchLike: mockBranch(), diff --git a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/Workspace-test.tsx.snap b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/Workspace-test.tsx.snap index 9eea835f72d..b94880cf499 100644 --- a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/Workspace-test.tsx.snap +++ b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/Workspace-test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`should correctly store data locally 1`] = `"[{\\"branchLike\\":{\\"analysisDate\\":\\"2018-01-01\\",\\"excludedFromPurge\\":true,\\"isMain\\":false,\\"name\\":\\"branch-6.7\\"},\\"key\\":\\"foo\\",\\"__type__\\":\\"component\\"},{\\"key\\":\\"foo\\",\\"organization\\":\\"default\\",\\"__type__\\":\\"rule\\"}]"`; +exports[`should correctly store data locally 1`] = `"[{\\"branchLike\\":{\\"analysisDate\\":\\"2018-01-01\\",\\"excludedFromPurge\\":true,\\"isMain\\":false,\\"name\\":\\"branch-6.7\\"},\\"key\\":\\"foo\\",\\"__type__\\":\\"component\\"},{\\"key\\":\\"foo\\",\\"__type__\\":\\"rule\\"}]"`; exports[`should render correctly: default 1`] = ` <ContextProvider @@ -111,7 +111,6 @@ exports[`should render correctly: open rule 1`] = ` Array [ Object { "key": "foo", - "organization": "default", }, ] } @@ -127,7 +126,6 @@ exports[`should render correctly: open rule 1`] = ` rule={ Object { "key": "foo", - "organization": "default", } } /> diff --git a/server/sonar-web/src/main/js/components/workspace/context.ts b/server/sonar-web/src/main/js/components/workspace/context.ts index 2d29ae77984..5eae1a80466 100644 --- a/server/sonar-web/src/main/js/components/workspace/context.ts +++ b/server/sonar-web/src/main/js/components/workspace/context.ts @@ -31,7 +31,6 @@ export interface ComponentDescriptor { export interface RuleDescriptor { key: string; name?: string; - organization: string; } export interface WorkspaceContextShape { diff --git a/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts b/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts index 4e48d39c13a..48ae3ccba71 100644 --- a/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts +++ b/server/sonar-web/src/main/js/helpers/__tests__/urls-test.ts @@ -18,11 +18,13 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import { ComponentQualifier } from '../../types/component'; +import { IssueType } from '../../types/issues'; import { getComponentDrilldownUrl, getComponentIssuesUrl, getComponentOverviewUrl, getComponentSecurityHotspotsUrl, + getIssuesUrl, getQualityGatesUrl, getQualityGateUrl } from '../urls'; @@ -121,3 +123,13 @@ describe('#getQualityGate(s)Url', () => { expect(getQualityGateUrl('bar')).toEqual({ pathname: '/quality_gates/show/bar' }); }); }); + +describe('getIssuesUrl', () => { + it('should work as expected', () => { + const type = IssueType.Bug; + expect(getIssuesUrl({ type })).toEqual({ + pathname: '/issues', + query: { type } + }); + }); +}); diff --git a/server/sonar-web/src/main/js/helpers/issues.ts b/server/sonar-web/src/main/js/helpers/issues.ts index 68a5d9ee2f0..1262a3dd3ac 100644 --- a/server/sonar-web/src/main/js/helpers/issues.ts +++ b/server/sonar-web/src/main/js/helpers/issues.ts @@ -22,15 +22,10 @@ import BugIcon from 'sonar-ui-common/components/icons/BugIcon'; import CodeSmellIcon from 'sonar-ui-common/components/icons/CodeSmellIcon'; import SecurityHotspotIcon from 'sonar-ui-common/components/icons/SecurityHotspotIcon'; import VulnerabilityIcon from 'sonar-ui-common/components/icons/VulnerabilityIcon'; -import { IssueType } from '../types/issues'; +import { IssueType, RawIssue } from '../types/issues'; import { MetricKey } from '../types/metrics'; import { ISSUE_TYPES } from './constants'; -interface Comment { - login: string; - [x: string]: any; -} - interface Rule {} interface Component { @@ -38,29 +33,6 @@ interface Component { name: string; } -interface IssueBase { - severity: string; - [x: string]: any; -} - -export interface RawIssue extends IssueBase { - assignee?: string; - author?: string; - comments?: Array<Comment>; - component: string; - flows?: Array<{ - // `componentName` is not available in RawIssue - locations?: Array<T.Omit<T.FlowLocation, 'componentName'>>; - }>; - key: string; - line?: number; - project: string; - rule: string; - status: string; - subProject?: string; - textRange?: T.TextRange; -} - export function sortByType<T extends Pick<T.Issue, 'type'>>(issues: T[]): T[] { return sortBy(issues, issue => ISSUE_TYPES.indexOf(issue.type)); } diff --git a/server/sonar-web/src/main/js/helpers/mocks/issues.ts b/server/sonar-web/src/main/js/helpers/mocks/issues.ts new file mode 100644 index 00000000000..fe6e454a13f --- /dev/null +++ b/server/sonar-web/src/main/js/helpers/mocks/issues.ts @@ -0,0 +1,28 @@ +/* + * SonarQube + * Copyright (C) 2009-2020 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +import { ReferencedRule } from '../../types/issues'; + +export function mockReferencedRule(overrides: Partial<ReferencedRule> = {}): ReferencedRule { + return { + langName: 'Javascript', + name: 'RuleFoo', + ...overrides + }; +} diff --git a/server/sonar-web/src/main/js/helpers/testMocks.ts b/server/sonar-web/src/main/js/helpers/testMocks.ts index 4c7891aadf5..63857857911 100644 --- a/server/sonar-web/src/main/js/helpers/testMocks.ts +++ b/server/sonar-web/src/main/js/helpers/testMocks.ts @@ -407,11 +407,9 @@ export function mockIssue(withLocations = false, overrides: Partial<T.Issue> = { key: 'AVsae-CQS-9G3txfbFN2', line: 25, message: 'Reduce the number of conditional operators (4) used in the expression', - organization: 'myorg', project: 'myproject', projectKey: 'foo', projectName: 'Foo', - projectOrganization: 'org', rule: 'javascript:S1067', ruleName: 'foo', secondaryLocations: [], diff --git a/server/sonar-web/src/main/js/helpers/urls.ts b/server/sonar-web/src/main/js/helpers/urls.ts index 05864ca8404..1efdf8946aa 100644 --- a/server/sonar-web/src/main/js/helpers/urls.ts +++ b/server/sonar-web/src/main/js/helpers/urls.ts @@ -99,8 +99,8 @@ export function getPullRequestUrl(project: string, pullRequest: string): Locatio /** * Generate URL for a global issues page */ -export function getIssuesUrl(query: Query, organization?: string): Location { - const pathname = organization ? `/organizations/${organization}/issues` : '/issues'; +export function getIssuesUrl(query: Query): Location { + const pathname = '/issues'; return { pathname, query }; } diff --git a/server/sonar-web/src/main/js/types/issues.ts b/server/sonar-web/src/main/js/types/issues.ts index ee0613d6a57..f96dbacc264 100644 --- a/server/sonar-web/src/main/js/types/issues.ts +++ b/server/sonar-web/src/main/js/types/issues.ts @@ -29,3 +29,85 @@ export enum IssueScope { Main = 'MAIN', Test = 'TEST' } + +interface Comment { + login: string; + [x: string]: any; +} + +interface IssueBase { + severity: string; + [x: string]: any; +} + +export interface RawIssue extends IssueBase { + assignee?: string; + author?: string; + comments?: Array<Comment>; + component: string; + flows?: Array<{ + // `componentName` is not available in RawIssue + locations?: Array<T.Omit<T.FlowLocation, 'componentName'>>; + }>; + key: string; + line?: number; + project: string; + rule: string; + status: string; + subProject?: string; + textRange?: T.TextRange; +} + +export interface IssueResponse { + components?: Array<{ key: string; name: string }>; + issue: RawIssue; + rules?: Array<{}>; + users?: Array<T.UserBase>; +} + +export interface RawIssuesResponse { + components: ReferencedComponent[]; + effortTotal: number; + facets: RawFacet[]; + issues: RawIssue[]; + languages: ReferencedLanguage[]; + paging: T.Paging; + rules?: Array<{}>; + users?: Array<T.UserBase>; +} + +export interface FetchIssuesPromise { + components: ReferencedComponent[]; + effortTotal: number; + facets: RawFacet[]; + issues: T.Issue[]; + languages: ReferencedLanguage[]; + paging: T.Paging; + rules: ReferencedRule[]; + users: T.UserBase[]; +} + +export interface ReferencedComponent { + key: string; + name: string; + path?: string; + uuid: string; +} + +export interface ReferencedLanguage { + name: string; +} + +export interface ReferencedRule { + langName?: string; + name: string; +} + +export interface RawFacet { + property: string; + values: Array<{ val: string; count: number }>; +} + +export interface Facet { + [value: string]: number; +} diff --git a/server/sonar-web/src/main/js/types/types.d.ts b/server/sonar-web/src/main/js/types/types.d.ts index ffcae52a3ef..57075e79735 100644 --- a/server/sonar-web/src/main/js/types/types.d.ts +++ b/server/sonar-web/src/main/js/types/types.d.ts @@ -343,10 +343,8 @@ declare namespace T { fromHotspot: boolean; line?: number; message: string; - organization: string; project: string; projectName: string; - projectOrganization: string; projectKey: string; pullRequest?: string; resolution?: string; |