Skip to content
Snippets Groups Projects
Commit d466ee50 authored by GitLab Bot's avatar GitLab Bot
Browse files

Add latest changes from gitlab-org/gitlab@master

parent 6a9d7c00
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -279,4 +279,19 @@ describe Gitlab::GitalyClient::CommitService do
expect(subject.deletions).to eq(15)
end
end
describe '#find_commits' do
it 'sends an RPC request' do
request = Gitaly::FindCommitsRequest.new(
repository: repository_message,
disable_walk: true,
order: 'TOPO'
)
expect_any_instance_of(Gitaly::CommitService::Stub).to receive(:find_commits)
.with(request, kind_of(Hash)).and_return([])
client.find_commits(order: 'topo')
end
end
end
Loading
Loading
@@ -97,87 +97,68 @@ describe Gitlab::ProjectAuthorizations do
create(:group_group_link, shared_group: shared_group, shared_with_group: group)
end
 
context 'when feature flag share_group_with_group is enabled' do
before do
stub_feature_flags(share_group_with_group: true)
end
context 'group user' do
let(:user) { group_user }
context 'group user' do
let(:user) { group_user }
 
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
 
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to eq(Gitlab::Access::DEVELOPER)
expect(mapping[project_child.id]).to eq(Gitlab::Access::DEVELOPER)
end
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to eq(Gitlab::Access::DEVELOPER)
expect(mapping[project_child.id]).to eq(Gitlab::Access::DEVELOPER)
end
end
 
context 'parent group user' do
let(:user) { parent_group_user }
context 'parent group user' do
let(:user) { parent_group_user }
 
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
 
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
end
 
context 'child group user' do
let(:user) { child_group_user }
context 'child group user' do
let(:user) { child_group_user }
 
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
 
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
end
 
context 'when feature flag share_group_with_group is disabled' do
before do
stub_feature_flags(share_group_with_group: false)
end
context 'group user' do
let(:user) { group_user }
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
context 'user without accepted access request' do
let!(:user) { create(:user) }
 
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
end
it 'does not have access to group and its projects' do
create(:group_member, :developer, :access_request, user: user, group: group)
 
context 'parent group user' do
let(:user) { parent_group_user }
mapping = map_access_levels(authorizations)
 
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
end
 
context 'child group user' do
let(:user) { child_group_user }
context 'unrelated project owner' do
let(:common_id) { [Project.maximum(:id).to_i, Namespace.maximum(:id).to_i].max + 999 }
let!(:group) { create(:group, id: common_id) }
let!(:unrelated_project) { create(:project, id: common_id) }
let(:user) { unrelated_project.owner }
 
it 'creates proper authorizations' do
mapping = map_access_levels(authorizations)
it 'does not have access to group and its projects' do
mapping = map_access_levels(authorizations)
 
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
expect(mapping[project_parent.id]).to be_nil
expect(mapping[project.id]).to be_nil
expect(mapping[project_child.id]).to be_nil
end
end
end
Loading
Loading
# frozen_string_literal: true
require 'spec_helper'
require Rails.root.join('db', 'post_migrate', '20200204113223_schedule_recalculate_project_authorizations.rb')
describe ScheduleRecalculateProjectAuthorizations, :migration do
let(:users_table) { table(:users) }
let(:namespaces_table) { table(:namespaces) }
let(:projects_table) { table(:projects) }
let(:project_authorizations_table) { table(:project_authorizations) }
let(:user1) { users_table.create!(name: 'user1', email: 'user1@example.com', projects_limit: 1) }
let(:user2) { users_table.create!(name: 'user2', email: 'user2@example.com', projects_limit: 1) }
let(:group) { namespaces_table.create!(id: 1, type: 'Group', name: 'group', path: 'group') }
let(:project) do
projects_table.create!(id: 1, name: 'project', path: 'project',
visibility_level: 0, namespace_id: group.id)
end
before do
stub_const("#{described_class}::BATCH_SIZE", 1)
project_authorizations_table.create!(user_id: user1.id, project_id: project.id, access_level: 30)
project_authorizations_table.create!(user_id: user2.id, project_id: project.id, access_level: 30)
end
it 'schedules background migration' do
Sidekiq::Testing.fake! do
Timecop.freeze do
migrate!
expect(BackgroundMigrationWorker.jobs.size).to eq(2)
expect(described_class::MIGRATION).to be_scheduled_migration([user1.id])
expect(described_class::MIGRATION).to be_scheduled_migration([user2.id])
end
end
end
it 'ignores projects with higher id than maximum group id' do
another_user = users_table.create!(name: 'another user', email: 'another-user@example.com',
projects_limit: 1)
ignored_project = projects_table.create!(id: 2, name: 'ignored-project', path: 'ignored-project',
visibility_level: 0, namespace_id: group.id)
project_authorizations_table.create!(user_id: another_user.id, project_id: ignored_project.id,
access_level: 30)
Sidekiq::Testing.fake! do
Timecop.freeze do
migrate!
expect(BackgroundMigrationWorker.jobs.size).to eq(2)
expect(described_class::MIGRATION).to be_scheduled_migration([user1.id])
expect(described_class::MIGRATION).to be_scheduled_migration([user2.id])
end
end
end
end
Loading
Loading
@@ -1980,6 +1980,23 @@ describe Project do
 
