diff options
author | Nick Thomas <nick@gitlab.com> | 2019-03-11 19:20:43 +0000 |
---|---|---|
committer | Nick Thomas <nick@gitlab.com> | 2019-03-11 19:20:43 +0000 |
commit | 496f9a9ea905a69a17baf72cd0094917068f8722 (patch) | |
tree | 0e83d7dd3d98cc4668aaa5622558a4a22d4fe2d0 | |
parent | db266771c4d7b831a3627b7130683878b52b92ab (diff) | |
parent | 7f0ec9d8cec37e73c8f17d3a70686da495e18ec5 (diff) | |
download | gitlab-ce-496f9a9ea905a69a17baf72cd0094917068f8722.tar.gz |
Merge branch 'ab-roulette-multiple-roles' into 'master'
Support multiple roulette roles per project
See merge request gitlab-org/gitlab-ce!25818
-rw-r--r-- | lib/gitlab/danger/teammate.rb | 8 | ||||
-rw-r--r-- | spec/lib/gitlab/danger/teammate_spec.rb | 39 |
2 files changed, 43 insertions, 4 deletions
diff --git a/lib/gitlab/danger/teammate.rb b/lib/gitlab/danger/teammate.rb index 4b822aa86c5..bfada512727 100644 --- a/lib/gitlab/danger/teammate.rb +++ b/lib/gitlab/danger/teammate.rb @@ -21,21 +21,21 @@ module Gitlab # Traintainers also count as reviewers def reviewer?(project, category) - capabilities(project) == "reviewer #{category}" || traintainer?(project, category) + capabilities(project).include?("reviewer #{category}") || traintainer?(project, category) end def traintainer?(project, category) - capabilities(project) == "trainee_maintainer #{category}" + capabilities(project).include?("trainee_maintainer #{category}") end def maintainer?(project, category) - capabilities(project) == "maintainer #{category}" + capabilities(project).include?("maintainer #{category}") end private def capabilities(project) - projects.fetch(project, '') + Array(projects.fetch(project, [])) end end end diff --git a/spec/lib/gitlab/danger/teammate_spec.rb b/spec/lib/gitlab/danger/teammate_spec.rb new file mode 100644 index 00000000000..4bc0a4c1398 --- /dev/null +++ b/spec/lib/gitlab/danger/teammate_spec.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +describe Gitlab::Danger::Teammate do + subject { described_class.new({ 'projects' => projects }) } + let(:projects) { { project => capabilities } } + let(:project) { double } + + describe 'multiple roles project project' do + let(:capabilities) { ['reviewer backend', 'maintainer frontend', 'trainee_maintainer database'] } + + it '#reviewer? supports multiple roles per project' do + expect(subject.reviewer?(project, 'backend')).to be_truthy + end + + it '#traintainer? supports multiple roles per project' do + expect(subject.traintainer?(project, 'database')).to be_truthy + end + + it '#maintainer? supports multiple roles per project' do + expect(subject.maintainer?(project, 'frontend')).to be_truthy + end + end + + describe 'one role project project' do + let(:capabilities) { 'reviewer backend' } + + it '#reviewer? supports one role per project' do + expect(subject.reviewer?(project, 'backend')).to be_truthy + end + + it '#traintainer? supports one role per project' do + expect(subject.traintainer?(project, 'database')).to be_falsey + end + + it '#maintainer? supports one role per project' do + expect(subject.maintainer?(project, 'frontend')).to be_falsey + end + end +end |