diff options
Diffstat (limited to 'spec/serializers/merge_request_user_entity_spec.rb')
-rw-r--r-- | spec/serializers/merge_request_user_entity_spec.rb | 53 |
1 files changed, 47 insertions, 6 deletions
diff --git a/spec/serializers/merge_request_user_entity_spec.rb b/spec/serializers/merge_request_user_entity_spec.rb index dcd4ef6acfb..697fa3001e3 100644 --- a/spec/serializers/merge_request_user_entity_spec.rb +++ b/spec/serializers/merge_request_user_entity_spec.rb @@ -3,19 +3,22 @@ require 'spec_helper' RSpec.describe MergeRequestUserEntity do - let(:user) { create(:user) } - let(:project) { create(:project, :repository) } - let(:request) { EntityRequest.new(project: project, current_user: user) } + let_it_be(:user) { create(:user) } + let_it_be(:merge_request) { create(:merge_request) } + let(:request) { EntityRequest.new(project: merge_request.target_project, current_user: user) } let(:entity) do - described_class.new(user, request: request) + described_class.new(user, request: request, merge_request: merge_request) end - context 'as json' do + describe '#as_json' do subject { entity.as_json } it 'exposes needed attributes' do - expect(subject).to include(:id, :name, :username, :state, :avatar_url, :web_url, :can_merge) + is_expected.to include( + :id, :name, :username, :state, :avatar_url, :web_url, + :can_merge, :can_update_merge_request, :reviewed, :approved + ) end context 'when `status` is not preloaded' do @@ -24,6 +27,22 @@ RSpec.describe MergeRequestUserEntity do end end + context 'when the user has not approved the merge-request' do + it 'exposes that the user has not approved the MR' do + expect(subject).to include(approved: false) + end + end + + context 'when the user has approved the merge-request' do + before do + merge_request.approvals.create!(user: user) + end + + it 'exposes that the user has approved the MR' do + expect(subject).to include(approved: true) + end + end + context 'when `status` is preloaded' do before do user.create_status!(availability: :busy) @@ -35,5 +54,27 @@ RSpec.describe MergeRequestUserEntity do expect(subject[:availability]).to eq('busy') end end + + describe 'performance' do + let_it_be(:user_a) { create(:user) } + let_it_be(:user_b) { create(:user) } + let_it_be(:merge_request_b) { create(:merge_request) } + + it 'is linear in the number of merge requests' do + pending "See: https://gitlab.com/gitlab-org/gitlab/-/issues/322549" + baseline = ActiveRecord::QueryRecorder.new do + ent = described_class.new(user_a, request: request, merge_request: merge_request) + ent.as_json + end + + expect do + a = described_class.new(user_a, request: request, merge_request: merge_request_b) + b = described_class.new(user_b, request: request, merge_request: merge_request_b) + + a.as_json + b.as_json + end.not_to exceed_query_limit(baseline) + end + end end end |