API: remove public
param for projects
The create and edit actions for projects had these parameters: - `public` (optional) - if true same as setting `visibility_level = 20` - `visibility_level` (optional) Remove the `public` parameter to avoid contradiction.
This commit is contained in:
parent
53db7d1d75
commit
c6ad83ec29
4 changed files with 14 additions and 67 deletions
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: 'API: remove `public` param for projects'
|
||||||
|
merge_request: 8736
|
||||||
|
author:
|
|
@ -642,7 +642,6 @@ Parameters:
|
||||||
| `snippets_enabled` | boolean | no | Enable snippets for this project |
|
| `snippets_enabled` | boolean | no | Enable snippets for this project |
|
||||||
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
|
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
|
||||||
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
|
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
|
||||||
| `public` | boolean | no | If `true`, the same as setting `visibility_level` to 20 |
|
|
||||||
| `visibility_level` | integer | no | See [project visibility level](#project-visibility-level) |
|
| `visibility_level` | integer | no | See [project visibility level](#project-visibility-level) |
|
||||||
| `import_url` | string | no | URL to import repository from |
|
| `import_url` | string | no | URL to import repository from |
|
||||||
| `public_builds` | boolean | no | If `true`, builds can be viewed by non-project-members |
|
| `public_builds` | boolean | no | If `true`, builds can be viewed by non-project-members |
|
||||||
|
@ -676,7 +675,6 @@ Parameters:
|
||||||
| `snippets_enabled` | boolean | no | Enable snippets for this project |
|
| `snippets_enabled` | boolean | no | Enable snippets for this project |
|
||||||
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
|
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
|
||||||
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
|
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
|
||||||
| `public` | boolean | no | If `true`, the same as setting `visibility_level` to 20 |
|
|
||||||
| `visibility_level` | integer | no | See [project visibility level](#project-visibility-level) |
|
| `visibility_level` | integer | no | See [project visibility level](#project-visibility-level) |
|
||||||
| `import_url` | string | no | URL to import repository from |
|
| `import_url` | string | no | URL to import repository from |
|
||||||
| `public_builds` | boolean | no | If `true`, builds can be viewed by non-project-members |
|
| `public_builds` | boolean | no | If `true`, builds can be viewed by non-project-members |
|
||||||
|
@ -709,7 +707,6 @@ Parameters:
|
||||||
| `snippets_enabled` | boolean | no | Enable snippets for this project |
|
| `snippets_enabled` | boolean | no | Enable snippets for this project |
|
||||||
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
|
| `container_registry_enabled` | boolean | no | Enable container registry for this project |
|
||||||
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
|
| `shared_runners_enabled` | boolean | no | Enable shared runners for this project |
|
||||||
| `public` | boolean | no | If `true`, the same as setting `visibility_level` to 20 |
|
|
||||||
| `visibility_level` | integer | no | See [project visibility level](#project-visibility-level) |
|
| `visibility_level` | integer | no | See [project visibility level](#project-visibility-level) |
|
||||||
| `import_url` | string | no | URL to import repository from |
|
| `import_url` | string | no | URL to import repository from |
|
||||||
| `public_builds` | boolean | no | If `true`, builds can be viewed by non-project-members |
|
| `public_builds` | boolean | no | If `true`, builds can be viewed by non-project-members |
|
||||||
|
|
|
@ -16,7 +16,6 @@ module API
|
||||||
optional :shared_runners_enabled, type: Boolean, desc: 'Flag indication if shared runners are enabled for that project'
|
optional :shared_runners_enabled, type: Boolean, desc: 'Flag indication if shared runners are enabled for that project'
|
||||||
optional :container_registry_enabled, type: Boolean, desc: 'Flag indication if the container registry is enabled for that project'
|
optional :container_registry_enabled, type: Boolean, desc: 'Flag indication if the container registry is enabled for that project'
|
||||||
optional :lfs_enabled, type: Boolean, desc: 'Flag indication if Git LFS is enabled for that project'
|
optional :lfs_enabled, type: Boolean, desc: 'Flag indication if Git LFS is enabled for that project'
|
||||||
optional :public, type: Boolean, desc: 'Create a public project. The same as visibility_level = 20.'
|
|
||||||
optional :visibility_level, type: Integer, values: [
|
optional :visibility_level, type: Integer, values: [
|
||||||
Gitlab::VisibilityLevel::PRIVATE,
|
Gitlab::VisibilityLevel::PRIVATE,
|
||||||
Gitlab::VisibilityLevel::INTERNAL,
|
Gitlab::VisibilityLevel::INTERNAL,
|
||||||
|
@ -26,16 +25,6 @@ module API
|
||||||
optional :only_allow_merge_if_build_succeeds, type: Boolean, desc: 'Only allow to merge if builds succeed'
|
optional :only_allow_merge_if_build_succeeds, type: Boolean, desc: 'Only allow to merge if builds succeed'
|
||||||
optional :only_allow_merge_if_all_discussions_are_resolved, type: Boolean, desc: 'Only allow to merge if all discussions are resolved'
|
optional :only_allow_merge_if_all_discussions_are_resolved, type: Boolean, desc: 'Only allow to merge if all discussions are resolved'
|
||||||
end
|
end
|
||||||
|
|
||||||
def map_public_to_visibility_level(attrs)
|
|
||||||
publik = attrs.delete(:public)
|
|
||||||
if !publik.nil? && !attrs[:visibility_level].present?
|
|
||||||
# Since setting the public attribute to private could mean either
|
|
||||||
# private or internal, use the more conservative option, private.
|
|
||||||
attrs[:visibility_level] = (publik == true) ? Gitlab::VisibilityLevel::PUBLIC : Gitlab::VisibilityLevel::PRIVATE
|
|
||||||
end
|
|
||||||
attrs
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
resource :projects do
|
resource :projects do
|
||||||
|
@ -161,7 +150,7 @@ module API
|
||||||
use :create_params
|
use :create_params
|
||||||
end
|
end
|
||||||
post do
|
post do
|
||||||
attrs = map_public_to_visibility_level(declared_params(include_missing: false))
|
attrs = declared_params(include_missing: false)
|
||||||
project = ::Projects::CreateService.new(current_user, attrs).execute
|
project = ::Projects::CreateService.new(current_user, attrs).execute
|
||||||
|
|
||||||
if project.saved?
|
if project.saved?
|
||||||
|
@ -190,7 +179,7 @@ module API
|
||||||
user = User.find_by(id: params.delete(:user_id))
|
user = User.find_by(id: params.delete(:user_id))
|
||||||
not_found!('User') unless user
|
not_found!('User') unless user
|
||||||
|
|
||||||
attrs = map_public_to_visibility_level(declared_params(include_missing: false))
|
attrs = declared_params(include_missing: false)
|
||||||
project = ::Projects::CreateService.new(user, attrs).execute
|
project = ::Projects::CreateService.new(user, attrs).execute
|
||||||
|
|
||||||
if project.saved?
|
if project.saved?
|
||||||
|
@ -268,14 +257,14 @@ module API
|
||||||
at_least_one_of :name, :description, :issues_enabled, :merge_requests_enabled,
|
at_least_one_of :name, :description, :issues_enabled, :merge_requests_enabled,
|
||||||
:wiki_enabled, :builds_enabled, :snippets_enabled,
|
:wiki_enabled, :builds_enabled, :snippets_enabled,
|
||||||
:shared_runners_enabled, :container_registry_enabled,
|
:shared_runners_enabled, :container_registry_enabled,
|
||||||
:lfs_enabled, :public, :visibility_level, :public_builds,
|
:lfs_enabled, :visibility_level, :public_builds,
|
||||||
:request_access_enabled, :only_allow_merge_if_build_succeeds,
|
:request_access_enabled, :only_allow_merge_if_build_succeeds,
|
||||||
:only_allow_merge_if_all_discussions_are_resolved, :path,
|
:only_allow_merge_if_all_discussions_are_resolved, :path,
|
||||||
:default_branch
|
:default_branch
|
||||||
end
|
end
|
||||||
put ':id' do
|
put ':id' do
|
||||||
authorize_admin_project
|
authorize_admin_project
|
||||||
attrs = map_public_to_visibility_level(declared_params(include_missing: false))
|
attrs = declared_params(include_missing: false)
|
||||||
authorize! :rename_project, user_project if attrs[:name].present?
|
authorize! :rename_project, user_project if attrs[:name].present?
|
||||||
authorize! :change_visibility_level, user_project if attrs[:visibility_level].present?
|
authorize! :change_visibility_level, user_project if attrs[:visibility_level].present?
|
||||||
|
|
||||||
|
|
|
@ -359,13 +359,6 @@ describe API::Projects, api: true do
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PUBLIC)
|
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PUBLIC)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a project as public using :public' do
|
|
||||||
project = attributes_for(:project, { public: true })
|
|
||||||
post api('/projects', user), project
|
|
||||||
expect(json_response['public']).to be_truthy
|
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PUBLIC)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets a project as internal' do
|
it 'sets a project as internal' do
|
||||||
project = attributes_for(:project, :internal)
|
project = attributes_for(:project, :internal)
|
||||||
post api('/projects', user), project
|
post api('/projects', user), project
|
||||||
|
@ -373,13 +366,6 @@ describe API::Projects, api: true do
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::INTERNAL)
|
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::INTERNAL)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a project as internal overriding :public' do
|
|
||||||
project = attributes_for(:project, :internal, { public: true })
|
|
||||||
post api('/projects', user), project
|
|
||||||
expect(json_response['public']).to be_falsey
|
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::INTERNAL)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets a project as private' do
|
it 'sets a project as private' do
|
||||||
project = attributes_for(:project, :private)
|
project = attributes_for(:project, :private)
|
||||||
post api('/projects', user), project
|
post api('/projects', user), project
|
||||||
|
@ -387,13 +373,6 @@ describe API::Projects, api: true do
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a project as private using :public' do
|
|
||||||
project = attributes_for(:project, { public: false })
|
|
||||||
post api('/projects', user), project
|
|
||||||
expect(json_response['public']).to be_falsey
|
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets a project as allowing merge even if build fails' do
|
it 'sets a project as allowing merge even if build fails' do
|
||||||
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
|
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
|
||||||
post api('/projects', user), project
|
post api('/projects', user), project
|
||||||
|
@ -431,13 +410,14 @@ describe API::Projects, api: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when a visibility level is restricted' do
|
context 'when a visibility level is restricted' do
|
||||||
|
let(:project_param) { attributes_for(:project, :public) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
@project = attributes_for(:project, { public: true })
|
|
||||||
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
|
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not allow a non-admin to use a restricted visibility level' do
|
it 'does not allow a non-admin to use a restricted visibility level' do
|
||||||
post api('/projects', user), @project
|
post api('/projects', user), project_param
|
||||||
|
|
||||||
expect(response).to have_http_status(400)
|
expect(response).to have_http_status(400)
|
||||||
expect(json_response['message']['visibility_level'].first).to(
|
expect(json_response['message']['visibility_level'].first).to(
|
||||||
|
@ -446,7 +426,8 @@ describe API::Projects, api: true do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'allows an admin to override restricted visibility settings' do
|
it 'allows an admin to override restricted visibility settings' do
|
||||||
post api('/projects', admin), @project
|
post api('/projects', admin), project_param
|
||||||
|
|
||||||
expect(json_response['public']).to be_truthy
|
expect(json_response['public']).to be_truthy
|
||||||
expect(json_response['visibility_level']).to(
|
expect(json_response['visibility_level']).to(
|
||||||
eq(Gitlab::VisibilityLevel::PUBLIC)
|
eq(Gitlab::VisibilityLevel::PUBLIC)
|
||||||
|
@ -499,15 +480,6 @@ describe API::Projects, api: true do
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PUBLIC)
|
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PUBLIC)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a project as public using :public' do
|
|
||||||
project = attributes_for(:project, { public: true })
|
|
||||||
post api("/projects/user/#{user.id}", admin), project
|
|
||||||
|
|
||||||
expect(response).to have_http_status(201)
|
|
||||||
expect(json_response['public']).to be_truthy
|
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PUBLIC)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets a project as internal' do
|
it 'sets a project as internal' do
|
||||||
project = attributes_for(:project, :internal)
|
project = attributes_for(:project, :internal)
|
||||||
post api("/projects/user/#{user.id}", admin), project
|
post api("/projects/user/#{user.id}", admin), project
|
||||||
|
@ -517,14 +489,6 @@ describe API::Projects, api: true do
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::INTERNAL)
|
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::INTERNAL)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a project as internal overriding :public' do
|
|
||||||
project = attributes_for(:project, :internal, { public: true })
|
|
||||||
post api("/projects/user/#{user.id}", admin), project
|
|
||||||
expect(response).to have_http_status(201)
|
|
||||||
expect(json_response['public']).to be_falsey
|
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::INTERNAL)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets a project as private' do
|
it 'sets a project as private' do
|
||||||
project = attributes_for(:project, :private)
|
project = attributes_for(:project, :private)
|
||||||
post api("/projects/user/#{user.id}", admin), project
|
post api("/projects/user/#{user.id}", admin), project
|
||||||
|
@ -532,13 +496,6 @@ describe API::Projects, api: true do
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a project as private using :public' do
|
|
||||||
project = attributes_for(:project, { public: false })
|
|
||||||
post api("/projects/user/#{user.id}", admin), project
|
|
||||||
expect(json_response['public']).to be_falsey
|
|
||||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'sets a project as allowing merge even if build fails' do
|
it 'sets a project as allowing merge even if build fails' do
|
||||||
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
|
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
|
||||||
post api("/projects/user/#{user.id}", admin), project
|
post api("/projects/user/#{user.id}", admin), project
|
||||||
|
@ -1124,7 +1081,7 @@ describe API::Projects, api: true do
|
||||||
|
|
||||||
it 'updates visibility_level from public to private' do
|
it 'updates visibility_level from public to private' do
|
||||||
project3.update_attributes({ visibility_level: Gitlab::VisibilityLevel::PUBLIC })
|
project3.update_attributes({ visibility_level: Gitlab::VisibilityLevel::PUBLIC })
|
||||||
project_param = { public: false }
|
project_param = { visibility_level: 0 }
|
||||||
put api("/projects/#{project3.id}", user), project_param
|
put api("/projects/#{project3.id}", user), project_param
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
project_param.each_pair do |k, v|
|
project_param.each_pair do |k, v|
|
||||||
|
|
Loading…
Reference in a new issue