summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimothy Andrew <mail@timothyandrew.net>2016-09-21 01:22:20 +0530
committerTimothy Andrew <mail@timothyandrew.net>2016-09-21 01:22:20 +0530
commit68e1b5bbc076398b2886fe1fe2cc440a52d7cab1 (patch)
treeec3584c5375990b68f24b94365a1184ac0949c07
parent918e589c2b29c18d9fe3a8e6c93a3f490c86beb1 (diff)
downloadgitlab-ce-68e1b5bbc076398b2886fe1fe2cc440a52d7cab1.tar.gz
Use the `IssuableBaseService` lifecycle hooks to cache `MergeRequestsClosingIssues`
- Instead of overriding `create` and `update` in `MergeRequests::BaseService` - Get all merge request service specs passing
-rw-r--r--app/models/issue.rb2
-rw-r--r--app/models/merge_request.rb2
-rw-r--r--app/services/issuable_base_service.rb5
-rw-r--r--app/services/merge_requests/base_service.rb12
-rw-r--r--app/services/merge_requests/create_service.rb1
-rw-r--r--app/services/merge_requests/update_service.rb4
-rw-r--r--spec/services/merge_requests/create_service_spec.rb2
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb2
-rw-r--r--spec/services/merge_requests/update_service_spec.rb6
9 files changed, 17 insertions, 19 deletions
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 25ba38a1cff..abd58e0454a 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -23,7 +23,7 @@ class Issue < ActiveRecord::Base
has_many :events, as: :target, dependent: :destroy
- has_many :merge_requests_closing_issues, class_name: 'MergeRequestsClosingIssues'
+ has_many :merge_requests_closing_issues, class_name: 'MergeRequestsClosingIssues', dependent: :delete_all
validates :project, presence: true
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index c05718f4d5a..616efaf3c42 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -16,7 +16,7 @@ class MergeRequest < ActiveRecord::Base
has_many :events, as: :target, dependent: :destroy
- has_many :merge_requests_closing_issues, class_name: 'MergeRequestsClosingIssues'
+ has_many :merge_requests_closing_issues, class_name: 'MergeRequestsClosingIssues', dependent: :delete_all
serialize :merge_params, Hash
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index 4c8d93999a7..fbce46769f7 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -157,6 +157,10 @@ class IssuableBaseService < BaseService
# To be overridden by subclasses
end
+ def after_update(issuable)
+ # To be overridden by subclasses
+ end
+
def update_issuable(issuable, attributes)
issuable.with_transaction_returning_status do
issuable.update(attributes.merge(updated_by: current_user))
@@ -182,6 +186,7 @@ class IssuableBaseService < BaseService
end
handle_changes(issuable, old_labels: old_labels, old_mentioned_users: old_mentioned_users)
+ after_update(issuable)
issuable.create_new_cross_references!(current_user)
execute_hooks(issuable, 'update')
end
diff --git a/app/services/merge_requests/base_service.rb b/app/services/merge_requests/base_service.rb
index 9704a7050eb..ba424b09463 100644
--- a/app/services/merge_requests/base_service.rb
+++ b/app/services/merge_requests/base_service.rb
@@ -35,18 +35,6 @@ module MergeRequests
end
end
- def create(merge_request)
- merge_request = super(merge_request)
- merge_request.cache_merge_request_closes_issues!(current_user)
- merge_request
- end
-
- def update(merge_request)
- merge_request = super(merge_request)
- merge_request.cache_merge_request_closes_issues!(current_user)
- merge_request
- end
-
private
def filter_params
diff --git a/app/services/merge_requests/create_service.rb b/app/services/merge_requests/create_service.rb
index 73247e62421..b0ae2dfe4ce 100644
--- a/app/services/merge_requests/create_service.rb
+++ b/app/services/merge_requests/create_service.rb
@@ -20,6 +20,7 @@ module MergeRequests
event_service.open_mr(issuable, current_user)
notification_service.new_merge_request(issuable, current_user)
todo_service.new_merge_request(issuable, current_user)
+ issuable.cache_merge_request_closes_issues!(current_user)
end
end
end
diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb
index 398ec47f0ea..f14f9e4b327 100644
--- a/app/services/merge_requests/update_service.rb
+++ b/app/services/merge_requests/update_service.rb
@@ -77,5 +77,9 @@ module MergeRequests
def close_service
MergeRequests::CloseService
end
+
+ def after_update(issuable)
+ issuable.cache_merge_request_closes_issues!(current_user)
+ end
end
end
diff --git a/spec/services/merge_requests/create_service_spec.rb b/spec/services/merge_requests/create_service_spec.rb
index ff6bad6aaba..d400655617a 100644
--- a/spec/services/merge_requests/create_service_spec.rb
+++ b/spec/services/merge_requests/create_service_spec.rb
@@ -108,7 +108,7 @@ describe MergeRequests::CreateService, services: true do
allow(service).to receive(:execute_hooks)
merge_request = service.execute
- expect(merge_request.reload.closes_issues).to match_array([first_issue, second_issue])
+ expect(merge_request.reload.closes_issues(user)).to match_array([first_issue, second_issue])
end
end
end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 22cb122526c..dac4ba060c9 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -200,7 +200,7 @@ describe MergeRequests::RefreshService, services: true do
allow(refresh_service).to receive(:execute_hooks)
refresh_service.execute(@oldrev, @newrev, 'refs/heads/feature')
- expect(merge_request.reload.closes_issues).to eq([issue])
+ expect(merge_request.reload.closes_issues(@user)).to eq([issue])
end
end
diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb
index 68dd0382a3d..e9c908ede78 100644
--- a/spec/services/merge_requests/update_service_spec.rb
+++ b/spec/services/merge_requests/update_service_spec.rb
@@ -274,7 +274,7 @@ describe MergeRequests::UpdateService, services: true do
allow(service).to receive(:execute_hooks)
service.execute(merge_request)
- expect(merge_request.reload.closes_issues).to match_array([first_issue, second_issue])
+ expect(merge_request.reload.closes_issues(user)).to match_array([first_issue, second_issue])
end
it 'removes `MergeRequestsClosingIssues` records when issues are not closed anymore' do
@@ -288,13 +288,13 @@ describe MergeRequests::UpdateService, services: true do
merge_request = MergeRequests::CreateService.new(project, user, opts).execute
- expect(merge_request.reload.closes_issues).to match_array([first_issue, second_issue])
+ expect(merge_request.reload.closes_issues(user)).to match_array([first_issue, second_issue])
service = described_class.new(project, user, description: "not closing any issues")
allow(service).to receive(:execute_hooks)
service.execute(merge_request.reload)
- expect(merge_request.reload.closes_issues).to be_empty
+ expect(merge_request.reload.closes_issues(user)).to be_empty
end
end
end