expect(project.reload.import_url).to eq('http://test.com')
end
it 'saves the url credentials percent decoded' do
url = 'http://user:pass%21%3F%40@github.com/t.git'
project = build(:project, import_url: url)
# When the credentials are not decoded this expectation fails
expect(project.import_url).to eq(url)
expect(project.import_data.credentials).to eq(user: 'user', password: 'pass!?@')
end
it 'saves url with no credentials' do
url = 'http://github.com/t.git'
project = build(:project, import_url: url)
expect(project.import_url).to eq(url)
expect(project.import_data.credentials).to eq(user: nil, password: nil)
end
end
 
describe '#container_registry_url' do
Loading
Loading
Loading
Loading
@@ -325,6 +325,14 @@ describe Repository do
expect(repository.commits(nil, all: true, limit: 60).size).to eq(60)
end
end
context "when 'order' flag is set" do
it 'passes order option to perform the query' do
expect(Gitlab::Git::Commit).to receive(:where).with(a_hash_including(order: 'topo')).and_call_original
repository.commits('master', limit: 1, order: 'topo')
end
end
end
 
describe '#new_commits' do
Loading
Loading
Loading
Loading
@@ -12,7 +12,6 @@ describe API::Commits do
let(:project) { create(:project, :repository, creator: user, path: 'my.project') }
let(:branch_with_dot) { project.repository.find_branch('ends-with.json') }
let(:branch_with_slash) { project.repository.find_branch('improve/awesome') }
let(:project_id) { project.id }
let(:current_user) { nil }
 
Loading
Loading
@@ -241,6 +240,40 @@ describe API::Commits do
end
end
end
context 'with order parameter' do
let(:route) { "/projects/#{project_id}/repository/commits?ref_name=0031876&per_page=6&order=#{order}" }
context 'set to topo' do
let(:order) { 'topo' }
# git log --graph -n 6 --pretty=format:"%h" --topo-order 0031876
# * 0031876
# |\
# | * 48ca272
# | * 335bc94
# * | bf6e164
# * | 9d526f8
# |/
# * 1039376
it 'returns project commits ordered by topo order' do
commits = project.repository.commits("0031876", limit: 6, order: 'topo')
get api(route, current_user)
expect(json_response.size).to eq(6)
expect(json_response.map { |entry| entry["id"] }).to eq(commits.map(&:id))
end
end
context 'set to blank' do
let(:order) { '' }
it_behaves_like '400 response' do
let(:request) { get api(route, current_user) }
end
end
end
end
end
 
Loading
Loading
Loading
Loading
@@ -795,13 +795,13 @@ describe API::Issues do
it 'returns issues from non archived projects only by default' do
get api("/groups/#{group1.id}/issues", user), params: { scope: 'all' }
 
expect_response_contain_exactly(issue2, issue1)
expect_paginated_array_response([issue2.id, issue1.id])
end
 
it 'returns issues from archived and non archived projects when non_archived is false' do
get api("/groups/#{group1.id}/issues", user), params: { non_archived: false, scope: 'all' }
 
expect_response_contain_exactly(issue1, issue2, issue3)
expect_paginated_array_response([issue3.id, issue2.id, issue1.id])
end
end
end
Loading
Loading
@@ -888,9 +888,4 @@ describe API::Issues do
 
include_examples 'time tracking endpoints', 'issue'
end
def expect_response_contain_exactly(*items)
expect(json_response.length).to eq(items.size)
expect(json_response.map { |element| element['id'] }).to contain_exactly(*items.map(&:id))
end
end
Loading
Loading
@@ -41,8 +41,7 @@ describe API::MergeRequests do
it 'returns merge requests for public projects' do
get api(endpoint_path)
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
end
end
 
