Commit 9f2869bf authored by Arturo Herrero's avatar Arturo Herrero

Merge branch 'vsa-fix-update-empty-vsa' into 'master'

Fix updating value stream record without stages

See merge request gitlab-org/gitlab!59176
parents 83b6738d fbe9a501
......@@ -23,7 +23,7 @@ class Groups::Analytics::CycleAnalytics::ValueStreamsController < Groups::Analyt
end
def update
value_stream = Analytics::CycleAnalytics::GroupValueStream.find(params[:id])
value_stream = @group.value_streams.find(params[:id])
result = Analytics::CycleAnalytics::ValueStreams::UpdateService.new(group: @group, params: update_params, current_user: current_user, value_stream: value_stream).execute
if result.success?
......
......@@ -37,6 +37,7 @@ module Analytics
raw_params[:stages_attributes] = raw_params.delete(:stages) || []
raw_params[:stages_attributes].map! { |attrs| build_stage_attributes(attrs) }
remove_in_memory_stage_ids!(raw_params[:stages_attributes])
set_relative_positions!(raw_params[:stages_attributes])
raw_params
......@@ -44,7 +45,7 @@ module Analytics
def build_stage_attributes(stage_attributes)
stage_attributes[:group] = group
return stage_attributes if stage_attributes[:custom]
return stage_attributes if Gitlab::Utils.to_boolean(stage_attributes[:custom])
# if we're persisting a default stage, ignore the user provided attributes and use our attributes
use_default_stage_params(stage_attributes)
......@@ -71,6 +72,14 @@ module Analytics
stage_attribute[:relative_position] = increment * i
end
end
def remove_in_memory_stage_ids!(stage_attributes)
stage_attributes.each do |stage_attribute|
if Gitlab::Analytics::CycleAnalytics::DefaultStages.names.include?(stage_attribute[:id])
stage_attribute.delete(:id)
end
end
end
end
end
end
......
---
title: Fix updating value stream without persisted stages
merge_request: 59176
author:
type: fixed
......@@ -111,6 +111,28 @@ RSpec.describe Groups::Analytics::CycleAnalytics::ValueStreamsController do
expect(json_response['name']).to eq('new name')
end
context 'when updating value stream with in-memory stages' do
let(:value_stream_params) do
{
name: 'updated name',
stages: [
{
id: 'issue', # in memory stage
name: 'issue',
custom: false
}
]
}
end
it 'returns a successful 200 response' do
put :update, params: { id: value_stream.id, group_id: group, value_stream: value_stream_params }
expect(response).to have_gitlab_http_status(:ok)
expect(json_response['name']).to eq('updated name')
end
end
context 'with stages' do
let!(:stage) { create(:cycle_analytics_group_stage, group: group, value_stream: value_stream, name: 'stage 1', custom: true) }
......
......@@ -70,7 +70,7 @@ RSpec.describe Analytics::CycleAnalytics::ValueStreams::CreateService do
context 'when creating a default stage' do
before do
params[:stages] = [{ name: 'plan', custom: false }]
params[:stages] = [{ id: 'plan', name: 'plan', custom: false }]
end
let(:custom_stage) { subject.payload[:value_stream].stages.first }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment