diff options
Diffstat (limited to 'spec/models/merge_request_spec.rb')
-rw-r--r-- | spec/models/merge_request_spec.rb | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index cf4f58f558c..05586cbfc64 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -30,6 +30,7 @@ RSpec.describe MergeRequest, factory_default: :keep do it { is_expected.to have_many(:resource_state_events) } it { is_expected.to have_many(:draft_notes) } it { is_expected.to have_many(:reviews).inverse_of(:merge_request) } + it { is_expected.to have_many(:reviewed_by_users).through(:reviews).source(:author) } it { is_expected.to have_one(:cleanup_schedule).inverse_of(:merge_request) } it { is_expected.to have_many(:created_environments).class_name('Environment').inverse_of(:merge_request) } @@ -46,6 +47,20 @@ RSpec.describe MergeRequest, factory_default: :keep do expect(project.merge_requests.find(merge_request.id)).to eq(merge_request) end end + + describe '#reviewed_by_users' do + let!(:merge_request) { create(:merge_request) } + + context 'when the same user has several reviews' do + before do + 2.times { create(:review, merge_request: merge_request, project: merge_request.project, author: merge_request.author) } + end + + it 'returns distinct users' do + expect(merge_request.reviewed_by_users).to match_array([merge_request.author]) + end + end + end end describe '.from_and_to_forks' do @@ -4229,6 +4244,18 @@ RSpec.describe MergeRequest, factory_default: :keep do transition! end + + context 'when transaction is not committed' do + it_behaves_like 'transition not triggering mergeRequestMergeStatusUpdated GraphQL subscription' do + def transition! + MergeRequest.transaction do + super + + raise ActiveRecord::Rollback + end + end + end + end end shared_examples 'for an invalid state transition' do |