Skip to content
代码片段 群组 项目
未验证 提交 20261d45 编辑于 作者: Alexander Turinske's avatar Alexander Turinske
浏览文件

Update errors emitted by un/linking project

- use custom error message
- default to old error otherwise
- update tests

Changelog: changed

EE: true
上级 1c2e2e33
No related branches found
No related tags found
无相关合并请求
...@@ -42,11 +42,3 @@ export const EMPTY_LIST_DESCRIPTION = s__( ...@@ -42,11 +42,3 @@ export const EMPTY_LIST_DESCRIPTION = s__(
export const EMPTY_POLICY_PROJECT_DESCRIPTION = s__( export const EMPTY_POLICY_PROJECT_DESCRIPTION = s__(
'SecurityOrchestration|This %{namespaceType} is not linked to a security policy project', 'SecurityOrchestration|This %{namespaceType} is not linked to a security policy project',
); );
export const POLICY_PROJECT_LINK_SUCCESS_MESSAGE = s__(
'SecurityOrchestration|Security policy project was linked successfully',
);
export const POLICY_PROJECT_LINK_ERROR_MESSAGE = s__(
'SecurityOrchestration|An error occurred assigning your security policy project',
);
...@@ -4,10 +4,6 @@ import { s__, __ } from '~/locale'; ...@@ -4,10 +4,6 @@ import { s__, __ } from '~/locale';
import linkSecurityPolicyProject from '../../graphql/mutations/link_security_policy_project.mutation.graphql'; import linkSecurityPolicyProject from '../../graphql/mutations/link_security_policy_project.mutation.graphql';
import unlinkSecurityPolicyProject from '../../graphql/mutations/unlink_security_policy_project.mutation.graphql'; import unlinkSecurityPolicyProject from '../../graphql/mutations/unlink_security_policy_project.mutation.graphql';
import InstanceProjectSelector from './instance_project_selector.vue'; import InstanceProjectSelector from './instance_project_selector.vue';
import {
POLICY_PROJECT_LINK_ERROR_MESSAGE,
POLICY_PROJECT_LINK_SUCCESS_MESSAGE,
} from './constants';
export default { export default {
i18n: { i18n: {
...@@ -16,9 +12,11 @@ export default { ...@@ -16,9 +12,11 @@ export default {
header: s__('SecurityOrchestration|Select security project'), header: s__('SecurityOrchestration|Select security project'),
}, },
save: { save: {
okLink: POLICY_PROJECT_LINK_SUCCESS_MESSAGE, okLink: s__('SecurityOrchestration|Security policy project was linked successfully'),
okUnlink: s__('SecurityOrchestration|Security policy project was unlinked successfully'), okUnlink: s__('SecurityOrchestration|Security policy project was unlinked successfully'),
errorLink: POLICY_PROJECT_LINK_ERROR_MESSAGE, errorLink: s__(
'SecurityOrchestration|An error occurred assigning your security policy project',
),
errorUnlink: s__( errorUnlink: s__(
'SecurityOrchestration|An error occurred unassigning your security policy project', 'SecurityOrchestration|An error occurred unassigning your security policy project',
), ),
...@@ -98,9 +96,11 @@ export default { ...@@ -98,9 +96,11 @@ export default {
variant: 'success', variant: 'success',
hasPolicyProject: true, hasPolicyProject: true,
}); });
} catch { } catch (e) {
const text = e?.message || this.$options.i18n.save.errorLink;
this.$emit('project-updated', { this.$emit('project-updated', {
text: this.$options.i18n.save.errorLink, text,
variant: 'danger', variant: 'danger',
hasPolicyProject: false, hasPolicyProject: false,
}); });
...@@ -129,9 +129,11 @@ export default { ...@@ -129,9 +129,11 @@ export default {
variant: 'success', variant: 'success',
hasPolicyProject: false, hasPolicyProject: false,
}); });
} catch { } catch (e) {
const text = e?.message || this.$options.i18n.save.errorUnlink;
this.$emit('project-updated', { this.$emit('project-updated', {
text: this.$options.i18n.save.errorUnlink, text,
variant: 'danger', variant: 'danger',
hasPolicyProject: true, hasPolicyProject: true,
}); });
......
...@@ -9,10 +9,6 @@ import ProjectModal from 'ee/security_orchestration/components/policies/project_ ...@@ -9,10 +9,6 @@ import ProjectModal from 'ee/security_orchestration/components/policies/project_
import linkSecurityPolicyProject from 'ee/security_orchestration/graphql/mutations/link_security_policy_project.mutation.graphql'; import linkSecurityPolicyProject from 'ee/security_orchestration/graphql/mutations/link_security_policy_project.mutation.graphql';
import unlinkSecurityPolicyProject from 'ee/security_orchestration/graphql/mutations/unlink_security_policy_project.mutation.graphql'; import unlinkSecurityPolicyProject from 'ee/security_orchestration/graphql/mutations/unlink_security_policy_project.mutation.graphql';
import InstanceProjectSelector from 'ee/security_orchestration/components/policies/instance_project_selector.vue'; import InstanceProjectSelector from 'ee/security_orchestration/components/policies/instance_project_selector.vue';
import {
POLICY_PROJECT_LINK_ERROR_MESSAGE,
POLICY_PROJECT_LINK_SUCCESS_MESSAGE,
} from 'ee/security_orchestration/components/policies/constants';
import { import {
mockLinkSecurityPolicyProjectResponses, mockLinkSecurityPolicyProjectResponses,
mockUnlinkSecurityPolicyProjectResponses, mockUnlinkSecurityPolicyProjectResponses,
...@@ -122,9 +118,9 @@ describe('ProjectModal Component', () => { ...@@ -122,9 +118,9 @@ describe('ProjectModal Component', () => {
'Unlinking a security project removes all policies stored in the linked security project. Save to confirm this action.'; 'Unlinking a security project removes all policies stored in the linked security project. Save to confirm this action.';
it.each` it.each`
mutationResult | expectedVariant | expectedText | expectedHasPolicyProject mutationResult | expectedVariant | expectedText | expectedHasPolicyProject
${'success'} | ${'success'} | ${'Security policy project was unlinked successfully'} | ${false} ${'success'} | ${'success'} | ${'Security policy project was unlinked successfully'} | ${false}
${'failure'} | ${'danger'} | ${'An error occurred unassigning your security policy project'} | ${true} ${'failure'} | ${'danger'} | ${'unlink failed'} | ${true}
`( `(
'unlinks a project and handles $mutationResult case', 'unlinks a project and handles $mutationResult case',
async ({ mutationResult, expectedVariant, expectedText, expectedHasPolicyProject }) => { async ({ mutationResult, expectedVariant, expectedText, expectedHasPolicyProject }) => {
...@@ -182,9 +178,9 @@ describe('ProjectModal Component', () => { ...@@ -182,9 +178,9 @@ describe('ProjectModal Component', () => {
}); });
it.each` it.each`
messageType | factoryFn | text | variant | hasPolicyProject | selectedProject messageType | factoryFn | text | variant | hasPolicyProject | selectedProject
${'success'} | ${createWrapperAndSelectProject} | ${POLICY_PROJECT_LINK_SUCCESS_MESSAGE} | ${'success'} | ${true} | ${sampleProject} ${'success'} | ${createWrapperAndSelectProject} | ${'Security policy project was linked successfully'} | ${'success'} | ${true} | ${sampleProject}
${'failure'} | ${() => createWrapperAndSelectProject({ mutationResult: mockLinkSecurityPolicyProjectResponses.failure })} | ${POLICY_PROJECT_LINK_ERROR_MESSAGE} | ${'danger'} | ${false} | ${undefined} ${'failure'} | ${() => createWrapperAndSelectProject({ mutationResult: mockLinkSecurityPolicyProjectResponses.failure })} | ${'link failed'} | ${'danger'} | ${false} | ${undefined}
`( `(
'emits an event with $messageType message', 'emits an event with $messageType message',
async ({ factoryFn, text, variant, hasPolicyProject, selectedProject }) => { async ({ factoryFn, text, variant, hasPolicyProject, selectedProject }) => {
......
...@@ -57,13 +57,13 @@ export const mockLinkSecurityPolicyProjectResponses = { ...@@ -57,13 +57,13 @@ export const mockLinkSecurityPolicyProjectResponses = {
success: jest.fn().mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: [] } } }), success: jest.fn().mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: [] } } }),
failure: jest failure: jest
.fn() .fn()
.mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: ['mutation failed'] } } }), .mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: ['link failed'] } } }),
}; };
export const mockUnlinkSecurityPolicyProjectResponses = { export const mockUnlinkSecurityPolicyProjectResponses = {
success: jest.fn().mockResolvedValue({ data: { securityPolicyProjectUnassign: { errors: [] } } }), success: jest.fn().mockResolvedValue({ data: { securityPolicyProjectUnassign: { errors: [] } } }),
failure: jest.fn().mockResolvedValue({ failure: jest.fn().mockResolvedValue({
data: { securityPolicyProjectUnassign: { errors: ['mutation failed'] } }, data: { securityPolicyProjectUnassign: { errors: ['unlink failed'] } },
}), }),
}; };
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册