summaryrefslogtreecommitdiff
path: root/spec/serializers/merge_request_user_entity_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/serializers/merge_request_user_entity_spec.rb')
-rw-r--r--spec/serializers/merge_request_user_entity_spec.rb53
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