Loading
Loading
@@ -87,10 +86,11 @@ describe API::MergeRequests do
it 'returns an array of all merge_requests' do
get api(endpoint_path, 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.length).to eq(4)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
expect(json_response.last['title']).to eq(merge_request.title)
expect(json_response.last).to have_key('web_url')
expect(json_response.last['sha']).to eq(merge_request.diff_head_sha)
Loading
Loading
@@ -111,7 +111,7 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect_successful_response_with_paginated_array
expect(json_response.last['labels'].pluck('name')).to eq([label2.title, label.title])
expect(json_response.last['labels'].first).to match_schema('/public_api/v4/label_basic')
end
Loading
Loading
@@ -139,11 +139,11 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
expect(json_response.last.keys).to match_array(%w(id iid title web_url created_at description project_id state updated_at))
expect(json_response).to be_an Array
expect(json_response.length).to eq(4)
expect(json_response.last['iid']).to eq(merge_request.iid)
expect(json_response.last['title']).to eq(merge_request.title)
expect(json_response.last).to have_key('web_url')
Loading
Loading
@@ -157,10 +157,10 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(4)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
expect(json_response.last['title']).to eq(merge_request.title)
end
 
Loading
Loading
@@ -169,10 +169,7 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(1)
expect_paginated_array_response([merge_request.id])
expect(json_response.last['title']).to eq(merge_request.title)
end
 
Loading
Loading
@@ -181,10 +178,7 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(1)
expect_paginated_array_response([merge_request_closed.id])
expect(json_response.first['title']).to eq(merge_request_closed.title)
end
 
Loading
Loading
@@ -193,10 +187,7 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(1)
expect_paginated_array_response([merge_request_merged.id])
expect(json_response.first['title']).to eq(merge_request_merged.title)
end
 
Loading
Loading
@@ -210,17 +201,13 @@ describe API::MergeRequests do
it 'returns an empty array if no issue matches milestone' do
get api(endpoint_path, user), params: { milestone: '1.0.0' }
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(0)
expect_empty_array_response
end
 
it 'returns an empty array if milestone does not exist' do
get api(endpoint_path, user), params: { milestone: 'foo' }
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(0)
expect_empty_array_response
end
 
it 'returns an array of merge requests in given milestone' do
Loading
Loading
@@ -234,9 +221,7 @@ describe API::MergeRequests do
it 'returns an array of merge requests matching state in milestone' do
get api(endpoint_path, user), params: { milestone: '0.9', state: 'closed' }
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(1)
expect_paginated_array_response([merge_request_closed.id])
expect(json_response.first['id']).to eq(merge_request_closed.id)
end
 
Loading
Loading
@@ -248,8 +233,7 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(1)
expect(json_response.first['labels']).to eq([label2.title, label.title])
end
Loading
Loading
@@ -259,9 +243,7 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(0)
expect_empty_array_response
end
 
it 'returns an empty array if no merge request matches labels' do
Loading
Loading
@@ -269,9 +251,7 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(0)
expect_empty_array_response
end
 
it 'returns an array of labeled merge requests where all labels match' do
Loading
Loading
@@ -279,8 +259,7 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(1)
expect(json_response.first['labels']).to eq([label2.title, label.title])
end
Loading
Loading
@@ -288,8 +267,7 @@ describe API::MergeRequests do
it 'returns an array of merge requests with any label when filtering by any label' do
get api(endpoint_path, user), params: { labels: [" #{label.title} ", " #{label2.title} "] }
 
expect_paginated_array_response
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(1)
expect(json_response.first['labels']).to eq([label2.title, label.title])
expect(json_response.first['id']).to eq(merge_request.id)
Loading
Loading
@@ -298,8 +276,7 @@ describe API::MergeRequests do
it 'returns an array of merge requests with any label when filtering by any label' do
get api(endpoint_path, user), params: { labels: ["#{label.title} , #{label2.title}"] }
 
expect_paginated_array_response
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(1)
expect(json_response.first['labels']).to eq([label2.title, label.title])
expect(json_response.first['id']).to eq(merge_request.id)
Loading
Loading
@@ -308,7 +285,7 @@ describe API::MergeRequests do
it 'returns an array of merge requests with any label when filtering by any label' do
get api(endpoint_path, user), params: { labels: IssuesFinder::FILTER_ANY }
 
