summaryrefslogtreecommitdiff
path: root/spec/controllers/projects
diff options
context:
space:
mode:
authorIgor Drozdov <idrozdov@gitlab.com>2019-06-21 21:22:55 +0300
committerIgor Drozdov <idrozdov@gitlab.com>2019-06-28 10:52:48 +0300
commit07559fda51dd32cf23a14567cc7077c02c3900d4 (patch)
tree820165867e8c10af7705db80b7d868cc57c838eb /spec/controllers/projects
parent546355f734f74c040d0ef0917ade50751fd90731 (diff)
downloadgitlab-ce-07559fda51dd32cf23a14567cc7077c02c3900d4.tar.gz
Extract MR's widget into a separate endpointid-extract-widget-into-different-request
This commits extracts /merge_requests/1.json?serializer=widget Into a separate /merge_requests/1/widget.json endpoint This will allow to use caching for this request
Diffstat (limited to 'spec/controllers/projects')
-rw-r--r--spec/controllers/projects/merge_requests/content_controller_spec.rb60
1 files changed, 60 insertions, 0 deletions
diff --git a/spec/controllers/projects/merge_requests/content_controller_spec.rb b/spec/controllers/projects/merge_requests/content_controller_spec.rb
new file mode 100644
index 00000000000..2879e06aee4
--- /dev/null
+++ b/spec/controllers/projects/merge_requests/content_controller_spec.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+describe Projects::MergeRequests::ContentController do
+ let(:project) { create(:project, :repository) }
+ let(:user) { create(:user) }
+ let(:merge_request) { create(:merge_request, target_project: project, source_project: project) }
+
+ before do
+ sign_in(user)
+ end
+
+ def do_request
+ get :widget, params: {
+ namespace_id: project.namespace.to_param,
+ project_id: project,
+ id: merge_request.iid,
+ format: :json
+ }
+ end
+
+ describe 'GET widget' do
+ context 'user has access to the project' do
+ before do
+ expect(::Gitlab::GitalyClient).to receive(:allow_ref_name_caching).and_call_original
+
+ project.add_maintainer(user)
+ end
+
+ it 'renders widget MR entity as json' do
+ do_request
+
+ expect(response).to match_response_schema('entities/merge_request_widget')
+ end
+
+ it 'checks whether the MR can be merged' do
+ controller.instance_variable_set(:@merge_request, merge_request)
+
+ expect(merge_request).to receive(:check_mergeability)
+
+ do_request
+ end
+
+ it 'closes an MR with moved source project' do
+ merge_request.update_column(:source_project_id, nil)
+
+ expect { do_request }.to change { merge_request.reload.open? }.from(true).to(false)
+ end
+ end
+
+ context 'user does not have access to the project' do
+ it 'renders widget MR entity as json' do
+ do_request
+
+ expect(response).to have_http_status(:not_found)
+ end
+ end
+ end
+end