summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schilling <rschilling@student.tugraz.at>2019-01-15 16:05:09 +0100
committerRobert Schilling <rschilling@student.tugraz.at>2019-01-15 17:16:03 +0100
commit2190704c61323191b581b4776bda450fa5a089b8 (patch)
tree9f14cab22947cc178063da958c44a24a272b2f33
parentf821a53b45d4b521ffb734b3b843f48e0d1ecfcd (diff)
downloadgitlab-ce-2190704c61323191b581b4776bda450fa5a089b8.tar.gz
API: Support username with dots
-rw-r--r--lib/api/projects.rb2
-rw-r--r--lib/api/users.rb2
-rw-r--r--spec/requests/api/projects_spec.rb13
-rw-r--r--spec/requests/api/users_spec.rb2
4 files changed, 14 insertions, 5 deletions
diff --git a/lib/api/projects.rb b/lib/api/projects.rb
index 9f3a1699146..d76d5d822b1 100644
--- a/lib/api/projects.rb
+++ b/lib/api/projects.rb
@@ -128,7 +128,7 @@ module API
end
end
- resource :users, requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
+ resource :users, requirements: { user_id: API::NO_SLASH_URL_PART_REGEX } do
desc 'Get a user projects' do
success Entities::BasicProjectDetails
end
diff --git a/lib/api/users.rb b/lib/api/users.rb
index b41fce76df0..ff33e892ef8 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -135,7 +135,7 @@ module API
params do
requires :id_or_username, type: String, desc: 'The ID or username of the user'
end
- get ":id_or_username/status" do
+ get ":id_or_username/status", requirements: { id_or_username: API::NO_SLASH_URL_PART_REGEX } do
user = find_user(params[:id_or_username])
not_found!('User') unless user && can?(current_user, :read_user, user)
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index ffe4512fa6f..05b73a77f1a 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -21,7 +21,7 @@ describe API::Projects do
let(:project) { create(:project, :repository, namespace: user.namespace) }
let(:project2) { create(:project, namespace: user.namespace) }
let(:project_member) { create(:project_member, :developer, user: user3, project: project) }
- let(:user4) { create(:user) }
+ let(:user4) { create(:user, username: 'user.with.dot') }
let(:project3) do
create(:project,
:private,
@@ -724,7 +724,7 @@ describe API::Projects do
expect(json_response['message']).to eq('404 User Not Found')
end
- it 'returns projects filtered by user' do
+ it 'returns projects filtered by user id' do
get api("/users/#{user4.id}/projects/", user)
expect(response).to have_gitlab_http_status(200)
@@ -733,6 +733,15 @@ describe API::Projects do
expect(json_response.map { |project| project['id'] }).to contain_exactly(public_project.id)
end
+ it 'returns projects filtered by username' do
+ get api("/users/#{user4.username}/projects/", user)
+
+ expect(response).to have_gitlab_http_status(200)
+ expect(response).to include_pagination_headers
+ expect(json_response).to be_an Array
+ expect(json_response.map { |project| project['id'] }).to contain_exactly(public_project.id)
+ end
+
it 'returns projects filtered by minimal access level' do
private_project1 = create(:project, :private, name: 'private_project1', creator_id: user4.id, namespace: user4.namespace)
private_project2 = create(:project, :private, name: 'private_project2', creator_id: user4.id, namespace: user4.namespace)
diff --git a/spec/requests/api/users_spec.rb b/spec/requests/api/users_spec.rb
index f3431e0be3d..1cf0f4f2cf7 100644
--- a/spec/requests/api/users_spec.rb
+++ b/spec/requests/api/users_spec.rb
@@ -1,7 +1,7 @@
require 'spec_helper'
describe API::Users do
- let(:user) { create(:user) }
+ let(:user) { create(:user, username: 'user.with.dot') }
let(:admin) { create(:admin) }
let(:key) { create(:key, user: user) }
let(:gpg_key) { create(:gpg_key, user: user) }