From 76b4da0c44d7dd40ae4990c55c3977d19f3bd2af Mon Sep 17 00:00:00 2001 From: Marc Saleiko <msaleiko@gitlab.com> Date: Wed, 24 Apr 2024 14:02:09 +0000 Subject: [PATCH] Adds tickets_confidential_by_default to controller and update sevrice Adds processing of tickets_confidential_by_default field to both ServiceDeskController and ServiceDeskSettings::UpdateService and pushes the feature flag service_desk_tickets_confidentiality to the frontend on the project settings page. --- .../projects/service_desk_controller.rb | 4 +++- app/controllers/projects_controller.rb | 1 + .../service_desk_settings/update_service.rb | 17 ++++++++++---- .../settings/service_desk_setting_spec.rb | 3 ++- .../projects/service_desk_controller_spec.rb | 9 +++++--- .../update_service_spec.rb | 23 +++++++++++++++++-- 6 files changed, 45 insertions(+), 12 deletions(-) diff --git a/app/controllers/projects/service_desk_controller.rb b/app/controllers/projects/service_desk_controller.rb index a53e8859ee665..841946596cfda 100644 --- a/app/controllers/projects/service_desk_controller.rb +++ b/app/controllers/projects/service_desk_controller.rb @@ -35,6 +35,7 @@ def allowed_update_attributes project_key reopen_issue_on_external_participant_note add_external_participants_from_cc + tickets_confidential_by_default ] end @@ -49,7 +50,8 @@ def service_desk_attributes outgoing_name: service_desk_settings&.outgoing_name, project_key: service_desk_settings&.project_key, reopen_issue_on_external_participant_note: service_desk_settings&.reopen_issue_on_external_participant_note, - add_external_participants_from_cc: service_desk_settings&.add_external_participants_from_cc + add_external_participants_from_cc: service_desk_settings&.add_external_participants_from_cc, + tickets_confidential_by_default: service_desk_settings&.tickets_confidential_by_default } end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 772cafb0bb919..4ee996d14a1f1 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -41,6 +41,7 @@ class ProjectsController < Projects::ApplicationController push_frontend_feature_flag(:remove_monitor_metrics, @project) push_frontend_feature_flag(:explain_code_chat, current_user) push_frontend_feature_flag(:issue_email_participants, @project) + push_frontend_feature_flag(:service_desk_tickets_confidentiality, @project) push_frontend_feature_flag(:edit_branch_rules, @project) # TODO: We need to remove the FF eventually when we rollout page_specific_styles push_frontend_feature_flag(:page_specific_styles, current_user) diff --git a/app/services/service_desk_settings/update_service.rb b/app/services/service_desk_settings/update_service.rb index f8b825923f374..8139ccc92f077 100644 --- a/app/services/service_desk_settings/update_service.rb +++ b/app/services/service_desk_settings/update_service.rb @@ -9,7 +9,14 @@ def execute params[:project_key] = nil if params[:project_key].blank? - apply_feature_flag_restrictions! + apply_feature_flag_restrictions!( + feature_flag: :issue_email_participants, + field: :add_external_participants_from_cc + ) + apply_feature_flag_restrictions!( + feature_flag: :service_desk_tickets_confidentiality, + field: :tickets_confidential_by_default + ) # We want to know when custom email got enabled write_log_message = params[:custom_email_enabled].present? && !settings.custom_email_enabled? @@ -25,11 +32,11 @@ def execute private - def apply_feature_flag_restrictions! - return if Feature.enabled?(:issue_email_participants, project) - return unless params.include?(:add_external_participants_from_cc) + def apply_feature_flag_restrictions!(feature_flag:, field:) + return if Feature.enabled?(feature_flag, project) + return unless params.include?(field) - params.delete(:add_external_participants_from_cc) + params.delete(field) end end end diff --git a/spec/features/projects/settings/service_desk_setting_spec.rb b/spec/features/projects/settings/service_desk_setting_spec.rb index 5401219585315..78bf8a8208b89 100644 --- a/spec/features/projects/settings/service_desk_setting_spec.rb +++ b/spec/features/projects/settings/service_desk_setting_spec.rb @@ -102,9 +102,10 @@ end end - it 'pushes issue_email_participants feature flag to frontend' do + it 'pushes feature flags to frontend' do visit edit_project_path(project) expect(page).to have_pushed_frontend_feature_flags(issueEmailParticipants: true) + expect(page).to have_pushed_frontend_feature_flags(serviceDeskTicketsConfidentiality: true) end end diff --git a/spec/requests/projects/service_desk_controller_spec.rb b/spec/requests/projects/service_desk_controller_spec.rb index ce79ad2751407..f51ee78fa6fd7 100644 --- a/spec/requests/projects/service_desk_controller_spec.rb +++ b/spec/requests/projects/service_desk_controller_spec.rb @@ -82,7 +82,8 @@ put project_service_desk_path(project, format: :json), params: { issue_template_key: 'service_desk', reopen_issue_on_external_participant_note: true, - add_external_participants_from_cc: true + add_external_participants_from_cc: true, + tickets_confidential_by_default: false } settings = project.service_desk_setting @@ -90,12 +91,14 @@ expect(settings).to have_attributes( issue_template_key: 'service_desk', reopen_issue_on_external_participant_note: true, - add_external_participants_from_cc: true + add_external_participants_from_cc: true, + tickets_confidential_by_default: false ) expect(json_response).to include( 'issue_template_key' => 'service_desk', 'reopen_issue_on_external_participant_note' => true, - 'add_external_participants_from_cc' => true + 'add_external_participants_from_cc' => true, + 'tickets_confidential_by_default' => false ) end diff --git a/spec/services/service_desk_settings/update_service_spec.rb b/spec/services/service_desk_settings/update_service_spec.rb index 2c310bad2470f..e2a000201475a 100644 --- a/spec/services/service_desk_settings/update_service_spec.rb +++ b/spec/services/service_desk_settings/update_service_spec.rb @@ -18,7 +18,8 @@ outgoing_name: 'some name', project_key: 'foo', reopen_issue_on_external_participant_note: true, - add_external_participants_from_cc: true + add_external_participants_from_cc: true, + tickets_confidential_by_default: false } end @@ -30,7 +31,8 @@ outgoing_name: 'some name', project_key: 'foo', reopen_issue_on_external_participant_note: true, - add_external_participants_from_cc: true + add_external_participants_from_cc: true, + tickets_confidential_by_default: false ) end @@ -68,6 +70,23 @@ ) end end + + context 'when service_desk_tickets_confidentiality feature flag is disabled' do + before do + stub_feature_flags(service_desk_tickets_confidentiality: false) + end + + it 'updates service desk setting but not tickets_confidential_by_default value' do + response = described_class.new(settings.project, user, params).execute + + expect(response).to be_success + expect(settings.reset).to have_attributes( + outgoing_name: 'some name', + project_key: 'foo', + tickets_confidential_by_default: true + ) + end + end end context 'when project_key is an empty string' do -- GitLab