});
};
- mockFacetDetailResponse = (facetsQuery: string): RawFacet[] => {
- return facetsQuery.split(',').map((name: string): RawFacet => {
+ mockFacetDetailResponse = (query: RequestData): RawFacet[] => {
+ const facets = (query.facets ?? '').split(',');
+ const types: Exclude<IssueType, IssueType.SecurityHotspot>[] = (
+ query.types ?? 'BUG,CODE_SMELL,VULNERABILITY'
+ ).split(',');
+ return facets.map((name: string): RawFacet => {
if (name === 'owaspTop10-2021') {
return this.owasp2021FacetList();
}
};
}
if (name === 'languages') {
+ const counters = {
+ [IssueType.Bug]: { java: 4100, ts: 500 },
+ [IssueType.CodeSmell]: { java: 21000, ts: 2000 },
+ [IssueType.Vulnerability]: { java: 111, ts: 674 },
+ };
return {
property: name,
values: [
{
val: 'java',
- count: 25211,
+ count: types.reduce<number>((acc, type) => acc + counters[type].java, 0),
},
{
val: 'ts',
- count: 3174,
+ count: types.reduce<number>((acc, type) => acc + counters[type].ts, 0),
},
],
};
};
handleSearchIssues = (query: RequestData): Promise<RawIssuesResponse> => {
- const facets = this.mockFacetDetailResponse((query.facets ?? '') as string);
+ const facets = this.mockFacetDetailResponse(query);
// Filter list (only supports assignee, type and severity)
const filteredList = this.list
})
).not.toBeInTheDocument();
});
+
+ it('should update collapsed facets with filter change', async () => {
+ const user = userEvent.setup();
+
+ renderIssueApp();
+
+ await user.click(await ui.languageFacet.find());
+ expect(await ui.languageFacetList.find()).toBeInTheDocument();
+ expect(
+ within(ui.languageFacetList.get()).getByRole('checkbox', { name: 'java' })
+ ).toHaveTextContent('java25short_number_suffix.k');
+ expect(
+ within(ui.languageFacetList.get()).getByRole('checkbox', { name: 'ts' })
+ ).toHaveTextContent('ts3.2short_number_suffix.k');
+
+ await user.click(ui.languageFacet.get());
+ expect(ui.languageFacetList.query()).not.toBeInTheDocument();
+ await user.click(ui.vulnerabilityIssueTypeFilter.get());
+ await user.click(ui.languageFacet.get());
+ expect(await ui.languageFacetList.find()).toBeInTheDocument();
+ expect(
+ within(ui.languageFacetList.get()).getByRole('checkbox', { name: 'java' })
+ ).toHaveTextContent('java111');
+ expect(
+ within(ui.languageFacetList.get()).getByRole('checkbox', { name: 'ts' })
+ ).toHaveTextContent('ts674');
+ });
});
});
import EmptySearch from '../../../components/common/EmptySearch';
import FiltersHeader from '../../../components/common/FiltersHeader';
import ScreenPositionHelper from '../../../components/common/ScreenPositionHelper';
-import { Button } from '../../../components/controls/buttons';
import ButtonToggle from '../../../components/controls/ButtonToggle';
import Checkbox from '../../../components/controls/Checkbox';
import HelpTooltip from '../../../components/controls/HelpTooltip';
import ListFooter from '../../../components/controls/ListFooter';
+import { Button } from '../../../components/controls/buttons';
import Suggestions from '../../../components/embed-docs-modal/Suggestions';
import withIndexationGuard from '../../../components/hoc/withIndexationGuard';
import { Location, Router, withRouter } from '../../../components/hoc/withRouter';
import Sidebar from '../sidebar/Sidebar';
import '../styles.css';
import {
+ Query,
+ STANDARDS,
areMyIssuesSelected,
areQueriesEqual,
getOpen,
getOpenIssue,
parseFacets,
parseQuery,
- Query,
saveMyIssues,
serializeQuery,
shouldOpenSonarSourceSecurityFacet,
shouldOpenStandardsChildFacet,
shouldOpenStandardsFacet,
- STANDARDS,
} from '../utils';
import BulkChangeModal, { MAX_PAGE_SIZE } from './BulkChangeModal';
import IssueHeader from './IssueHeader';
if (issues.length > 0) {
selected = openIssue ? openIssue.key : issues[0].key;
}
- this.setState((state) => ({
+ this.setState({
cannotShowOpenIssue: Boolean(openIssueKey && !openIssue),
effortTotal,
- facets: { ...state.facets, ...parseFacets(facets) },
+ facets: parseFacets(facets),
loading: false,
locationsNavigator: true,
issues,
selected,
selectedFlowIndex: 0,
selectedLocationIndex: undefined,
- }));
+ });
}
return issues;
},
clearStatusFacet: byRole('button', { name: 'clear_x_filter.issues.facet.statuses' }),
openStatusFilter: byRole('checkbox', { name: 'issue.status.OPEN' }),
confirmedStatusFilter: byRole('checkbox', { name: 'issue.status.CONFIRMED' }),
+ languageFacet: byRole('button', { name: 'issues.facet.languages' }),
ruleFacet: byRole('button', { name: 'issues.facet.rules' }),
clearRuleFacet: byRole('button', { name: 'clear_x_filter.issues.facet.rules' }),
tagFacet: byRole('button', { name: 'issues.facet.tags' }),
clearAllFilters: byRole('button', { name: 'clear_all_filters' }),
ruleFacetList: byRole('list', { name: 'rules' }),
+ languageFacetList: byRole('list', { name: 'languages' }),
ruleFacetSearch: byRole('searchbox', { name: 'search.search_for_rules' }),
};