summaryrefslogtreecommitdiff
path: root/spec/services/issues/build_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/issues/build_service_spec.rb')
-rw-r--r--spec/services/issues/build_service_spec.rb96
1 files changed, 43 insertions, 53 deletions
diff --git a/spec/services/issues/build_service_spec.rb b/spec/services/issues/build_service_spec.rb
index b96dd981e0f..cf75efb5c57 100644
--- a/spec/services/issues/build_service_spec.rb
+++ b/spec/services/issues/build_service_spec.rb
@@ -7,12 +7,14 @@ RSpec.describe Issues::BuildService do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:developer) { create(:user) }
+ let_it_be(:reporter) { create(:user) }
let_it_be(:guest) { create(:user) }
let(:user) { developer }
before_all do
project.add_developer(developer)
+ project.add_reporter(reporter)
project.add_guest(guest)
end
@@ -140,76 +142,64 @@ RSpec.describe Issues::BuildService do
end
describe '#execute' do
- context 'as developer' do
- it 'builds a new issues with given params' do
- milestone = create(:milestone, project: project)
- issue = build_issue(milestone_id: milestone.id)
-
- expect(issue.milestone).to eq(milestone)
- expect(issue.issue_type).to eq('issue')
- expect(issue.work_item_type.base_type).to eq('issue')
- end
+ describe 'setting milestone' do
+ context 'when developer' do
+ it 'builds a new issues with given params' do
+ milestone = create(:milestone, project: project)
+ issue = build_issue(milestone_id: milestone.id)
+
+ expect(issue.milestone).to eq(milestone)
+ end
- it 'sets milestone to nil if it is not available for the project' do
- milestone = create(:milestone, project: create(:project))
- issue = build_issue(milestone_id: milestone.id)
+ it 'sets milestone to nil if it is not available for the project' do
+ milestone = create(:milestone, project: create(:project))
+ issue = build_issue(milestone_id: milestone.id)
- expect(issue.milestone).to be_nil
+ expect(issue.milestone).to be_nil
+ end
end
- context 'when issue_type is incident' do
- it 'sets the correct issue type' do
- issue = build_issue(issue_type: 'incident')
+ context 'when guest' do
+ let(:user) { guest }
- expect(issue.issue_type).to eq('incident')
- expect(issue.work_item_type.base_type).to eq('incident')
+ it 'cannot set milestone' do
+ milestone = create(:milestone, project: project)
+ issue = build_issue(milestone_id: milestone.id)
+
+ expect(issue.milestone).to be_nil
end
end
end
- context 'as guest' do
- let(:user) { guest }
-
- it 'cannot set milestone' do
- milestone = create(:milestone, project: project)
- issue = build_issue(milestone_id: milestone.id)
+ describe 'setting issue type' do
+ context 'with a corresponding WorkItem::Type' do
+ let_it_be(:type_issue_id) { WorkItem::Type.default_issue_type.id }
+ let_it_be(:type_incident_id) { WorkItem::Type.default_by_type(:incident).id }
+
+ where(:issue_type, :current_user, :work_item_type_id, :resulting_issue_type) do
+ nil | ref(:guest) | ref(:type_issue_id) | 'issue'
+ 'issue' | ref(:guest) | ref(:type_issue_id) | 'issue'
+ 'incident' | ref(:guest) | ref(:type_issue_id) | 'issue'
+ 'incident' | ref(:reporter) | ref(:type_incident_id) | 'incident'
+ # update once support for test_case is enabled
+ 'test_case' | ref(:guest) | ref(:type_issue_id) | 'issue'
+ # update once support for requirement is enabled
+ 'requirement' | ref(:guest) | ref(:type_issue_id) | 'issue'
+ 'invalid' | ref(:guest) | ref(:type_issue_id) | 'issue'
+ # ensure that we don't set a value which has a permission check but is an invalid issue type
+ 'project' | ref(:guest) | ref(:type_issue_id) | 'issue'
+ end
- expect(issue.milestone).to be_nil
- end
+ with_them do
+ let(:user) { current_user }
- context 'setting issue type' do
- shared_examples 'builds an issue' do
- specify do
+ it 'builds an issue' do
issue = build_issue(issue_type: issue_type)
expect(issue.issue_type).to eq(resulting_issue_type)
expect(issue.work_item_type_id).to eq(work_item_type_id)
end
end
-
- it 'cannot set invalid issue type' do
- issue = build_issue(issue_type: 'project')
-
- expect(issue).to be_issue
- end
-
- context 'with a corresponding WorkItem::Type' do
- let_it_be(:type_issue_id) { WorkItem::Type.default_issue_type.id }
- let_it_be(:type_incident_id) { WorkItem::Type.default_by_type(:incident).id }
-
- where(:issue_type, :work_item_type_id, :resulting_issue_type) do
- nil | ref(:type_issue_id) | 'issue'
- 'issue' | ref(:type_issue_id) | 'issue'
- 'incident' | ref(:type_incident_id) | 'incident'
- 'test_case' | ref(:type_issue_id) | 'issue' # update once support for test_case is enabled
- 'requirement' | ref(:type_issue_id) | 'issue' # update once support for requirement is enabled
- 'invalid' | ref(:type_issue_id) | 'issue'
- end
-
- with_them do
- it_behaves_like 'builds an issue'
- end
- end
end
end
end