Skip to content
代码片段 群组 项目
提交 d70ce865 编辑于 作者: Frédéric Caplette's avatar Frédéric Caplette
浏览文件

Merge branch 'mokhax/417883/cleanup-ff-frontend' into 'master'

Remove usage of dismissMultipleVulnerabilities feature flag in FE code

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/127549



Merged-by: default avatarFrédéric Caplette <fcaplette@gitlab.com>
Approved-by: default avatarZamir Martins <zfilho@gitlab.com>
Approved-by: default avatarFrédéric Caplette <fcaplette@gitlab.com>
Reviewed-by: default avatarFrédéric Caplette <fcaplette@gitlab.com>
Co-authored-by: default avatarmo khan <mo@mokhan.ca>
No related branches found
No related tags found
无相关合并请求
...@@ -10,7 +10,6 @@ import { ...@@ -10,7 +10,6 @@ import {
GlLink, GlLink,
} from '@gitlab/ui'; } from '@gitlab/ui';
import * as Sentry from '@sentry/browser'; import * as Sentry from '@sentry/browser';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import eventHub from 'ee/security_dashboard/utils/event_hub'; import eventHub from 'ee/security_dashboard/utils/event_hub';
import { __, s__, n__ } from '~/locale'; import { __, s__, n__ } from '~/locale';
import toast from '~/vue_shared/plugins/global_toast'; import toast from '~/vue_shared/plugins/global_toast';
...@@ -29,7 +28,6 @@ export default { ...@@ -29,7 +28,6 @@ export default {
GlFormGroup, GlFormGroup,
GlLink, GlLink,
}, },
mixins: [glFeatureFlagMixin()],
inject: ['vulnerabilitiesQuery', 'vulnerabilitiesCountsQuery'], inject: ['vulnerabilitiesQuery', 'vulnerabilitiesCountsQuery'],
props: { props: {
selectedVulnerabilities: { selectedVulnerabilities: {
...@@ -176,7 +174,7 @@ export default { ...@@ -176,7 +174,7 @@ export default {
this.isSubmitting = true; this.isSubmitting = true;
if (this.isDismissedStatus && this.glFeatures.dismissMultipleVulnerabilities) { if (this.isDismissedStatus) {
return this.dismissMultipleVulnerabilities(); return this.dismissMultipleVulnerabilities();
} }
......
...@@ -17,7 +17,7 @@ import waitForPromises from 'helpers/wait_for_promises'; ...@@ -17,7 +17,7 @@ import waitForPromises from 'helpers/wait_for_promises';
import toast from '~/vue_shared/plugins/global_toast'; import toast from '~/vue_shared/plugins/global_toast';
import { VULNERABILITY_STATE_OBJECTS, DISMISSAL_REASONS } from 'ee/vulnerabilities/constants'; import { VULNERABILITY_STATE_OBJECTS, DISMISSAL_REASONS } from 'ee/vulnerabilities/constants';
import projectVulnerabilitiesQuery from 'ee/security_dashboard/graphql/queries/project_vulnerabilities.query.graphql'; import projectVulnerabilitiesQuery from 'ee/security_dashboard/graphql/queries/project_vulnerabilities.query.graphql';
import vulnerabilityDismiss from 'ee/security_dashboard/graphql/mutations/vulnerability_dismiss.mutation.graphql'; import vulnerabilityResolve from 'ee/security_dashboard/graphql/mutations/vulnerability_resolve.mutation.graphql';
import vulnerabilitiesDismiss from 'ee/security_dashboard/graphql/mutations/vulnerabilities_dismiss.mutation.graphql'; import vulnerabilitiesDismiss from 'ee/security_dashboard/graphql/mutations/vulnerabilities_dismiss.mutation.graphql';
import countsQuery from 'ee/security_dashboard/graphql/queries/vulnerability_severities_count.query.graphql'; import countsQuery from 'ee/security_dashboard/graphql/queries/vulnerability_severities_count.query.graphql';
...@@ -80,7 +80,6 @@ describe('Selection Summary component', () => { ...@@ -80,7 +80,6 @@ describe('Selection Summary component', () => {
apolloProvider, apolloProvider,
vulnerabilitiesQuery, vulnerabilitiesQuery,
vulnerabilitiesCountsQuery, vulnerabilitiesCountsQuery,
dismissMultipleVulnerabilities = true,
} = {}) => { } = {}) => {
wrapper = shallowMountExtended(SelectionSummary, { wrapper = shallowMountExtended(SelectionSummary, {
apolloProvider, apolloProvider,
...@@ -97,7 +96,6 @@ describe('Selection Summary component', () => { ...@@ -97,7 +96,6 @@ describe('Selection Summary component', () => {
provide: { provide: {
vulnerabilitiesQuery, vulnerabilitiesQuery,
vulnerabilitiesCountsQuery, vulnerabilitiesCountsQuery,
glFeatures: { dismissMultipleVulnerabilities },
}, },
}); });
}; };
...@@ -304,7 +302,7 @@ describe('Selection Summary component', () => { ...@@ -304,7 +302,7 @@ describe('Selection Summary component', () => {
}); });
}); });
describe.each(Object.entries(VULNERABILITY_STATE_OBJECTS))( describe.each(Object.entries(VULNERABILITY_STATE_OBJECTS_WITHOUT_DISMISSED))(
'state dropdown change - %s', 'state dropdown change - %s',
(state, { action, mutation }) => { (state, { action, mutation }) => {
const selectedVulnerabilities = [ const selectedVulnerabilities = [
...@@ -333,18 +331,17 @@ describe('Selection Summary component', () => { ...@@ -333,18 +331,17 @@ describe('Selection Summary component', () => {
createComponent({ createComponent({
apolloProvider, apolloProvider,
selectedVulnerabilities, selectedVulnerabilities,
dismissMultipleVulnerabilities: false,
}); });
}); });
it(`does not emit vulnerability-updated event - ${action}`, async () => { it(`does not emit vulnerability-updated event - ${action}`, async () => {
await submitForm({ state, dismissalReason: 'false_positive', comment: 'test' }); await submitForm({ state });
await waitForPromises(); await waitForPromises();
expect(wrapper.emitted()['vulnerability-updated']).toBeUndefined(); expect(wrapper.emitted()['vulnerability-updated']).toBeUndefined();
}); });
it(`shows alert - ${action}`, async () => { it(`shows alert - ${action}`, async () => {
await submitForm({ state, dismissalReason: 'false_positive', comment: 'test' }); await submitForm({ state });
await waitForPromises(); await waitForPromises();
expect(findGlAlert().text()).toMatchInterpolatedText( expect(findGlAlert().text()).toMatchInterpolatedText(
...@@ -390,15 +387,13 @@ describe('Selection Summary component', () => { ...@@ -390,15 +387,13 @@ describe('Selection Summary component', () => {
createComponent({ createComponent({
apolloProvider, apolloProvider,
selectedVulnerabilities, selectedVulnerabilities,
dismissMultipleVulnerabilities: false,
}); });
}); });
it(`calls the mutation with the expected data and emits an update for each vulnerability - ${action}`, async () => { it(`calls the mutation with the expected data and emits an update for each vulnerability - ${action}`, async () => {
const mockComment = 'test comment'; const mockComment = 'test comment';
const mockDismissalReason = 'mitigating_control';
await submitForm({ state, comment: mockComment, dismissalReason: mockDismissalReason }); await submitForm({ state, comment: mockComment });
await waitForPromises(); await waitForPromises();
selectedVulnerabilities.forEach((v, i) => { selectedVulnerabilities.forEach((v, i) => {
expect(wrapper.emitted()['vulnerabilities-updated'][i][0]).toEqual([v.id]); expect(wrapper.emitted()['vulnerabilities-updated'][i][0]).toEqual([v.id]);
...@@ -408,10 +403,6 @@ describe('Selection Summary component', () => { ...@@ -408,10 +403,6 @@ describe('Selection Summary component', () => {
comment: mockComment, comment: mockComment,
}; };
if (state === 'dismissed') {
mutationPayload.dismissalReason = mockDismissalReason.toUpperCase();
}
expect(requestHandler).toHaveBeenCalledWith(expect.objectContaining(mutationPayload)); expect(requestHandler).toHaveBeenCalledWith(expect.objectContaining(mutationPayload));
}); });
...@@ -423,14 +414,14 @@ describe('Selection Summary component', () => { ...@@ -423,14 +414,14 @@ describe('Selection Summary component', () => {
expect(cacheClearSpy).not.toHaveBeenCalled(); expect(cacheClearSpy).not.toHaveBeenCalled();
await submitForm({ state, dismissalReason: 'false_positive', comment: 'test' }); await submitForm({ state });
await waitForPromises(); await waitForPromises();
expect(cacheClearSpy).toHaveBeenCalledTimes(1); expect(cacheClearSpy).toHaveBeenCalledTimes(1);
}); });
it(`calls the toaster - ${action}`, async () => { it(`calls the toaster - ${action}`, async () => {
await submitForm({ state, dismissalReason: 'false_positive', comment: 'test' }); await submitForm({ state });
await waitForPromises(); await waitForPromises();
// Workaround for the detected state, which shows as "needs triage" in the UI but uses // Workaround for the detected state, which shows as "needs triage" in the UI but uses
// "detected" behind the scenes. // "detected" behind the scenes.
...@@ -441,23 +432,15 @@ describe('Selection Summary component', () => { ...@@ -441,23 +432,15 @@ describe('Selection Summary component', () => {
}); });
it(`the buttons are unclickable during form submission - ${action}`, async () => { it(`the buttons are unclickable during form submission - ${action}`, async () => {
const areElementsDisabled = () => { const areElementsDisabled = () =>
const areGeneralElementDisabled = findSubmitButton().props('loading') &&
findSubmitButton().props('loading') && findCancelButton().props('disabled') &&
findCancelButton().props('disabled') && findStatusListbox().props('disabled') &&
findStatusListbox().props('disabled') && findCommentFormInput().attributes('disabled') === 'true';
findCommentFormInput().attributes('disabled') === 'true';
if (state === 'dismissed') {
return areGeneralElementDisabled && findDismissalReasonListbox().props('disabled');
}
return areGeneralElementDisabled;
};
expect(findSubmitButton().props('disabled')).toBeDefined(); expect(findSubmitButton().props('disabled')).toBeDefined();
await submitForm({ state, dismissalReason: 'false_positive', comment: 'test' }); await submitForm({ state });
expect(areElementsDisabled()).toBe(true); expect(areElementsDisabled()).toBe(true);
...@@ -470,7 +453,7 @@ describe('Selection Summary component', () => { ...@@ -470,7 +453,7 @@ describe('Selection Summary component', () => {
const spy = jest.fn(); const spy = jest.fn();
eventHub.$on('vulnerabilities-updated', spy); eventHub.$on('vulnerabilities-updated', spy);
await submitForm({ state, dismissalReason: 'false_positive', comment: 'test' }); await submitForm({ state });
await waitForPromises(); await waitForPromises();
expect(spy).toHaveBeenCalled(); expect(spy).toHaveBeenCalled();
...@@ -648,19 +631,17 @@ describe('Selection Summary component', () => { ...@@ -648,19 +631,17 @@ describe('Selection Summary component', () => {
describe('refetch queries', () => { describe('refetch queries', () => {
it('uses expected queries with refetchQueries', async () => { it('uses expected queries with refetchQueries', async () => {
const selectedVulnerabilities = [{}, {}, {}]; const selectedVulnerabilities = [{}, {}, {}];
const requestHandler = jest.fn().mockResolvedValue({ data: { vulnerabilityDismiss: {} } }); const requestHandler = jest.fn().mockResolvedValue({ data: { vulnerabilityResolve: {} } });
createComponent({ createComponent({
apolloProvider: createApolloProvider([vulnerabilityDismiss, requestHandler]), apolloProvider: createApolloProvider([vulnerabilityResolve, requestHandler]),
selectedVulnerabilities, selectedVulnerabilities,
vulnerabilitiesQuery: projectVulnerabilitiesQuery, vulnerabilitiesQuery: projectVulnerabilitiesQuery,
vulnerabilitiesCountsQuery: countsQuery, vulnerabilitiesCountsQuery: countsQuery,
dismissMultipleVulnerabilities: false,
}); });
await submitForm({ await submitForm({
state: 'dismissed', state: 'resolved',
dismissalReason: 'false_positive',
comment: 'test', comment: 'test',
}); });
...@@ -668,7 +649,6 @@ describe('Selection Summary component', () => { ...@@ -668,7 +649,6 @@ describe('Selection Summary component', () => {
expect(requestHandler).toHaveBeenCalledWith( expect(requestHandler).toHaveBeenCalledWith(
expect.objectContaining({ expect.objectContaining({
comment: 'test', comment: 'test',
dismissalReason: 'FALSE_POSITIVE',
id: undefined, id: undefined,
}), }),
); );
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册