expect_paginated_array_response
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(1)
expect(json_response.first['id']).to eq(merge_request.id)
end
Loading
Loading
@@ -316,10 +293,9 @@ describe API::MergeRequests do
it 'returns an array of merge requests without a label when filtering by no label' do
get api(endpoint_path, user), params: { labels: IssuesFinder::FILTER_NONE }
 
response_ids = json_response.map { |merge_request| merge_request['id'] }
expect_paginated_array_response
expect(response_ids).to contain_exactly(merge_request_closed.id, merge_request_merged.id, merge_request_locked.id)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id, merge_request_closed.id
])
end
end
 
Loading
Loading
@@ -339,10 +315,7 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(1)
expect(json_response.first['id']).to eq(mr2.id)
expect_paginated_array_response([mr2.id])
end
 
context 'with ordering' do
Loading
Loading
@@ -356,10 +329,10 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(4)
expect_paginated_array_response([
merge_request_closed.id, merge_request_locked.id,
merge_request_merged.id, merge_request.id
])
response_dates = json_response.map { |merge_request| merge_request['created_at'] }
expect(response_dates).to eq(response_dates.sort)
end
Loading
Loading
@@ -369,10 +342,10 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(4)
expect_paginated_array_response([
merge_request.id, merge_request_merged.id,
merge_request_locked.id, merge_request_closed.id
])
response_dates = json_response.map { |merge_request| merge_request['created_at'] }
expect(response_dates).to eq(response_dates.sort.reverse)
end
Loading
Loading
@@ -414,10 +387,10 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(4)
expect_paginated_array_response([
merge_request.id, merge_request_locked.id,
merge_request_merged.id, merge_request_closed.id
])
response_dates = json_response.map { |merge_request| merge_request['updated_at'] }
expect(response_dates).to eq(response_dates.sort.reverse)
end
Loading
Loading
@@ -427,10 +400,10 @@ describe API::MergeRequests do
 
get api(path, 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.length).to eq(4)
expect_paginated_array_response([
merge_request_closed.id, merge_request_locked.id,
merge_request_merged.id, merge_request.id
])
response_dates = json_response.map { |merge_request| merge_request['created_at'] }
expect(response_dates).to eq(response_dates.sort)
end
Loading
Loading
@@ -440,7 +413,9 @@ describe API::MergeRequests do
it 'returns merge requests with the given source branch' do
get api(endpoint_path, user), params: { source_branch: merge_request_closed.source_branch, state: 'all' }
 
expect_response_contain_exactly(merge_request_closed, merge_request_merged, merge_request_locked)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id, merge_request_closed.id
])
end
end
 
Loading
Loading
@@ -448,7 +423,9 @@ describe API::MergeRequests do
it 'returns merge requests with the given target branch' do
get api(endpoint_path, user), params: { target_branch: merge_request_closed.target_branch, state: 'all' }
 
expect_response_contain_exactly(merge_request_closed, merge_request_merged, merge_request_locked)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id, merge_request_closed.id
])
end
end
end
Loading
Loading
@@ -471,7 +448,10 @@ describe API::MergeRequests do
it 'returns an array of all merge requests' do
get api('/merge_requests', user), params: { scope: 'all' }
 
expect_paginated_array_response
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
end
 
it "returns authentication error without any scope" do
Loading
Loading
@@ -507,30 +487,23 @@ describe API::MergeRequests do
it 'returns an array of all merge requests except unauthorized ones' do
get api('/merge_requests', user), params: { scope: :all }
 
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 { |mr| mr['id'] })
.to contain_exactly(merge_request.id, merge_request_closed.id, merge_request_merged.id, merge_request_locked.id, merge_request2.id)
expect_paginated_array_response([
merge_request_merged.id, merge_request2.id, merge_request_locked.id, merge_request_closed.id, merge_request.id
])
end
 
it "returns an array of no merge_requests when wip=yes" do
get api("/merge_requests", user), params: { wip: 'yes' }
 
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(0)
expect_empty_array_response
end
 
it "returns an array of no merge_requests when wip=no" do
get api("/merge_requests", user), params: { wip: 'no' }
 
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 { |mr| mr['id'] })
.to contain_exactly(merge_request.id, merge_request_closed.id, merge_request_merged.id, merge_request_locked.id, merge_request2.id)
expect_paginated_array_response([
merge_request_merged.id, merge_request2.id, merge_request_locked.id, merge_request_closed.id, merge_request.id
])
end
 
