diff --git a/ee/app/assets/javascripts/security_orchestration/components/policies/constants.js b/ee/app/assets/javascripts/security_orchestration/components/policies/constants.js index 74cd63745c503e0d37e3c4a422eaad22b1d87acc..2ae5376cc4111a8e4d6fa2699d5ec90de882ebc4 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policies/constants.js +++ b/ee/app/assets/javascripts/security_orchestration/components/policies/constants.js @@ -42,11 +42,3 @@ export const EMPTY_LIST_DESCRIPTION = s__( export const EMPTY_POLICY_PROJECT_DESCRIPTION = s__( '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', -); diff --git a/ee/app/assets/javascripts/security_orchestration/components/policies/project_modal.vue b/ee/app/assets/javascripts/security_orchestration/components/policies/project_modal.vue index 753558fa9b37630b31b86785376548082a931c8d..0c6ba9517bd172898ae5354c866d842cb50ec1ec 100644 --- a/ee/app/assets/javascripts/security_orchestration/components/policies/project_modal.vue +++ b/ee/app/assets/javascripts/security_orchestration/components/policies/project_modal.vue @@ -4,10 +4,6 @@ import { s__, __ } from '~/locale'; import linkSecurityPolicyProject from '../../graphql/mutations/link_security_policy_project.mutation.graphql'; import unlinkSecurityPolicyProject from '../../graphql/mutations/unlink_security_policy_project.mutation.graphql'; import InstanceProjectSelector from './instance_project_selector.vue'; -import { - POLICY_PROJECT_LINK_ERROR_MESSAGE, - POLICY_PROJECT_LINK_SUCCESS_MESSAGE, -} from './constants'; export default { i18n: { @@ -16,9 +12,11 @@ export default { header: s__('SecurityOrchestration|Select security project'), }, 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'), - errorLink: POLICY_PROJECT_LINK_ERROR_MESSAGE, + errorLink: s__( + 'SecurityOrchestration|An error occurred assigning your security policy project', + ), errorUnlink: s__( 'SecurityOrchestration|An error occurred unassigning your security policy project', ), @@ -98,9 +96,11 @@ export default { variant: 'success', hasPolicyProject: true, }); - } catch { + } catch (e) { + const text = e?.message || this.$options.i18n.save.errorLink; + this.$emit('project-updated', { - text: this.$options.i18n.save.errorLink, + text, variant: 'danger', hasPolicyProject: false, }); @@ -129,9 +129,11 @@ export default { variant: 'success', hasPolicyProject: false, }); - } catch { + } catch (e) { + const text = e?.message || this.$options.i18n.save.errorUnlink; + this.$emit('project-updated', { - text: this.$options.i18n.save.errorUnlink, + text, variant: 'danger', hasPolicyProject: true, }); diff --git a/ee/spec/frontend/security_orchestration/components/policies/policy_project_modal_spec.js b/ee/spec/frontend/security_orchestration/components/policies/project_modal_spec.js similarity index 92% rename from ee/spec/frontend/security_orchestration/components/policies/policy_project_modal_spec.js rename to ee/spec/frontend/security_orchestration/components/policies/project_modal_spec.js index 6e1c21112f7748158cb1a109ba6caaaac46027c6..734553b80a656651b0055afaf0b7d3631474cbeb 100644 --- a/ee/spec/frontend/security_orchestration/components/policies/policy_project_modal_spec.js +++ b/ee/spec/frontend/security_orchestration/components/policies/project_modal_spec.js @@ -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 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 { - POLICY_PROJECT_LINK_ERROR_MESSAGE, - POLICY_PROJECT_LINK_SUCCESS_MESSAGE, -} from 'ee/security_orchestration/components/policies/constants'; import { mockLinkSecurityPolicyProjectResponses, mockUnlinkSecurityPolicyProjectResponses, @@ -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.'; it.each` - mutationResult | expectedVariant | expectedText | expectedHasPolicyProject - ${'success'} | ${'success'} | ${'Security policy project was unlinked successfully'} | ${false} - ${'failure'} | ${'danger'} | ${'An error occurred unassigning your security policy project'} | ${true} + mutationResult | expectedVariant | expectedText | expectedHasPolicyProject + ${'success'} | ${'success'} | ${'Security policy project was unlinked successfully'} | ${false} + ${'failure'} | ${'danger'} | ${'unlink failed'} | ${true} `( 'unlinks a project and handles $mutationResult case', async ({ mutationResult, expectedVariant, expectedText, expectedHasPolicyProject }) => { @@ -182,9 +178,9 @@ describe('ProjectModal Component', () => { }); it.each` - messageType | factoryFn | text | variant | hasPolicyProject | selectedProject - ${'success'} | ${createWrapperAndSelectProject} | ${POLICY_PROJECT_LINK_SUCCESS_MESSAGE} | ${'success'} | ${true} | ${sampleProject} - ${'failure'} | ${() => createWrapperAndSelectProject({ mutationResult: mockLinkSecurityPolicyProjectResponses.failure })} | ${POLICY_PROJECT_LINK_ERROR_MESSAGE} | ${'danger'} | ${false} | ${undefined} + messageType | factoryFn | text | variant | hasPolicyProject | selectedProject + ${'success'} | ${createWrapperAndSelectProject} | ${'Security policy project was linked successfully'} | ${'success'} | ${true} | ${sampleProject} + ${'failure'} | ${() => createWrapperAndSelectProject({ mutationResult: mockLinkSecurityPolicyProjectResponses.failure })} | ${'link failed'} | ${'danger'} | ${false} | ${undefined} `( 'emits an event with $messageType message', async ({ factoryFn, text, variant, hasPolicyProject, selectedProject }) => { diff --git a/ee/spec/frontend/security_orchestration/mocks/mock_apollo.js b/ee/spec/frontend/security_orchestration/mocks/mock_apollo.js index 03c7e5a2b9f79a07868210f07b3808588449c4db..0d0e05404937b28588267fc494e911fcf296a139 100644 --- a/ee/spec/frontend/security_orchestration/mocks/mock_apollo.js +++ b/ee/spec/frontend/security_orchestration/mocks/mock_apollo.js @@ -57,13 +57,13 @@ export const mockLinkSecurityPolicyProjectResponses = { success: jest.fn().mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: [] } } }), failure: jest .fn() - .mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: ['mutation failed'] } } }), + .mockResolvedValue({ data: { securityPolicyProjectAssign: { errors: ['link failed'] } } }), }; export const mockUnlinkSecurityPolicyProjectResponses = { success: jest.fn().mockResolvedValue({ data: { securityPolicyProjectUnassign: { errors: [] } } }), failure: jest.fn().mockResolvedValue({ - data: { securityPolicyProjectUnassign: { errors: ['mutation failed'] } }, + data: { securityPolicyProjectUnassign: { errors: ['unlink failed'] } }, }), };