Commit 119ad568 authored by Douwe Maan's avatar Douwe Maan

Test correct assign and unassign behavior

parent 7a707573
require 'spec_helper' require 'spec_helper'
describe QuickActions::InterpretService do describe QuickActions::InterpretService do
let(:current_user) { create(:user) }
let(:user) { create(:user) } let(:user) { create(:user) }
let(:developer) { create(:user) } let(:user2) { create(:user) }
let(:developer2) { create(:user) } let(:user3) { create(:user) }
let(:developer3) { create(:user) }
let(:group) { create(:group) } let(:group) { create(:group) }
let(:project) { create(:project, :public, group: group) } let(:project) { create(:project, :public, group: group) }
let(:issue) { create(:issue, project: project) } let(:issue) { create(:issue, project: project) }
let(:service) { described_class.new(project, developer) } let(:service) { described_class.new(project, current_user) }
before do before do
stub_licensed_features(multiple_issue_assignees: true) stub_licensed_features(multiple_issue_assignees: true)
project.add_developer(developer) project.add_developer(current_user)
end end
describe '#execute' do describe '#execute' do
context 'assign command' do context 'assign command' do
let(:content) { "/assign @#{developer.username}" }
context 'Issue' do context 'Issue' do
it 'fetches assignees and populates them if content contains /assign' do it 'fetches assignees and populates them if content contains /assign' do
issue.assignees << user issue.update(assignee_ids: [user.id, user2.id])
_, updates = service.execute(content, issue) _, updates = service.execute("/unassign @#{user2.username}\n/assign @#{user3.username}", issue)
expect(updates[:assignee_ids]).to match_array([developer.id, user.id]) expect(updates[:assignee_ids]).to match_array([user.id, user3.id])
end end
context 'assign command with multiple assignees' do context 'assign command with multiple assignees' do
let(:content) { "/assign @#{developer.username} @#{developer2.username}" }
before do
project.add_developer(developer2)
end
it 'fetches assignee and populates assignee_ids if content contains /assign' do it 'fetches assignee and populates assignee_ids if content contains /assign' do
_, updates = service.execute(content, issue) issue.update(assignee_ids: [user.id])
expect(updates[:assignee_ids]).to match_array([developer.id, developer2.id]) _, updates = service.execute("/unassign @#{user.username}\n/assign @#{user2.username} @#{user3.username}", issue)
expect(updates[:assignee_ids]).to match_array([user2.id, user3.id])
end end
end end
end end
...@@ -50,27 +44,25 @@ describe QuickActions::InterpretService do ...@@ -50,27 +44,25 @@ describe QuickActions::InterpretService do
context 'Issue' do context 'Issue' do
it 'unassigns user if content contains /unassign @user' do it 'unassigns user if content contains /unassign @user' do
issue.update(assignee_ids: [developer.id, developer2.id]) issue.update(assignee_ids: [user.id, user2.id])
_, updates = service.execute("/unassign @#{developer2.username}", issue) _, updates = service.execute("/assign @#{user3.username}\n/unassign @#{user2.username}", issue)
expect(updates).to eq(assignee_ids: [developer.id]) expect(updates[:assignee_ids]).to match_array([user.id, user3.id])
end end
it 'unassigns both users if content contains /unassign @user @user1' do it 'unassigns both users if content contains /unassign @user @user1' do
user = create(:user) issue.update(assignee_ids: [user.id, user2.id])
issue.update(assignee_ids: [developer.id, developer2.id, user.id])
_, updates = service.execute("/unassign @#{developer2.username} @#{developer.username}", issue) _, updates = service.execute("/assign @#{user3.username}\n/unassign @#{user2.username} @#{user3.username}", issue)
expect(updates).to eq(assignee_ids: [user.id]) expect(updates[:assignee_ids]).to match_array([user.id])
end end
it 'unassigns all the users if content contains /unassign' do it 'unassigns all the users if content contains /unassign' do
issue.update(assignee_ids: [developer.id, developer2.id]) issue.update(assignee_ids: [user.id, user2.id])
_, updates = service.execute('/unassign', issue) _, updates = service.execute("/assign @#{user3.username}\n/unassign", issue)
expect(updates[:assignee_ids]).to be_empty expect(updates[:assignee_ids]).to be_empty
end end
...@@ -78,7 +70,7 @@ describe QuickActions::InterpretService do ...@@ -78,7 +70,7 @@ describe QuickActions::InterpretService do
end end
context 'reassign command' do context 'reassign command' do
let(:content) { "/reassign @#{user.username}" } let(:content) { "/reassign @#{current_user.username}" }
context 'Merge Request' do context 'Merge Request' do
let(:merge_request) { create(:merge_request, source_project: project) } let(:merge_request) { create(:merge_request, source_project: project) }
...@@ -91,10 +83,10 @@ describe QuickActions::InterpretService do ...@@ -91,10 +83,10 @@ describe QuickActions::InterpretService do
end end
context 'Issue' do context 'Issue' do
let(:content) { "/reassign @#{user.username}" } let(:content) { "/reassign @#{current_user.username}" }
before do before do
issue.update(assignee_ids: [developer.id]) issue.update(assignee_ids: [user.id])
end end
context 'unlicensed' do context 'unlicensed' do
...@@ -110,9 +102,9 @@ describe QuickActions::InterpretService do ...@@ -110,9 +102,9 @@ describe QuickActions::InterpretService do
end end
it 'reassigns user if content contains /reassign @user' do it 'reassigns user if content contains /reassign @user' do
_, updates = service.execute("/reassign @#{user.username}", issue) _, updates = service.execute("/reassign @#{current_user.username}", issue)
expect(updates).to eq(assignee_ids: [user.id]) expect(updates[:assignee_ids]).to match_array([current_user.id])
end end
end end
end end
...@@ -190,34 +182,34 @@ describe QuickActions::InterpretService do ...@@ -190,34 +182,34 @@ describe QuickActions::InterpretService do
describe '#explain' do describe '#explain' do
describe 'unassign command' do describe 'unassign command' do
let(:content) { '/unassign' } let(:content) { '/unassign' }
let(:issue) { create(:issue, project: project, assignees: [developer, developer2]) } let(:issue) { create(:issue, project: project, assignees: [user, user2]) }
it "includes all assignees' references" do it "includes all assignees' references" do
_, explanations = service.explain(content, issue) _, explanations = service.explain(content, issue)
expect(explanations).to eq(["Removes assignees @#{developer.username} and @#{developer2.username}."]) expect(explanations).to eq(["Removes assignees @#{user.username} and @#{user2.username}."])
end end
end end
describe 'unassign command with assignee references' do describe 'unassign command with assignee references' do
let(:content) { "/unassign @#{developer.username} @#{developer3.username}" } let(:content) { "/unassign @#{user.username} @#{user3.username}" }
let(:issue) { create(:issue, project: project, assignees: [developer, developer2, developer3]) } let(:issue) { create(:issue, project: project, assignees: [user, user2, user3]) }
it 'includes only selected assignee references' do it 'includes only selected assignee references' do
_, explanations = service.explain(content, issue) _, explanations = service.explain(content, issue)
expect(explanations).to eq(["Removes assignees @#{developer.username} and @#{developer3.username}."]) expect(explanations).to eq(["Removes assignees @#{user.username} and @#{user3.username}."])
end end
end end
describe 'unassign command with non-existent assignee reference' do describe 'unassign command with non-existent assignee reference' do
let(:content) { "/unassign @#{developer.username} @#{developer3.username}" } let(:content) { "/unassign @#{user.username} @#{user3.username}" }
let(:issue) { create(:issue, project: project, assignees: [developer, developer2]) } let(:issue) { create(:issue, project: project, assignees: [user, user2]) }
it 'ignores non-existent assignee references' do it 'ignores non-existent assignee references' do
_, explanations = service.explain(content, issue) _, explanations = service.explain(content, issue)
expect(explanations).to eq(["Removes assignee @#{developer.username}."]) expect(explanations).to eq(["Removes assignee @#{user.username}."])
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment