diff options
Diffstat (limited to 'spec/services/projects/update_service_spec.rb')
-rw-r--r-- | spec/services/projects/update_service_spec.rb | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb index 989426fde8b..760cd85bf71 100644 --- a/spec/services/projects/update_service_spec.rb +++ b/spec/services/projects/update_service_spec.rb @@ -127,11 +127,22 @@ RSpec.describe Projects::UpdateService do end context 'when updated by an admin' do - it 'updates the project to public' do - result = update_project(project, admin, visibility_level: Gitlab::VisibilityLevel::PUBLIC) + context 'when admin mode is enabled', :enable_admin_mode do + it 'updates the project to public' do + result = update_project(project, admin, visibility_level: Gitlab::VisibilityLevel::PUBLIC) - expect(result).to eq({ status: :success }) - expect(project).to be_public + expect(result).to eq({ status: :success }) + expect(project).to be_public + end + end + + context 'when admin mode is disabled' do + it 'does not update the project to public' do + result = update_project(project, admin, visibility_level: Gitlab::VisibilityLevel::PUBLIC) + + expect(result).to eq({ status: :error, message: 'New visibility level not allowed!' }) + expect(project).to be_private + end end end end @@ -144,7 +155,7 @@ RSpec.describe Projects::UpdateService do project.update!(namespace: group, visibility_level: group.visibility_level) end - it 'does not update project visibility level' do + it 'does not update project visibility level even if admin', :enable_admin_mode 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.' }) @@ -181,6 +192,7 @@ RSpec.describe Projects::UpdateService do describe 'when updating project that has forks' do let(:project) { create(:project, :internal) } + let(:user) { project.owner } let(:forked_project) { fork_project(project) } context 'and unlink forks feature flag is off' do @@ -194,7 +206,7 @@ RSpec.describe Projects::UpdateService do expect(project).to be_internal expect(forked_project).to be_internal - expect(update_project(project, admin, opts)).to eq({ status: :success }) + expect(update_project(project, user, opts)).to eq({ status: :success }) expect(project).to be_private expect(forked_project.reload).to be_private @@ -206,7 +218,7 @@ RSpec.describe Projects::UpdateService do expect(project).to be_internal expect(forked_project).to be_internal - expect(update_project(project, admin, opts)).to eq({ status: :success }) + expect(update_project(project, user, opts)).to eq({ status: :success }) expect(project).to be_public expect(forked_project.reload).to be_internal @@ -220,7 +232,7 @@ RSpec.describe Projects::UpdateService do expect(project).to be_internal expect(forked_project).to be_internal - expect(update_project(project, admin, opts)).to eq({ status: :success }) + expect(update_project(project, user, opts)).to eq({ status: :success }) expect(project).to be_private expect(forked_project.reload).to be_internal @@ -576,15 +588,21 @@ RSpec.describe Projects::UpdateService do context 'authenticated as admin' do let(:user) { create(:admin) } - it 'schedules the transfer of the repository to the new storage and locks the project' do - update_project(project, admin, opts) + context 'when admin mode is enabled', :enable_admin_mode do + it 'schedules the transfer of the repository to the new storage and locks the project' do + update_project(project, admin, opts) - expect(project).to be_repository_read_only - expect(project.repository_storage_moves.last).to have_attributes( - state: ::ProjectRepositoryStorageMove.state_machines[:state].states[:scheduled].value, - source_storage_name: 'default', - destination_storage_name: 'test_second_storage' - ) + expect(project).to be_repository_read_only + expect(project.repository_storage_moves.last).to have_attributes( + state: ::ProjectRepositoryStorageMove.state_machines[:state].states[:scheduled].value, + source_storage_name: 'default', + destination_storage_name: 'test_second_storage' + ) + end + end + + context 'when admin mode is disabled' do + it_behaves_like 'the transfer was not scheduled' end context 'the repository is read-only' do |