it 'does not return unauthorized merge requests' do
Loading
Loading
@@ -539,7 +512,9 @@ describe API::MergeRequests do
 
get api('/merge_requests', user), params: { scope: :all }
 
expect_response_contain_exactly(merge_request2, merge_request_merged, merge_request_closed, merge_request, merge_request_locked)
expect_paginated_array_response([
merge_request_merged.id, merge_request2.id, merge_request_locked.id, merge_request_closed.id, merge_request.id
])
expect(json_response.map { |mr| mr['id'] }).not_to include(merge_request3.id)
end
 
Loading
Loading
@@ -548,7 +523,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user2)
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests authored by the given user' do
Loading
Loading
@@ -556,7 +531,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user), params: { author_id: user2.id, scope: :all }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests assigned to the given user' do
Loading
Loading
@@ -564,7 +539,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user), params: { assignee_id: user2.id, scope: :all }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests with no assignee' do
Loading
Loading
@@ -572,7 +547,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user), params: { assignee_id: 'None', scope: :all }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests with any assignee' do
Loading
Loading
@@ -581,7 +556,10 @@ describe API::MergeRequests do
 
get api('/merge_requests', user), params: { assignee_id: 'Any', scope: :all }
 
expect_response_contain_exactly(merge_request, merge_request2, merge_request_closed, merge_request_merged, merge_request_locked)
expect_paginated_array_response([
merge_request_merged.id, merge_request2.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
end
 
it 'returns an array of merge requests assigned to me' do
Loading
Loading
@@ -589,7 +567,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user2), params: { scope: 'assigned_to_me' }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests assigned to me (kebab-case)' do
Loading
Loading
@@ -597,7 +575,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user2), params: { scope: 'assigned-to-me' }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests created by me' do
Loading
Loading
@@ -605,7 +583,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user2), params: { scope: 'created_by_me' }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns an array of merge requests created by me (kebab-case)' do
Loading
Loading
@@ -613,7 +591,7 @@ describe API::MergeRequests do
 
get api('/merge_requests', user2), params: { scope: 'created-by-me' }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
it 'returns merge requests reacted by the authenticated user by the given emoji' do
Loading
Loading
@@ -622,14 +600,16 @@ describe API::MergeRequests do
 
get api('/merge_requests', user2), params: { my_reaction_emoji: award_emoji.name, scope: 'all' }
 
expect_response_ordered_exactly(merge_request3)
expect_paginated_array_response([merge_request3.id])
end
 
context 'source_branch param' do
it 'returns merge requests with the given source branch' do
get api('/merge_requests', user), params: { source_branch: merge_request_closed.source_branch, state: 'all' }
 
expect_response_contain_exactly(merge_request_closed, merge_request_merged, merge_request_locked)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id, merge_request_closed.id
])
end
end
 
Loading
Loading
@@ -637,7 +617,9 @@ describe API::MergeRequests do
it 'returns merge requests with the given target branch' do
get api('/merge_requests', user), params: { target_branch: merge_request_closed.target_branch, state: 'all' }
 
expect_response_contain_exactly(merge_request_closed, merge_request_merged, merge_request_locked)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id, merge_request_closed.id
])
end
end
 
Loading
Loading
@@ -646,7 +628,7 @@ describe API::MergeRequests do
 
get api('/merge_requests?created_before=2000-01-02T00:00:00.060Z', user)
 
expect_response_ordered_exactly(merge_request2)
expect_paginated_array_response([merge_request2.id])
end
 
it 'returns merge requests created after a specific date' do
Loading
Loading
@@ -654,7 +636,7 @@ describe API::MergeRequests do
 
get api("/merge_requests?created_after=#{merge_request2.created_at}", user)
 
expect_response_ordered_exactly(merge_request2)
expect_paginated_array_response([merge_request2.id])
end
 
it 'returns merge requests updated before a specific date' do
Loading
Loading
@@ -662,7 +644,7 @@ describe API::MergeRequests do
 
get api('/merge_requests?updated_before=2000-01-02T00:00:00.060Z', user)
 
expect_response_ordered_exactly(merge_request2)
expect_paginated_array_response([merge_request2.id])
end
 
it 'returns merge requests updated after a specific date' do
Loading
Loading
@@ -670,7 +652,7 @@ describe API::MergeRequests do
 
