diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-19 01:45:44 +0000 |
commit | 85dc423f7090da0a52c73eb66faf22ddb20efff9 (patch) | |
tree | 9160f299afd8c80c038f08e1545be119f5e3f1e1 /spec/models/issue_spec.rb | |
parent | 15c2c8c66dbe422588e5411eee7e68f1fa440bb8 (diff) | |
download | gitlab-ce-85dc423f7090da0a52c73eb66faf22ddb20efff9.tar.gz |
Add latest changes from gitlab-org/gitlab@13-4-stable-ee
Diffstat (limited to 'spec/models/issue_spec.rb')
-rw-r--r-- | spec/models/issue_spec.rb | 78 |
1 files changed, 76 insertions, 2 deletions
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb index 59634524e74..283d945157b 100644 --- a/spec/models/issue_spec.rb +++ b/spec/models/issue_spec.rb @@ -133,6 +133,7 @@ RSpec.describe Issue do let_it_be(:project) { create(:project) } let_it_be(:issue) { create(:issue, project: project) } let_it_be(:incident) { create(:incident, project: project) } + let_it_be(:test_case) { create(:quality_test_case, project: project) } it 'gives issues with the given issue type' do expect(described_class.with_issue_type('issue')) @@ -140,8 +141,8 @@ RSpec.describe Issue do end it 'gives issues with the given issue type' do - expect(described_class.with_issue_type(%w(issue incident))) - .to contain_exactly(issue, incident) + expect(described_class.with_issue_type(%w(issue incident test_case))) + .to contain_exactly(issue, incident, test_case) end end @@ -311,6 +312,50 @@ RSpec.describe Issue do end end + describe '#related_issues' do + let(:user) { create(:user) } + let(:authorized_project) { create(:project) } + let(:authorized_project2) { create(:project) } + let(:unauthorized_project) { create(:project) } + + let(:authorized_issue_a) { create(:issue, project: authorized_project) } + let(:authorized_issue_b) { create(:issue, project: authorized_project) } + let(:authorized_issue_c) { create(:issue, project: authorized_project2) } + + let(:unauthorized_issue) { create(:issue, project: unauthorized_project) } + + let!(:issue_link_a) { create(:issue_link, source: authorized_issue_a, target: authorized_issue_b) } + let!(:issue_link_b) { create(:issue_link, source: authorized_issue_a, target: unauthorized_issue) } + let!(:issue_link_c) { create(:issue_link, source: authorized_issue_a, target: authorized_issue_c) } + + before do + authorized_project.add_developer(user) + authorized_project2.add_developer(user) + end + + it 'returns only authorized related issues for given user' do + expect(authorized_issue_a.related_issues(user)) + .to contain_exactly(authorized_issue_b, authorized_issue_c) + end + + it 'returns issues with valid issue_link_type' do + link_types = authorized_issue_a.related_issues(user).map(&:issue_link_type) + + expect(link_types).not_to be_empty + expect(link_types).not_to include(nil) + end + + describe 'when a user cannot read cross project' do + it 'only returns issues within the same project' do + expect(Ability).to receive(:allowed?).with(user, :read_all_resources, :global).at_least(:once).and_call_original + expect(Ability).to receive(:allowed?).with(user, :read_cross_project).and_return(false) + + expect(authorized_issue_a.related_issues(user)) + .to contain_exactly(authorized_issue_b) + end + end + end + describe '#can_move?' do let(:issue) { create(:issue) } @@ -1139,4 +1184,33 @@ RSpec.describe Issue do expect(context[:label_url_method]).to eq(:project_issues_url) end end + + describe 'scheduling rebalancing' do + before do + allow_next_instance_of(RelativePositioning::Mover) do |mover| + allow(mover).to receive(:move) { raise ActiveRecord::QueryCanceled } + end + end + + let(:project) { build_stubbed(:project_empty_repo) } + let(:issue) { build_stubbed(:issue, relative_position: 100, project: project) } + + it 'schedules rebalancing if we time-out when moving' do + lhs = build_stubbed(:issue, relative_position: 99, project: project) + to_move = build(:issue, project: project) + expect(IssueRebalancingWorker).to receive(:perform_async).with(nil, project.id) + + expect { to_move.move_between(lhs, issue) }.to raise_error(ActiveRecord::QueryCanceled) + end + end + + describe '#allows_reviewers?' do + it 'returns false as issues do not support reviewers feature' do + stub_feature_flags(merge_request_reviewers: true) + + issue = build_stubbed(:issue) + + expect(issue.allows_reviewers?).to be(false) + end + end end |