diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb index 018109b2d4ad9e84e83f211b29bc3c7a795ab167..abb862e3da750c81f81777c671a2e4c09cb4a1c9 100644 --- a/app/helpers/environments_helper.rb +++ b/app/helpers/environments_helper.rb @@ -19,69 +19,9 @@ def environments_folder_list_view_data(project, folder) } end - def custom_metrics_available?(project) - can?(current_user, :admin_project, project) - end - - def metrics_data(project, environment) - return {} if Feature.enabled?(:remove_monitor_metrics) - - metrics_data = {} - metrics_data.merge!(project_metrics_data(project)) if project - metrics_data.merge!(environment_metrics_data(environment)) if environment - metrics_data.merge!(project_and_environment_metrics_data(project, environment)) if project && environment - metrics_data.merge!(static_metrics_data) - - metrics_data - end - def can_destroy_environment?(environment) can?(current_user, :destroy_environment, environment) end - - private - - def project_metrics_data(project) - return {} unless project - - { - 'settings_path' => edit_project_settings_integration_path(project, 'prometheus'), - 'clusters_path' => project_clusters_path(project), - 'default_branch' => project.default_branch, - 'project_path' => project_path(project), - 'tags_path' => project_tags_path(project), - 'custom_metrics_path' => project_prometheus_metrics_path(project), - 'validate_query_path' => validate_query_project_prometheus_metrics_path(project), - 'custom_metrics_available' => custom_metrics_available?(project).to_s - } - end - - def environment_metrics_data(environment) - return {} unless environment - - { - 'current_environment_name' => environment.name, - 'has_metrics' => environment.has_metrics?.to_s, - 'environment_state' => environment.state.to_s - } - end - - def project_and_environment_metrics_data(project, environment) - return {} unless project && environment - - { - 'deployments_endpoint' => project_environment_deployments_path(project, environment, format: :json), - 'operations_settings_path' => project_settings_operations_path(project), - 'can_access_operations_settings' => can?(current_user, :admin_operations, project).to_s - } - end - - def static_metrics_data - { - 'documentation_path' => help_page_path('administration/monitoring/prometheus/index'), - 'add_dashboard_documentation_path' => help_page_path('operations/metrics/dashboards/index', anchor: 'add-a-new-dashboard-to-your-project') - } - end end EnvironmentsHelper.prepend_mod_with('EnvironmentsHelper') diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb index 512b5c8b31693785c31e5654e2a1e5181508dca5..546e0a9ff559b256af055b36948500ace93794b0 100644 --- a/spec/helpers/environments_helper_spec.rb +++ b/spec/helpers/environments_helper_spec.rb @@ -10,91 +10,6 @@ let_it_be(:project, reload: true) { create(:project, :repository) } let_it_be(:environment) { create(:environment, :with_folders, folder: folder_name, project: project) } - describe '#metrics_data', feature_category: :metrics do - before do - stub_feature_flags(remove_monitor_metrics: false) - - # This is so that this spec also passes in EE. - allow(helper).to receive(:current_user).and_return(user) - allow(helper).to receive(:can?).and_return(true) - end - - let(:metrics_data) { helper.metrics_data(project, environment) } - - it 'returns data' do - expect(metrics_data).to include( - 'settings_path' => edit_project_settings_integration_path(project, 'prometheus'), - 'clusters_path' => project_clusters_path(project), - 'current_environment_name' => environment.name, - 'documentation_path' => help_page_path('administration/monitoring/prometheus/index'), - 'add_dashboard_documentation_path' => help_page_path('operations/metrics/dashboards/index', anchor: 'add-a-new-dashboard-to-your-project'), - 'deployments_endpoint' => project_environment_deployments_path(project, environment, format: :json), - 'default_branch' => 'master', - 'project_path' => project_path(project), - 'tags_path' => project_tags_path(project), - 'has_metrics' => environment.has_metrics?.to_s, - 'environment_state' => environment.state, - 'custom_metrics_path' => project_prometheus_metrics_path(project), - 'validate_query_path' => validate_query_project_prometheus_metrics_path(project), - 'custom_metrics_available' => 'true', - 'operations_settings_path' => project_settings_operations_path(project), - 'can_access_operations_settings' => 'true' - ) - end - - context 'without admin_operations permission' do - before do - allow(helper).to receive(:can?) - .with(user, :admin_operations, project) - .and_return(false) - end - - specify do - expect(metrics_data).to include( - 'can_access_operations_settings' => 'false' - ) - end - end - - context 'when the environment is not available' do - before do - environment.stop - end - - subject { metrics_data } - - it { is_expected.to include('environment_state' => 'stopped') } - end - - context 'when metrics dashboard feature is unavailable' do - before do - stub_feature_flags(remove_monitor_metrics: true) - end - - it 'does not return data' do - expect(metrics_data).to be_empty - end - end - end - - describe '#custom_metrics_available?', feature_category: :metrics do - subject { helper.custom_metrics_available?(project) } - - before do - project.add_maintainer(user) - - allow(helper).to receive(:current_user).and_return(user) - - allow(helper).to receive(:can?) - .with(user, :admin_project, project) - .and_return(true) - end - - it 'returns true' do - expect(subject).to eq(true) - end - end - describe '#environments_folder_list_view_data' do subject { helper.environments_folder_list_view_data(project, folder_name) }