Fix project feature being deleted when updating project with invalid visibility level
This commit is contained in:
parent
de14e9c203
commit
056c42cca5
|
|
@ -161,7 +161,7 @@ class Project < ActiveRecord::Base
|
||||||
has_many :notification_settings, as: :source, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent
|
has_many :notification_settings, as: :source, dependent: :delete_all # rubocop:disable Cop/ActiveRecordDependent
|
||||||
|
|
||||||
has_one :import_data, class_name: 'ProjectImportData', inverse_of: :project, autosave: true
|
has_one :import_data, class_name: 'ProjectImportData', inverse_of: :project, autosave: true
|
||||||
has_one :project_feature
|
has_one :project_feature, inverse_of: :project
|
||||||
has_one :statistics, class_name: 'ProjectStatistics'
|
has_one :statistics, class_name: 'ProjectStatistics'
|
||||||
|
|
||||||
# Container repositories need to remove data from the container registry,
|
# Container repositories need to remove data from the container registry,
|
||||||
|
|
@ -190,7 +190,7 @@ class Project < ActiveRecord::Base
|
||||||
has_one :auto_devops, class_name: 'ProjectAutoDevops'
|
has_one :auto_devops, class_name: 'ProjectAutoDevops'
|
||||||
|
|
||||||
accepts_nested_attributes_for :variables, allow_destroy: true
|
accepts_nested_attributes_for :variables, allow_destroy: true
|
||||||
accepts_nested_attributes_for :project_feature
|
accepts_nested_attributes_for :project_feature, update_only: true
|
||||||
accepts_nested_attributes_for :import_data
|
accepts_nested_attributes_for :import_data
|
||||||
accepts_nested_attributes_for :auto_devops
|
accepts_nested_attributes_for :auto_devops
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,8 @@ class ProjectFeature < ActiveRecord::Base
|
||||||
# http://stackoverflow.com/questions/1540645/how-to-disable-default-scope-for-a-belongs-to
|
# http://stackoverflow.com/questions/1540645/how-to-disable-default-scope-for-a-belongs-to
|
||||||
belongs_to :project, -> { unscope(where: :pending_delete) }
|
belongs_to :project, -> { unscope(where: :pending_delete) }
|
||||||
|
|
||||||
|
validates :project, presence: true
|
||||||
|
|
||||||
validate :repository_children_level
|
validate :repository_children_level
|
||||||
|
|
||||||
default_value_for :builds_access_level, value: ENABLED, allows_nil: false
|
default_value_for :builds_access_level, value: ENABLED, allows_nil: false
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,10 @@ module Projects
|
||||||
|
|
||||||
success
|
success
|
||||||
else
|
else
|
||||||
error('Project could not be updated!')
|
model_errors = project.errors.full_messages.to_sentence
|
||||||
|
error_message = model_errors.presence || 'Project could not be updated!'
|
||||||
|
|
||||||
|
error(error_message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: Fix project feature being deleted when updating project with invalid visibility
|
||||||
|
level
|
||||||
|
merge_request:
|
||||||
|
author:
|
||||||
|
type: fixed
|
||||||
|
|
@ -57,6 +57,21 @@ describe Projects::UpdateService, '#execute' do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'When project visibility is higher than parent group' do
|
||||||
|
let(:group) { create(:group, visibility_level: Gitlab::VisibilityLevel::INTERNAL) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
project.update(namespace: group, visibility_level: group.visibility_level)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not update project visibility level' do
|
||||||
|
result = update_project(project, admin, visibility_level: Gitlab::VisibilityLevel::PUBLIC)
|
||||||
|
|
||||||
|
expect(result).to eq({ status: :error, message: 'Visibility level public is not allowed in a internal group.' })
|
||||||
|
expect(project.reload).to be_internal
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'when updating project that has forks' do
|
describe 'when updating project that has forks' do
|
||||||
|
|
@ -159,8 +174,10 @@ describe Projects::UpdateService, '#execute' do
|
||||||
it 'returns an error result when record cannot be updated' do
|
it 'returns an error result when record cannot be updated' do
|
||||||
result = update_project(project, admin, { name: 'foo&bar' })
|
result = update_project(project, admin, { name: 'foo&bar' })
|
||||||
|
|
||||||
expect(result).to eq({ status: :error,
|
expect(result).to eq({
|
||||||
message: 'Project could not be updated!' })
|
status: :error,
|
||||||
|
message: "Name can contain only letters, digits, emojis, '_', '.', dash, space. It must start with letter, digit, emoji or '_'."
|
||||||
|
})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue