From c6452cd47a8a323e0589db49c2f3cb8f90e8aa9e Mon Sep 17 00:00:00 2001 From: Felipe Artur <fcardozo@gitlab.com> Date: Tue, 18 Apr 2023 14:13:01 +0000 Subject: [PATCH] Allow to select project value stream using URL parameter Select project value stream using value_stream_id parameter on URL. Changelog: fixed EE: true --- .../projects/cycle_analytics_controller.rb | 11 +++++--- .../ee/projects/cycle_analytics_controller.rb | 18 +++++++++++++ .../cycle_analytics_controller_spec.rb | 25 +++++++++++++++++++ 3 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 ee/app/controllers/ee/projects/cycle_analytics_controller.rb create mode 100644 ee/spec/requests/ee/projects/cycle_analytics_controller_spec.rb diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb index f3dea88862f2..da0bda19602c 100644 --- a/app/controllers/projects/cycle_analytics_controller.rb +++ b/app/controllers/projects/cycle_analytics_controller.rb @@ -6,10 +6,10 @@ class Projects::CycleAnalyticsController < Projects::ApplicationController include CycleAnalyticsParams include GracefulTimeoutHandling include ProductAnalyticsTracking + include Gitlab::Utils::StrongMemoize extend ::Gitlab::Utils::Override before_action :authorize_read_cycle_analytics! - before_action :load_value_stream, only: :show track_event :show, name: 'p_analytics_valuestream', @@ -51,12 +51,13 @@ def show override :all_cycle_analytics_params def all_cycle_analytics_params - super.merge({ namespace: @project.project_namespace, value_stream: @value_stream }) + super.merge({ namespace: @project.project_namespace, value_stream: value_stream }) end - def load_value_stream - @value_stream = Analytics::CycleAnalytics::ValueStream.build_default_value_stream(@project.project_namespace) + def value_stream + Analytics::CycleAnalytics::ValueStream.build_default_value_stream(@project.project_namespace) end + strong_memoize_attr :value_stream def cycle_analytics_json { @@ -74,3 +75,5 @@ def tracking_project_source project end end + +Projects::CycleAnalyticsController.prepend_mod diff --git a/ee/app/controllers/ee/projects/cycle_analytics_controller.rb b/ee/app/controllers/ee/projects/cycle_analytics_controller.rb new file mode 100644 index 000000000000..7854fc234b1c --- /dev/null +++ b/ee/app/controllers/ee/projects/cycle_analytics_controller.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module EE + module Projects + module CycleAnalyticsController + include ::Gitlab::Utils::StrongMemoize + extend ::Gitlab::Utils::Override + + override :value_stream + def value_stream + return super unless params[:value_stream_id] + + project.project_namespace.value_streams.find_by_id(params[:value_stream_id]) + end + strong_memoize_attr :value_stream + end + end +end diff --git a/ee/spec/requests/ee/projects/cycle_analytics_controller_spec.rb b/ee/spec/requests/ee/projects/cycle_analytics_controller_spec.rb new file mode 100644 index 000000000000..83eca1b0f512 --- /dev/null +++ b/ee/spec/requests/ee/projects/cycle_analytics_controller_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Projects::CycleAnalyticsController, feature_category: :product_analytics do + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + + before do + sign_in(user) + project.add_maintainer(user) + end + + context 'with project and value stream id params' do + let(:value_stream) { create(:cycle_analytics_value_stream, namespace: project.project_namespace) } + + it 'builds request params with project and value stream' do + expect_next_instance_of(Gitlab::Analytics::CycleAnalytics::RequestParams) do |instance| + expect(instance).to have_attributes(namespace: project.project_namespace, value_stream: value_stream) + end + + get project_cycle_analytics_path(project, value_stream_id: value_stream) + end + end +end -- GitLab