get api("/merge_requests?updated_after=#{merge_request2.updated_at}", user)
 
expect_response_ordered_exactly(merge_request2)
expect_paginated_array_response([merge_request2.id])
end
 
context 'search params' do
Loading
Loading
@@ -681,25 +663,25 @@ describe API::MergeRequests do
it 'returns merge requests matching given search string for title' do
get api("/merge_requests", user), params: { search: merge_request.title }
 
expect_response_ordered_exactly(merge_request)
expect_paginated_array_response([merge_request.id])
end
 
it 'returns merge requests matching given search string for title and scoped in title' do
get api("/merge_requests", user), params: { search: merge_request.title, in: 'title' }
 
expect_response_ordered_exactly(merge_request)
expect_paginated_array_response([merge_request.id])
end
 
it 'returns an empty array if no merge reques matches given search string for description and scoped in title' do
it 'returns an empty array if no merge request matches given search string for description and scoped in title' do
get api("/merge_requests", user), params: { search: merge_request.description, in: 'title' }
 
expect_response_contain_exactly
expect_empty_array_response
end
 
it 'returns merge requests for project matching given search string for description' do
get api("/merge_requests", user), params: { project_id: project.id, search: merge_request.description }
 
expect_response_ordered_exactly(merge_request)
expect_paginated_array_response([merge_request.id])
end
end
 
Loading
Loading
@@ -707,7 +689,7 @@ describe API::MergeRequests do
it 'returns merge requests with the given state' do
get api('/merge_requests', user), params: { state: 'locked' }
 
expect_response_contain_exactly(merge_request_locked)
expect_paginated_array_response([merge_request_locked.id])
end
end
end
Loading
Loading
@@ -729,18 +711,13 @@ describe API::MergeRequests do
it "returns an array of no merge_requests when wip=yes" do
get api("/projects/#{project.id}/merge_requests", user), params: { wip: 'yes' }
 
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(0)
expect_empty_array_response
end
 
it 'returns merge_request by "iids" array' do
get api(endpoint_path, user), params: { iids: [merge_request.iid, merge_request_closed.iid] }
 
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(2)
expect_paginated_array_response([merge_request_closed.id, merge_request.id])
expect(json_response.first['title']).to eq merge_request_closed.title
expect(json_response.first['id']).to eq merge_request_closed.id
end
Loading
Loading
@@ -815,12 +792,10 @@ describe API::MergeRequests do
it 'returns an array excluding merge_requests from archived projects' do
get api(endpoint_path, user)
 
expect_response_contain_exactly(
merge_request_merged,
merge_request_locked,
merge_request_closed,
merge_request
)
expect_paginated_array_response([
merge_request_merged.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
end
 
context 'with non_archived param set as false' do
Loading
Loading
@@ -829,13 +804,10 @@ describe API::MergeRequests do
 
get api(path, user)
 
expect_response_contain_exactly(
merge_request_merged,
merge_request_locked,
merge_request_closed,
merge_request,
merge_request_archived
)
expect_paginated_array_response([
merge_request_merged.id, merge_request_archived.id, merge_request_locked.id,
merge_request_closed.id, merge_request.id
])
end
end
end
Loading
Loading
@@ -1079,9 +1051,7 @@ describe API::MergeRequests do
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/commits", user)
commit = merge_request.commits.first
 
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.size).to eq(merge_request.commits.size)
expect(json_response.first['id']).to eq(commit.id)
expect(json_response.first['title']).to eq(commit.title)
Loading
Loading
@@ -1105,9 +1075,7 @@ describe API::MergeRequests do
 
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/context_commits", user)
 
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.size).to eq(merge_request.context_commits.size)
expect(json_response.first['id']).to eq(context_commit.id)
expect(json_response.first['title']).to eq(context_commit.title)
Loading
Loading
@@ -1147,9 +1115,7 @@ describe API::MergeRequests do
it 'returns a paginated array of corresponding pipelines' do
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/pipelines")
 
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.count).to eq(1)
expect(json_response.first['id']).to eq(pipeline.id)
end
Loading
Loading
@@ -1395,7 +1361,7 @@ describe API::MergeRequests do
expect(json_response['labels']).to eq([])
end
 
xit 'empty label param as array, does not add any labels' do
it 'empty label param as array, does not add any labels' do
params[:labels] = []
post api("/projects/#{project.id}/merge_requests", user), params: params
 
