diff --git a/app/controllers/projects/cycle_analytics_controller.rb b/app/controllers/projects/cycle_analytics_controller.rb index f3dea88862f219ed2a6b256b4e82121a7a29052d..da0bda19602cc2f7f56044f8a5af2b8505b9dc44 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 0000000000000000000000000000000000000000..7854fc234b1c513024f5710094bd1eefad056093 --- /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 0000000000000000000000000000000000000000..83eca1b0f512b200c71b3e08aff31fc5dcf6f883 --- /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