diff --git a/app/models/analytics/cycle_analytics/value_stream.rb b/app/models/analytics/cycle_analytics/value_stream.rb index 59c68393d74add424ecd02856fdba543e26d500b..31e06075bcbbdde01fd0c0c510c6816382d98b00 100644 --- a/app/models/analytics/cycle_analytics/value_stream.rb +++ b/app/models/analytics/cycle_analytics/value_stream.rb @@ -21,6 +21,7 @@ class ValueStream < ApplicationRecord scope :preload_associated_models, -> { includes(:namespace, stages: [:namespace, :end_event_label, :start_event_label]) } + scope :order_by_name_asc, -> { order(arel_table[:name].lower.asc) } after_save :ensure_aggregation_record_presence diff --git a/ee/app/controllers/concerns/ee/analytics/cycle_analytics/value_stream_actions.rb b/ee/app/controllers/concerns/ee/analytics/cycle_analytics/value_stream_actions.rb index a6def35adec9e9dc98d0e598d19164f32bf67b63..ba6d3f658fbff6b28e40cf00e529cb9f798f81d2 100644 --- a/ee/app/controllers/concerns/ee/analytics/cycle_analytics/value_stream_actions.rb +++ b/ee/app/controllers/concerns/ee/analytics/cycle_analytics/value_stream_actions.rb @@ -105,7 +105,7 @@ def stage_update_params end def value_streams - @value_streams ||= namespace.value_streams.preload_associated_models + @value_streams ||= namespace.value_streams.preload_associated_models.order_by_name_asc end def serialize_value_stream(result) diff --git a/spec/models/analytics/cycle_analytics/value_stream_spec.rb b/spec/models/analytics/cycle_analytics/value_stream_spec.rb index e32fbef30ae9d612f2fd38aee0850f752bdf9463..f290cf25ae6711b144d5a8b25318910a5f799741 100644 --- a/spec/models/analytics/cycle_analytics/value_stream_spec.rb +++ b/spec/models/analytics/cycle_analytics/value_stream_spec.rb @@ -27,6 +27,20 @@ end end + describe 'scopes' do + let_it_be(:group) { create(:group) } + + describe '.order_by_name_asc' do + let_it_be(:stream1) { create(:cycle_analytics_value_stream, namespace: group, name: 'Bbb') } + let_it_be(:stream2) { create(:cycle_analytics_value_stream, namespace: group, name: 'aaa') } + let_it_be(:stream3) { create(:cycle_analytics_value_stream, namespace: group, name: 'Aaa') } + + it 'returns in case-insensitive alphabetical order' do + expect(described_class.order_by_name_asc).to eq [stream2, stream3, stream1] + end + end + end + describe 'ordering of stages' do let(:group) { create(:group) } let(:value_stream) do