Loading
Loading
@@ -2232,7 +2198,7 @@ describe API::MergeRequests do
expect(json_response['labels']).to eq []
end
 
xit 'empty label as array, removes labels' do
it 'empty label as array, removes labels' do
put api("/projects/#{project.id}/merge_requests/#{merge_request.iid}", user),
params: {
title: 'new issue',
Loading
Loading
@@ -2240,7 +2206,6 @@ describe API::MergeRequests do
}
 
expect(response.status).to eq(200)
# fails, as grape ommits for some reason empty array as optional param value, so nothing it passed along
expect(json_response['labels']).to eq []
end
 
Loading
Loading
@@ -2306,9 +2271,7 @@ describe API::MergeRequests do
 
get api("/projects/#{project.id}/merge_requests/#{mr.iid}/closes_issues", user)
 
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(1)
expect(json_response.first['id']).to eq(issue.id)
end
Loading
Loading
@@ -2316,10 +2279,7 @@ describe API::MergeRequests do
it 'returns an empty array when there are no issues to be closed' do
get api("/projects/#{project.id}/merge_requests/#{merge_request.iid}/closes_issues", 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.length).to eq(0)
expect_empty_array_response
end
 
it 'handles external issues' do
Loading
Loading
@@ -2332,9 +2292,7 @@ describe API::MergeRequests do
 
get api("/projects/#{jira_project.id}/merge_requests/#{merge_request.iid}/closes_issues", user)
 
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(2)
expect(json_response.second['title']).to eq(ext_issue.title)
expect(json_response.second['id']).to eq(ext_issue.id)
Loading
Loading
@@ -2546,22 +2504,4 @@ describe API::MergeRequests do
merge_request_closed.save
merge_request_closed
end
def expect_response_contain_exactly(*items)
expect_paginated_array_response
expect(json_response.length).to eq(items.size)
expect(json_response.map { |element| element['id'] }).to contain_exactly(*items.map(&:id))
end
def expect_response_ordered_exactly(*items)
expect_paginated_array_response
expect(json_response.length).to eq(items.size)
expect(json_response.map { |element| element['id'] }).to eq(items.map(&:id))
end
def expect_paginated_array_response
expect(response).to have_gitlab_http_status(200)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
end
end
Loading
Loading
@@ -22,6 +22,42 @@ describe Users::RefreshAuthorizedProjectsService do
 
service.execute
end
context 'callbacks' do
let(:callback) { double('callback') }
context 'incorrect_auth_found_callback callback' do
let(:user) { create(:user) }
let(:service) do
described_class.new(user,
incorrect_auth_found_callback: callback)
end
it 'is called' do
access_level = Gitlab::Access::DEVELOPER
create(:project_authorization, user: user, project: project, access_level: access_level)
expect(callback).to receive(:call).with(project.id, access_level).once
service.execute
end
end
context 'missing_auth_found_callback callback' do
let(:service) do
described_class.new(user,
missing_auth_found_callback: callback)
end
it 'is called' do
ProjectAuthorization.delete_all
expect(callback).to receive(:call).with(project.id, Gitlab::Access::MAINTAINER).once
service.execute
end
end
end
end
 
describe '#execute_without_lease' do
Loading
Loading
Loading
Loading
@@ -40,6 +40,17 @@ module ApiHelpers
end
end
 
def expect_empty_array_response
expect_successful_response_with_paginated_array
expect(json_response.length).to eq(0)
end
def expect_successful_response_with_paginated_array
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
end
def expect_paginated_array_response(items)
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
Loading
Loading
Loading
Loading
@@ -1774,9 +1774,10 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
 
at.js@^1.5.4, "at.js@https://gitlab.com/gitlab-org/frontend/At.js.git#121ce9a557b51c33f5693ac8df52d2bda1e53cbe":
at.js@^1.5.4:
version "1.5.4"
resolved "https://gitlab.com/gitlab-org/frontend/At.js.git#121ce9a557b51c33f5693ac8df52d2bda1e53cbe"
resolved "https://registry.yarnpkg.com/at.js/-/at.js-1.5.4.tgz#8fc60cc80eadbe4874449b166a818e7ae1d784c1"
integrity sha512-G8mgUb/PqShPoH8AyjuxsTGvIr1o716BtQUKDM44C8qN2W615y7KGJ68MlTGamd0J0D/m28emUkzagaHTdrGZw==
 
atob@^2.1.1:
version "2.1.2"
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment