summaryrefslogtreecommitdiff
path: root/spec/services/resource_events/change_state_service_spec.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-07-20 12:26:25 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-07-20 12:26:25 +0000
commita09983ae35713f5a2bbb100981116d31ce99826e (patch)
tree2ee2af7bd104d57086db360a7e6d8c9d5d43667a /spec/services/resource_events/change_state_service_spec.rb
parent18c5ab32b738c0b6ecb4d0df3994000482f34bd8 (diff)
downloadgitlab-ce-a09983ae35713f5a2bbb100981116d31ce99826e.tar.gz
Add latest changes from gitlab-org/gitlab@13-2-stable-ee
Diffstat (limited to 'spec/services/resource_events/change_state_service_spec.rb')
-rw-r--r--spec/services/resource_events/change_state_service_spec.rb91
1 files changed, 74 insertions, 17 deletions
diff --git a/spec/services/resource_events/change_state_service_spec.rb b/spec/services/resource_events/change_state_service_spec.rb
index e5d2a4ab11e..5b5379b241b 100644
--- a/spec/services/resource_events/change_state_service_spec.rb
+++ b/spec/services/resource_events/change_state_service_spec.rb
@@ -2,38 +2,95 @@
require 'spec_helper'
-describe ResourceEvents::ChangeStateService do
+RSpec.describe ResourceEvents::ChangeStateService do
let_it_be(:project) { create(:project) }
let_it_be(:user) { create(:user) }
let(:issue) { create(:issue, project: project) }
let(:merge_request) { create(:merge_request, source_project: project) }
+ let(:source_commit) { create(:commit, project: project) }
+ let(:source_merge_request) { create(:merge_request, source_project: project, target_project: project, target_branch: 'foo') }
- describe '#execute' do
- context 'when resource is an issue' do
- %w[opened reopened closed locked].each do |state|
- it "creates the expected event if issue has #{state} state" do
- described_class.new(user: user, resource: issue).execute(state)
+ shared_examples 'a state event' do
+ %w[opened reopened closed locked].each do |state|
+ it "creates the expected event if resource has #{state} state" do
+ described_class.new(user: user, resource: resource).execute(status: state, mentionable_source: source)
+
+ event = resource.resource_state_events.last
- event = issue.resource_state_events.last
- expect(event.issue).to eq(issue)
+ if resource.is_a?(Issue)
+ expect(event.issue).to eq(resource)
expect(event.merge_request).to be_nil
- expect(event.state).to eq(state)
+ elsif resource.is_a?(MergeRequest)
+ expect(event.issue).to be_nil
+ expect(event.merge_request).to eq(resource)
end
+
+ expect(event.state).to eq(state)
+
+ expect_event_source(event, source)
end
end
+ end
- context 'when resource is a merge request' do
- %w[opened reopened closed locked merged].each do |state|
- it "creates the expected event if merge request has #{state} state" do
- described_class.new(user: user, resource: merge_request).execute(state)
+ describe '#execute' do
+ context 'when resource is an Issue' do
+ context 'when no source is given' do
+ it_behaves_like 'a state event' do
+ let(:resource) { issue }
+ let(:source) { nil }
+ end
+ end
- event = merge_request.resource_state_events.last
- expect(event.issue).to be_nil
- expect(event.merge_request).to eq(merge_request)
- expect(event.state).to eq(state)
+ context 'when source commit is given' do
+ it_behaves_like 'a state event' do
+ let(:resource) { issue }
+ let(:source) { source_commit }
+ end
+ end
+
+ context 'when source merge request is given' do
+ it_behaves_like 'a state event' do
+ let(:resource) { issue }
+ let(:source) { source_merge_request }
end
end
end
+
+ context 'when resource is a MergeRequest' do
+ context 'when no source is given' do
+ it_behaves_like 'a state event' do
+ let(:resource) { merge_request }
+ let(:source) { nil }
+ end
+ end
+
+ context 'when source commit is given' do
+ it_behaves_like 'a state event' do
+ let(:resource) { merge_request }
+ let(:source) { source_commit }
+ end
+ end
+
+ context 'when source merge request is given' do
+ it_behaves_like 'a state event' do
+ let(:resource) { merge_request }
+ let(:source) { source_merge_request }
+ end
+ end
+ end
+ end
+
+ def expect_event_source(event, source)
+ if source.is_a?(MergeRequest)
+ expect(event.source_commit).to be_nil
+ expect(event.source_merge_request).to eq(source)
+ elsif source.is_a?(Commit)
+ expect(event.source_commit).to eq(source.id)
+ expect(event.source_merge_request).to be_nil
+ else
+ expect(event.source_merge_request).to be_nil
+ expect(event.source_commit).to be_nil
+ end
end
end