expose 'only_allow_merge_if_build_succeeds' project setting in the API

This commit is contained in:
Marc Dequènes (Duck) 2016-08-22 12:47:58 +09:00
parent 02591b0430
commit 31b2c1ef88
6 changed files with 53 additions and 12 deletions

View file

@ -4,6 +4,7 @@ v 8.12.0 (unreleased)
- Change merge_error column from string to text type
- Optimistic locking for Issues and Merge Requests (title and description overriding prevention)
- Added tests for diff notes
- Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck)
v 8.11.1 (unreleased)
- Fix file links on project page when default view is Files !5933

View file

@ -84,7 +84,8 @@ Parameters:
"star_count": 0,
"runners_token": "b8547b1dc37721d05889db52fa2f02",
"public_builds": true,
"shared_with_groups": []
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false
},
{
"id": 6,
@ -144,7 +145,8 @@ Parameters:
"star_count": 0,
"runners_token": "b8547b1dc37721d05889db52fa2f02",
"public_builds": true,
"shared_with_groups": []
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false
}
]
```
@ -280,7 +282,8 @@ Parameters:
"group_name": "Gitlab Org",
"group_access_level": 10
}
]
],
"only_allow_merge_if_build_succeeds": false
}
```
@ -448,6 +451,7 @@ Parameters:
- `visibility_level` (optional)
- `import_url` (optional)
- `public_builds` (optional)
- `only_allow_merge_if_build_succeeds` (optional)
### Create project for user
@ -473,6 +477,7 @@ Parameters:
- `visibility_level` (optional)
- `import_url` (optional)
- `public_builds` (optional)
- `only_allow_merge_if_build_succeeds` (optional)
### Edit project
@ -499,6 +504,7 @@ Parameters:
- `public` (optional) - if `true` same as setting visibility_level = 20
- `visibility_level` (optional)
- `public_builds` (optional)
- `only_allow_merge_if_build_succeeds` (optional)
On success, method returns 200 with the updated project. If parameters are
invalid, 400 is returned.
@ -577,7 +583,8 @@ Example response:
"forks_count": 0,
"star_count": 1,
"public_builds": true,
"shared_with_groups": []
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false
}
```
@ -643,7 +650,8 @@ Example response:
"forks_count": 0,
"star_count": 0,
"public_builds": true,
"shared_with_groups": []
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false
}
```
@ -729,7 +737,8 @@ Example response:
"star_count": 0,
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"public_builds": true,
"shared_with_groups": []
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false
}
```
@ -815,7 +824,8 @@ Example response:
"star_count": 0,
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
"public_builds": true,
"shared_with_groups": []
"shared_with_groups": [],
"only_allow_merge_if_build_succeeds": false
}
```

View file

@ -90,6 +90,7 @@ module API
expose :shared_with_groups do |project, options|
SharedGroup.represent(project.project_group_links.all, options)
end
expose :only_allow_merge_if_build_succeeds
end
class Member < UserBasic

View file

@ -123,7 +123,8 @@ module API
:public,
:visibility_level,
:import_url,
:public_builds]
:public_builds,
:only_allow_merge_if_build_succeeds]
attrs = map_public_to_visibility_level(attrs)
@project = ::Projects::CreateService.new(current_user, attrs).execute
if @project.saved?
@ -172,7 +173,8 @@ module API
:public,
:visibility_level,
:import_url,
:public_builds]
:public_builds,
:only_allow_merge_if_build_succeeds]
attrs = map_public_to_visibility_level(attrs)
@project = ::Projects::CreateService.new(user, attrs).execute
if @project.saved?
@ -234,7 +236,8 @@ module API
:shared_runners_enabled,
:public,
:visibility_level,
:public_builds]
:public_builds,
:only_allow_merge_if_build_succeeds]
attrs = map_public_to_visibility_level(attrs)
authorize_admin_project
authorize! :rename_project, user_project if attrs[:name].present?

File diff suppressed because one or more lines are too long

View file

@ -224,7 +224,8 @@ describe API::API, api: true do
description: FFaker::Lorem.sentence,
issues_enabled: false,
merge_requests_enabled: false,
wiki_enabled: false
wiki_enabled: false,
only_allow_merge_if_build_succeeds: false
})
post api('/projects', user), project
@ -276,6 +277,18 @@ describe API::API, api: true do
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
end
it 'sets a project as allowing merge even if build fails' do
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
post api('/projects', user), project
expect(json_response['only_allow_merge_if_build_succeeds']).to be_falsey
end
it 'sets a project as allowing merge only if build succeeds' do
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: true })
post api('/projects', user), project
expect(json_response['only_allow_merge_if_build_succeeds']).to be_truthy
end
context 'when a visibility level is restricted' do
before do
@project = attributes_for(:project, { public: true })
@ -384,6 +397,18 @@ describe API::API, api: true do
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
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
post api("/projects/user/#{user.id}", admin), project
expect(json_response['only_allow_merge_if_build_succeeds']).to be_falsey
end
it 'sets a project as allowing merge only if build succeeds' do
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: true })
post api("/projects/user/#{user.id}", admin), project
expect(json_response['only_allow_merge_if_build_succeeds']).to be_truthy
end
end
describe "POST /projects/:id/uploads" do
@ -444,6 +469,7 @@ describe API::API, api: true do
expect(json_response['shared_with_groups'][0]['group_id']).to eq(group.id)
expect(json_response['shared_with_groups'][0]['group_name']).to eq(group.name)
expect(json_response['shared_with_groups'][0]['group_access_level']).to eq(link.group_access)
expect(json_response['only_allow_merge_if_build_succeeds']).to eq(project.only_allow_merge_if_build_succeeds)
end
it 'returns a project by path name' do