Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
66a694d2
Commit
66a694d2
authored
May 30, 2019
by
Imre Farkas
Committed by
Robert Speicher
May 30, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move EE specific lines in API::Projects
parent
249f0a16
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
147 additions
and
126 deletions
+147
-126
ee/lib/ee/api/helpers/projects_helpers.rb
ee/lib/ee/api/helpers/projects_helpers.rb
+23
-0
ee/spec/requests/api/projects_spec.rb
ee/spec/requests/api/projects_spec.rb
+81
-47
lib/api/helpers/projects_helpers.rb
lib/api/helpers/projects_helpers.rb
+36
-39
lib/api/project_import.rb
lib/api/project_import.rb
+2
-1
lib/api/projects.rb
lib/api/projects.rb
+4
-19
spec/requests/api/projects_spec.rb
spec/requests/api/projects_spec.rb
+1
-20
No files found.
ee/lib/ee/api/helpers/projects_helpers.rb
View file @
66a694d2
...
...
@@ -6,6 +6,29 @@ module EE
module
ProjectsHelpers
extend
ActiveSupport
::
Concern
prepended
do
params
:optional_project_params_ee
do
optional
:repository_storage
,
type:
String
,
desc:
'Which storage shard the repository is on. Available only to admins'
optional
:approvals_before_merge
,
type:
Integer
,
desc:
'How many approvers should approve merge request by default'
optional
:mirror
,
type:
Grape
::
API
::
Boolean
,
desc:
'Enables pull mirroring in a project'
optional
:mirror_trigger_builds
,
type:
Grape
::
API
::
Boolean
,
desc:
'Pull mirroring triggers builds'
end
params
:optional_filter_params_ee
do
optional
:wiki_checksum_failed
,
type:
Grape
::
API
::
Boolean
,
default:
false
,
desc:
'Limit by projects where wiki checksum is failed'
optional
:repository_checksum_failed
,
type:
Grape
::
API
::
Boolean
,
default:
false
,
desc:
'Limit by projects where repository checksum is failed'
end
params
:optional_update_params_ee
do
optional
:mirror_user_id
,
type:
Integer
,
desc:
'User responsible for all the activity surrounding a pull mirror event'
optional
:only_mirror_protected_branches
,
type:
Grape
::
API
::
Boolean
,
desc:
'Only mirror protected branches'
optional
:mirror_overwrites_diverged_branches
,
type:
Grape
::
API
::
Boolean
,
desc:
'Pull mirror overwrites diverged branches'
optional
:import_url
,
type:
String
,
desc:
'URL from which the project is imported'
optional
:packages_enabled
,
type:
Grape
::
API
::
Boolean
,
desc:
'Enable project packages feature'
optional
:fallback_approvals_required
,
type:
Integer
,
desc:
'Overall approvals required when no rule is present'
end
end
class_methods
do
# We don't use "override" here as this module is included into various
# API classes, and for reasons unknown the override would be verified
...
...
ee/spec/requests/api/projects_spec.rb
View file @
66a694d2
# frozen_string_literal: true
require
'spec_helper'
describe
API
::
Projects
do
...
...
@@ -15,6 +17,77 @@ describe API::Projects do
expect
(
response
).
to
have_gitlab_http_status
(
200
)
end
context
'filters by verification flags'
do
let
(
:project1
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
it
'filters by :repository_verification_failed'
do
create
(
:repository_state
,
:repository_failed
,
project:
project
)
create
(
:repository_state
,
:wiki_failed
,
project:
project1
)
get
api
(
'/projects'
,
user
),
params:
{
repository_checksum_failed:
true
}
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
length
).
to
eq
(
1
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
project
.
id
end
it
'filters by :wiki_verification_failed'
do
create
(
:repository_state
,
:wiki_failed
,
project:
project
)
create
(
:repository_state
,
:repository_failed
,
project:
project1
)
get
api
(
'/projects'
,
user
),
params:
{
wiki_checksum_failed:
true
}
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
length
).
to
eq
(
1
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
project
.
id
end
end
end
describe
'GET /projects/:id'
do
describe
'packages_enabled attribute'
do
it
'exposed when the feature is available'
do
stub_licensed_features
(
packages:
true
)
get
api
(
"/projects/
#{
project
.
id
}
"
,
user
)
expect
(
json_response
).
to
have_key
'packages_enabled'
end
it
'not exposed when the feature is available'
do
stub_licensed_features
(
packages:
false
)
get
api
(
"/projects/
#{
project
.
id
}
"
,
user
)
expect
(
json_response
).
not_to
have_key
'packages_enabled'
end
end
describe
'repository_storage attribute'
do
context
'when authenticated as an admin'
do
let
(
:admin
)
{
create
(
:admin
)
}
it
'returns repository_storage attribute'
do
get
api
(
"/projects/
#{
project
.
id
}
"
,
admin
)
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
json_response
[
'repository_storage'
]).
to
eq
(
project
.
repository_storage
)
end
end
context
'when authenticated as a regular user'
do
it
'does not return repository_storage attribute'
do
get
api
(
"/projects/
#{
project
.
id
}
"
,
user
)
expect
(
json_response
).
not_to
have_key
(
'repository_storage'
)
end
end
end
end
describe
'POST /projects'
do
...
...
@@ -255,56 +328,17 @@ describe API::Projects do
end
end
end
end
describe
'GET /projects'
do
context
'filters by verification flags'
do
let
(
:project1
)
{
create
(
:project
,
namespace:
user
.
namespace
)
}
it
'filters by :repository_verification_failed'
do
create
(
:repository_state
,
:repository_failed
,
project:
project
)
create
(
:repository_state
,
:wiki_failed
,
project:
project1
)
get
api
(
'/projects'
,
user
),
params:
{
repository_checksum_failed:
true
}
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
length
).
to
eq
(
1
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
project
.
id
end
it
'filters by :wiki_verification_failed'
do
create
(
:repository_state
,
:wiki_failed
,
project:
project
)
create
(
:repository_state
,
:repository_failed
,
project:
project1
)
get
api
(
'/projects'
,
user
),
params:
{
wiki_checksum_failed:
true
}
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
response
).
to
include_pagination_headers
expect
(
json_response
).
to
be_an
Array
expect
(
json_response
.
length
).
to
eq
(
1
)
expect
(
json_response
.
first
[
'id'
]).
to
eq
project
.
id
end
end
end
describe
'GET /projects/:id'
do
describe
'packages_enabled attribute'
do
it
'exposed when the feature is available'
do
stub_licensed_features
(
packages:
true
)
get
api
(
"/projects/
#{
project
.
id
}
"
,
user
)
expect
(
json_response
).
to
have_key
'packages_enabled'
end
it
'not exposed when the feature is available'
do
stub_licensed_features
(
packages:
false
)
describe
'updating approvals_before_merge attribute'
do
context
'when authenticated as project owner'
do
it
'updates approvals_before_merge'
do
project_param
=
{
approvals_before_merge:
3
}
get
api
(
"/projects/
#{
project
.
id
}
"
,
user
)
put
api
(
"/projects/
#{
project
.
id
}
"
,
user
),
params:
project_param
expect
(
json_response
).
not_to
have_key
'packages_enabled'
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
json_response
[
'approvals_before_merge'
]).
to
eq
(
3
)
end
end
end
end
...
...
lib/api/helpers/projects_helpers.rb
View file @
66a694d2
...
...
@@ -4,48 +4,45 @@ module API
module
Helpers
module
ProjectsHelpers
extend
ActiveSupport
::
Concern
extend
Grape
::
API
::
Helpers
included
do
helpers
do
params
:optional_project_params_ce
do
optional
:description
,
type:
String
,
desc:
'The description of the project'
optional
:ci_config_path
,
type:
String
,
desc:
'The path to CI config file. Defaults to `.gitlab-ci.yml`'
optional
:issues_enabled
,
type:
Boolean
,
desc:
'Flag indication if the issue tracker is enabled'
optional
:merge_requests_enabled
,
type:
Boolean
,
desc:
'Flag indication if merge requests are enabled'
optional
:wiki_enabled
,
type:
Boolean
,
desc:
'Flag indication if the wiki is enabled'
optional
:jobs_enabled
,
type:
Boolean
,
desc:
'Flag indication if jobs are enabled'
optional
:snippets_enabled
,
type:
Boolean
,
desc:
'Flag indication if snippets are enabled'
optional
:shared_runners_enabled
,
type:
Boolean
,
desc:
'Flag indication if shared runners are enabled for that project'
optional
:resolve_outdated_diff_discussions
,
type:
Boolean
,
desc:
'Automatically resolve merge request diffs discussions on lines changed with a push'
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
:visibility
,
type:
String
,
values:
Gitlab
::
VisibilityLevel
.
string_values
,
desc:
'The visibility of the project.'
optional
:public_builds
,
type:
Boolean
,
desc:
'Perform public builds'
optional
:request_access_enabled
,
type:
Boolean
,
desc:
'Allow users to request member access'
optional
:only_allow_merge_if_pipeline_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
:tag_list
,
type:
Array
[
String
],
desc:
'The list of tags for a project'
optional
:avatar
,
type:
File
,
desc:
'Avatar image for project'
optional
:printing_merge_request_link_enabled
,
type:
Boolean
,
desc:
'Show link to create/view merge request when pushing from the command line'
optional
:merge_method
,
type:
String
,
values:
%w(ff rebase_merge merge)
,
desc:
'The merge method used when merging merge requests'
optional
:initialize_with_readme
,
type:
Boolean
,
desc:
"Initialize a project with a README.md"
optional
:external_authorization_classification_label
,
type:
String
,
desc:
'The classification label for the project'
end
params
:optional_project_params_ce
do
optional
:description
,
type:
String
,
desc:
'The description of the project'
optional
:ci_config_path
,
type:
String
,
desc:
'The path to CI config file. Defaults to `.gitlab-ci.yml`'
optional
:issues_enabled
,
type:
Boolean
,
desc:
'Flag indication if the issue tracker is enabled'
optional
:merge_requests_enabled
,
type:
Boolean
,
desc:
'Flag indication if merge requests are enabled'
optional
:wiki_enabled
,
type:
Boolean
,
desc:
'Flag indication if the wiki is enabled'
optional
:jobs_enabled
,
type:
Boolean
,
desc:
'Flag indication if jobs are enabled'
optional
:snippets_enabled
,
type:
Boolean
,
desc:
'Flag indication if snippets are enabled'
optional
:shared_runners_enabled
,
type:
Boolean
,
desc:
'Flag indication if shared runners are enabled for that project'
optional
:resolve_outdated_diff_discussions
,
type:
Boolean
,
desc:
'Automatically resolve merge request diffs discussions on lines changed with a push'
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
:visibility
,
type:
String
,
values:
Gitlab
::
VisibilityLevel
.
string_values
,
desc:
'The visibility of the project.'
optional
:public_builds
,
type:
Boolean
,
desc:
'Perform public builds'
optional
:request_access_enabled
,
type:
Boolean
,
desc:
'Allow users to request member access'
optional
:only_allow_merge_if_pipeline_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
:tag_list
,
type:
Array
[
String
],
desc:
'The list of tags for a project'
optional
:avatar
,
type:
File
,
desc:
'Avatar image for project'
optional
:printing_merge_request_link_enabled
,
type:
Boolean
,
desc:
'Show link to create/view merge request when pushing from the command line'
optional
:merge_method
,
type:
String
,
values:
%w(ff rebase_merge merge)
,
desc:
'The merge method used when merging merge requests'
optional
:initialize_with_readme
,
type:
Boolean
,
desc:
"Initialize a project with a README.md"
optional
:external_authorization_classification_label
,
type:
String
,
desc:
'The classification label for the project'
end
params
:optional_project_params_ee
do
end
if
Gitlab
.
ee?
params
:optional_project_params_ee
do
optional
:repository_storage
,
type:
String
,
desc:
'Which storage shard the repository is on. Available only to admins'
optional
:approvals_before_merge
,
type:
Integer
,
desc:
'How many approvers should approve merge request by default'
optional
:mirror
,
type:
Boolean
,
desc:
'Enables pull mirroring in a project'
optional
:mirror_trigger_builds
,
type:
Boolean
,
desc:
'Pull mirroring triggers builds'
end
end
params
:optional_project_params
do
use
:optional_project_params_ce
use
:optional_project_params_ee
end
params
:optional_filter_params_ee
do
end
params
:optional_project_params
do
use
:optional_project_params_ce
use
:optional_project_params_ee
if
Gitlab
.
ee?
end
end
params
:optional_update_params_ee
do
end
def
self
.
update_params_at_least_one_of
...
...
lib/api/project_import.rb
View file @
66a694d2
...
...
@@ -3,7 +3,8 @@
module
API
class
ProjectImport
<
Grape
::
API
include
PaginationParams
include
Helpers
::
ProjectsHelpers
helpers
Helpers
::
ProjectsHelpers
helpers
do
def
import_params
...
...
lib/api/projects.rb
View file @
66a694d2
...
...
@@ -6,27 +6,12 @@ module API
class
Projects
<
Grape
::
API
include
PaginationParams
include
Helpers
::
CustomAttributes
include
Helpers
::
ProjectsHelpers
helpers
Helpers
::
ProjectsHelpers
before
{
authenticate_non_get!
}
helpers
do
if
Gitlab
.
ee?
params
:optional_filter_params_ee
do
optional
:wiki_checksum_failed
,
type:
Grape
::
API
::
Boolean
,
default:
false
,
desc:
'Limit by projects where wiki checksum is failed'
optional
:repository_checksum_failed
,
type:
Grape
::
API
::
Boolean
,
default:
false
,
desc:
'Limit by projects where repository checksum is failed'
end
params
:optional_update_params_ee
do
optional
:mirror_user_id
,
type:
Integer
,
desc:
'User responsible for all the activity surrounding a pull mirror event'
optional
:only_mirror_protected_branches
,
type:
Grape
::
API
::
Boolean
,
desc:
'Only mirror protected branches'
optional
:mirror_overwrites_diverged_branches
,
type:
Grape
::
API
::
Boolean
,
desc:
'Pull mirror overwrites diverged branches'
optional
:import_url
,
type:
String
,
desc:
'URL from which the project is imported'
optional
:packages_enabled
,
type:
Grape
::
API
::
Boolean
,
desc:
'Enable project packages feature'
optional
:fallback_approvals_required
,
type:
Integer
,
desc:
'Overall approvals required when no rule is present'
end
end
# EE::API::Projects would override this method
def
apply_filters
(
projects
)
projects
=
projects
.
with_issues_available_for_user
(
current_user
)
if
params
[
:with_issues_enabled
]
...
...
@@ -77,7 +62,7 @@ module API
optional
:with_programming_language
,
type:
String
,
desc:
'Limit to repositories which use the given programming language'
optional
:min_access_level
,
type:
Integer
,
values:
Gitlab
::
Access
.
all_values
,
desc:
'Limit by minimum access level of authenticated user'
use
:optional_filter_params_ee
if
Gitlab
.
ee?
use
:optional_filter_params_ee
end
params
:create_params
do
...
...
@@ -296,7 +281,7 @@ module API
optional
:path
,
type:
String
,
desc:
'The path of the repository'
use
:optional_project_params
use
:optional_update_params_ee
if
Gitlab
.
ee?
use
:optional_update_params_ee
at_least_one_of
(
*
Helpers
::
ProjectsHelpers
.
update_params_at_least_one_of
)
end
...
...
spec/requests/api/projects_spec.rb
View file @
66a694d2
...
...
@@ -1026,7 +1026,7 @@ describe API::Projects do
end
context
'when authenticated as an admin'
do
it
'returns a project by id
including repository_storage
'
do
it
'returns a project by id'
do
project
project_member
group
=
create
(
:group
)
...
...
@@ -1045,7 +1045,6 @@ describe API::Projects do
expect
(
json_response
[
'http_url_to_repo'
]).
to
be_present
expect
(
json_response
[
'web_url'
]).
to
be_present
expect
(
json_response
[
'owner'
]).
to
be_a
Hash
expect
(
json_response
[
'owner'
]).
to
be_a
Hash
expect
(
json_response
[
'name'
]).
to
eq
(
project
.
name
)
expect
(
json_response
[
'path'
]).
to
be_present
expect
(
json_response
[
'issues_enabled'
]).
to
be_present
...
...
@@ -1070,7 +1069,6 @@ describe API::Projects do
expect
(
json_response
[
'shared_with_groups'
][
0
][
'group_access_level'
]).
to
eq
(
link
.
group_access
)
expect
(
json_response
[
'only_allow_merge_if_pipeline_succeeds'
]).
to
eq
(
project
.
only_allow_merge_if_pipeline_succeeds
)
expect
(
json_response
[
'only_allow_merge_if_all_discussions_are_resolved'
]).
to
eq
(
project
.
only_allow_merge_if_all_discussions_are_resolved
)
expect
(
json_response
[
'repository_storage'
]).
to
eq
(
project
.
repository_storage
)
end
end
...
...
@@ -1129,7 +1127,6 @@ describe API::Projects do
expect
(
json_response
[
'only_allow_merge_if_all_discussions_are_resolved'
]).
to
eq
(
project
.
only_allow_merge_if_all_discussions_are_resolved
)
expect
(
json_response
[
'merge_method'
]).
to
eq
(
project
.
merge_method
.
to_s
)
expect
(
json_response
[
'readme_url'
]).
to
eq
(
project
.
readme_url
)
expect
(
json_response
).
not_to
have_key
(
'repository_storage'
)
end
it
'returns a group link with expiration date'
do
...
...
@@ -1778,13 +1775,6 @@ describe API::Projects do
expect
(
project
.
project_group_links
).
to
be_empty
end
it
'returns 204 when deleting a group share'
do
delete
api
(
"/projects/
#{
project
.
id
}
/share/
#{
group
.
id
}
"
,
user
)
expect
(
response
).
to
have_gitlab_http_status
(
204
)
expect
(
project
.
project_group_links
).
to
be_empty
end
it_behaves_like
'412 response'
do
let
(
:request
)
{
api
(
"/projects/
#{
project
.
id
}
/share/
#{
group
.
id
}
"
,
user
)
}
end
...
...
@@ -1898,15 +1888,6 @@ describe API::Projects do
expect
(
json_response
[
'request_access_enabled'
]).
to
eq
(
false
)
end
it
'updates approvals_before_merge'
do
project_param
=
{
approvals_before_merge:
3
}
put
api
(
"/projects/
#{
project
.
id
}
"
,
user
),
params:
project_param
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
json_response
[
'approvals_before_merge'
]).
to
eq
(
3
)
end
it
'updates path & name to existing path & name in different namespace'
do
project_param
=
{
path:
project4
.
path
,
name:
project4
.
name
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment