danger-gitlab_reviewbot 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 18d9331afe98308a84876492708add4449315fe4a1f90145c9b23e70e8547fb7
4
- data.tar.gz: 9abbf57104a68241af9bfc41475ddd32872ee7210a5f87096716b8ad1952611c
3
+ metadata.gz: 59b8a17d363eab75e1676896ea925e3e64691b910d1b19db8b65325d0acbdedc
4
+ data.tar.gz: 49458b9d7dc3ddb3948280301a6d79bc1d146d5bdf6c26f81242a765649d132b
5
5
  SHA512:
6
- metadata.gz: 474afe53630d3bd6c7c09b718d120ee0a966ac5fae93c80520e8ab1b4cff2376bb866ccbfce8b1c198afb923296755f222751e4e76f4b77a44f7fa81a130bae3
7
- data.tar.gz: 537f846fa8177706d9dfa989c50dc36dba52730530bc617d0c1b3e24f4fa9075956082033ec4b4f9187bcfa507ef1a966bb2bcf3382ec018fe224237e9f2e0e7
6
+ metadata.gz: e1d53b11855e07c588d35fd904a7f25ad9c27038dd5eede51bacfdfd8f8489fe85d35fbc9df2b0ef7243d4696123503cc8842e97ddea7bc3e679ffe5dbaf981f
7
+ data.tar.gz: 3c5bd67cd8c0f61951d3a2aefa36721849ff1ef544e929508de6291abce66970e64863cc8a6db2c14794c4818966d5e9b902c96145dcf2368e0508afa1842dd8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danger-gitlab_reviewbot (1.1.0)
4
+ danger-gitlab_reviewbot (1.1.1)
5
5
  danger-gitlab
6
6
  danger-plugin-api (~> 1.0)
7
7
 
@@ -11,6 +11,7 @@ GEM
11
11
  addressable (2.7.0)
12
12
  public_suffix (>= 2.0.2, < 5.0)
13
13
  ast (2.4.0)
14
+ awesome_print (1.8.0)
14
15
  claide (1.0.3)
15
16
  claide-plugins (0.9.2)
16
17
  cork
@@ -67,7 +68,6 @@ GEM
67
68
  httparty (0.18.0)
68
69
  mime-types (~> 3.0)
69
70
  multi_xml (>= 0.5.2)
70
- jaro_winkler (1.5.4)
71
71
  kramdown (2.2.1)
72
72
  rexml
73
73
  kramdown-parser-gfm (1.1.0)
@@ -76,7 +76,7 @@ GEM
76
76
  rb-fsevent (>= 0.9.3)
77
77
  rb-inotify (>= 0.9.7)
78
78
  lumberjack (1.2.4)
79
- method_source (1.0.0)
79
+ method_source (0.9.2)
80
80
  mime-types (3.3.1)
81
81
  mime-types-data (~> 3.2015)
82
82
  mime-types-data (3.2020.0512)
@@ -95,9 +95,11 @@ GEM
95
95
  parallel (1.19.1)
96
96
  parser (2.7.1.2)
97
97
  ast (~> 2.4.0)
98
- pry (0.13.1)
99
- coderay (~> 1.1)
100
- method_source (~> 1.0)
98
+ pry (0.12.2)
99
+ coderay (~> 1.1.0)
100
+ method_source (~> 0.9.0)
101
+ pry-nav (0.3.0)
102
+ pry (>= 0.9.10, < 0.13.0)
101
103
  public_suffix (4.0.5)
102
104
  rainbow (3.0.0)
103
105
  rake (13.0.1)
@@ -112,15 +114,14 @@ GEM
112
114
  rspec-mocks (~> 3.9.0)
113
115
  rspec-core (3.9.2)
114
116
  rspec-support (~> 3.9.3)
115
- rspec-expectations (3.9.1)
117
+ rspec-expectations (3.9.2)
116
118
  diff-lcs (>= 1.2.0, < 2.0)
117
119
  rspec-support (~> 3.9.0)
118
120
  rspec-mocks (3.9.1)
119
121
  diff-lcs (>= 1.2.0, < 2.0)
120
122
  rspec-support (~> 3.9.0)
121
123
  rspec-support (3.9.3)
122
- rubocop (0.82.0)
123
- jaro_winkler (~> 1.5.1)
124
+ rubocop (0.83.0)
124
125
  parallel (~> 1.10)
125
126
  parser (>= 2.7.0.1)
126
127
  rainbow (>= 2.2.2, < 4.0)
@@ -142,12 +143,14 @@ PLATFORMS
142
143
  ruby
143
144
 
144
145
  DEPENDENCIES
146
+ awesome_print
145
147
  bundler (~> 2.1)
146
148
  danger-gitlab_reviewbot!
147
- guard (~> 2.14)
148
- guard-rspec (~> 4.7)
149
+ guard
150
+ guard-rspec
149
151
  listen (= 3.0.7)
150
152
  pry
153
+ pry-nav
151
154
  rake
152
155
  rspec
153
156
  rubocop
@@ -33,8 +33,8 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency "yard"
34
34
 
35
35
  # Makes testing easy via `bundle exec guard`
36
- spec.add_development_dependency 'guard', '~> 2.14'
37
- spec.add_development_dependency 'guard-rspec', '~> 4.7'
36
+ spec.add_development_dependency 'guard'
37
+ spec.add_development_dependency 'guard-rspec'
38
38
 
39
39
  # If you want to work on older builds of ruby
40
40
  spec.add_development_dependency 'listen', '3.0.7'
@@ -47,4 +47,7 @@ Gem::Specification.new do |spec|
47
47
  #
48
48
  # This will stop test execution and let you inspect the results
49
49
  spec.add_development_dependency 'pry'
50
+ spec.add_development_dependency 'pry-nav'
51
+ spec.add_development_dependency 'awesome_print'
52
+
50
53
  end
@@ -1,3 +1,3 @@
1
1
  module GitlabReviewbot
2
- VERSION = "1.1.0".freeze
2
+ VERSION = "1.1.1".freeze
3
3
  end
@@ -44,17 +44,36 @@ module Danger
44
44
  # * Danger::AssignStrategies::LeastBusyStrategy - assign the N users with the least amount of open MRs
45
45
  # to review
46
46
  #
47
- attr_writer :strategy
48
47
  def strategy
49
- @strategy || Danger::AssignStrategies::RandomStrategy
48
+ @strategy #|| Danger::AssignStrategies::RandomStrategy.new(client: gitlab.api, project: project_id, mr: mr_iid)
49
+ end
50
+
51
+ def strategy=(klass)
52
+ @strategy = klass.new(client: gitlab.api, project: project_id, mr: mr_iid)
53
+ end
54
+
55
+ def project_id
56
+ ENV['CI_PROJECT_ID']
57
+ end
58
+
59
+ def mr_iid
60
+ ENV['CI_MERGE_REQUEST_IID']
61
+ end
62
+
63
+ #Once a strategy is in place, adopt the conf methods
64
+ def method_missing(method, *args)
65
+ super unless method.to_s.start_with? 'strategy_'
66
+ if strategy.respond_to? method.to_s.delete_prefix('strategy_')
67
+ strategy.send(method.to_s.delete_prefix('strategy_'), *args)
68
+ else
69
+ super
70
+ end
50
71
  end
51
72
 
52
73
  # Call this method from the Dangerfile to assign reviewers to your merge requests
53
74
  # @return The usernames list of assigned reviewes [Array<String>]
54
75
  #
55
76
  def assign!
56
- project_id = ENV['CI_PROJECT_ID']
57
- mr_iid = ENV['CI_MERGE_REQUEST_IID']
58
77
  if mr_iid.nil?
59
78
  raise "Env variable CI_MERGE_REQUEST_IID doesn't point to a valid merge request iid"
60
79
  end
@@ -73,17 +92,20 @@ module Danger
73
92
  # puts "Required: #{required_assignees_count}" if @verbose
74
93
 
75
94
  # if required_assignees_count == 0
76
- # puts "Nothing to do" if @verbose
95
+ # puts "Nothing to do" if verbose
77
96
  # return
78
97
  # end
79
98
 
80
- strategy_class = strategy.new(client: gitlab.api, project: project_id, mr: mr_iid, group: gitlab_group)
99
+ @strategy.group_name = gitlab_group
81
100
 
82
- assignees = strategy_class.assign! assignees_amount
101
+ assignees = @strategy.assign! assignees_amount
83
102
 
84
103
  puts "Assigning: #{assignees}" if verbose
85
104
  return assignees
86
105
  end
106
+
107
+ private
108
+
87
109
  end
88
110
  end
89
111
 
@@ -8,7 +8,7 @@ module Danger
8
8
  author = fetch_author()
9
9
  invalid_assignees = [ fetch_author() ] + fetch_assigned_reviewers()
10
10
 
11
- users_with_reviews_pending = client.users_with_pending_mr_review(project_id)
11
+ users_with_reviews_pending = client.users_with_pending_mr_review(project_id).filter { |u| users_in_group.include? u }
12
12
  users_without_reviews_pending = users_in_group.filter { |u| ! users_with_reviews_pending.include? u }
13
13
 
14
14
  (users_with_reviews_pending + users_without_reviews_pending).filter { |u| u.id != author.id }
@@ -7,11 +7,10 @@ module Danger
7
7
  attr_accessor :client
8
8
  attr_accessor :excluded_users
9
9
 
10
- def initialize(client:, project:, mr:, group:)
10
+ def initialize(client:, project:, mr:)
11
11
  @client = client
12
12
  @project_id = project
13
13
  @mr_iid = mr
14
- @group_name = group
15
14
  @excluded_users = []
16
15
  end
17
16
 
@@ -39,9 +38,10 @@ module Danger
39
38
  end
40
39
 
41
40
  def fetch_users_in_group
42
- excluded_users = @excluded_users.map { |u| client.find_user_with_username(u) }
43
- client.fetch_users_for_group(@group_name).filter { |u| ! excluded_users.include? u }
41
+ excluded = @excluded_users.map { |u| client.find_user_with_username(u) }
42
+ client.fetch_users_for_group(@group_name).filter { |u| ! excluded.include? u }
44
43
  end
44
+
45
45
  end
46
46
  end
47
47
  end
@@ -15,20 +15,21 @@ module Danger
15
15
 
16
16
  @dangerfile = testing_dangerfile
17
17
  @plugin = @dangerfile.gitlab_reviewbot
18
- @plugin.strategy = Danger::AssignStrategies::RandomStrategy
19
18
  @strategy_mock = instance_double(Danger::AssignStrategies::Strategy)
20
19
  allow(Danger::AssignStrategies::RandomStrategy).to receive(:new).and_return(@strategy_mock)
20
+ allow(@strategy_mock).to receive(:group_name=).with('tech/ios')
21
+ @plugin.strategy = Danger::AssignStrategies::RandomStrategy
22
+ @plugin.gitlab_group = 'tech/ios'
23
+
21
24
  end
22
25
 
23
26
  it "Assign one reviewer" do
24
- @plugin.gitlab_group = 'tech/ios'
25
27
 
26
28
  expect(@strategy_mock).to receive(:assign!).with(1).and_return(['Sam'])
27
29
 
28
30
  @plugin.assign!
29
31
  end
30
32
  it "Assign one reviewer" do
31
- @plugin.gitlab_group = 'tech/ios'
32
33
 
33
34
  expect(@strategy_mock).to receive(:assign!).with(1).and_return(['Sam'])
34
35
 
@@ -36,7 +37,6 @@ module Danger
36
37
  end
37
38
 
38
39
  it "Assign multiple reviewers" do
39
- @plugin.gitlab_group = 'tech/ios'
40
40
  @plugin.assignees_amount = 2
41
41
 
42
42
  expect(@strategy_mock).to receive(:assign!).with(2).and_return(['Sam, Nic'])
@@ -44,6 +44,15 @@ module Danger
44
44
  @plugin.assign!
45
45
  end
46
46
 
47
+ it "Assigns strategy options" do
48
+ expect(@strategy_mock).to receive(:excluded_users=)
49
+ expect(@strategy_mock).to receive(:excluded_users).and_return([])
50
+
51
+ @plugin.strategy_excluded_users = ['Tom']
52
+ @plugin.strategy_excluded_users << 'Sam'
53
+
54
+ end
55
+
47
56
  ['CI_PROJECT_ID', 'CI_MERGE_REQUEST_IID'].each do |var|
48
57
  it "Fails when required #{var} variables are not available" do
49
58
  ENV[var] = nil
@@ -16,9 +16,11 @@ module Danger
16
16
  @nic.review_count = 0
17
17
  @members = [@author, @tom, @sam, @luke]
18
18
  allow(@mock_client).to receive(:fetch_author_for_mr).and_return(@author)
19
- allow(@mock_client).to receive(:fetch_users_for_group).with(2200).and_return(@members)
19
+ allow(@mock_client).to receive(:fetch_users_for_group).with("tech/ios").and_return(@members)
20
+
21
+ @strategy = AssignStrategies::LeastBusyStrategy.new(client: @mock_client, project: 10, mr: 110)
22
+ @strategy.group_name = "tech/ios"
20
23
 
21
- @strategy = AssignStrategies::LeastBusyStrategy.new(client: @mock_client, project: 10, mr: 110, group: 2200)
22
24
  end
23
25
 
24
26
  it "Assign the one least busy" do
@@ -89,6 +91,27 @@ module Danger
89
91
 
90
92
  @strategy.assign!(1)
91
93
  end
94
+
95
+ it "honours excluded users" do
96
+ allow(@mock_client).to receive(:fetch_mr_reviewers).with(10, 110).and_return([])
97
+ @tom.review_count = 1
98
+ @sam.review_count = 4
99
+ @luke.review_count = 3
100
+ users_with_pending_mr_review = [@author, @sam, @tom, @luke]
101
+ expect(@mock_client).to receive(:users_with_pending_mr_review).and_return(users_with_pending_mr_review)
102
+
103
+ allow(@mock_client).to receive(:find_user_with_username).with('Tom').and_return(@tom)
104
+ @strategy.excluded_users = ['Tom']
105
+
106
+ expect(@mock_client).to receive(:assign_mr_to_users) do |project, mr, users|
107
+ expect(project).to be == 10
108
+ expect(mr).to be == 110
109
+ expect(users).to contain_exactly(@luke)
110
+ end
111
+
112
+ @strategy.assign!(1)
113
+ end
114
+
92
115
  end
93
116
  end
94
117
 
@@ -17,9 +17,10 @@ module Danger
17
17
  @author = @lei
18
18
  @members = [@author, @tom, @sam]
19
19
  allow(@mock_client).to receive(:fetch_author_for_mr).and_return(@author)
20
- allow(@mock_client).to receive(:fetch_users_for_group).with(2200).and_return(@members)
20
+ allow(@mock_client).to receive(:fetch_users_for_group).with("tech/ios").and_return(@members)
21
21
 
22
- @strategy = AssignStrategies::RandomStrategy.new(client: @mock_client, project: 10, mr: 110, group: 2200)
22
+ @strategy = AssignStrategies::RandomStrategy.new(client: @mock_client, project: 10, mr: 110)
23
+ @strategy.group_name = "tech/ios"
23
24
  end
24
25
 
25
26
  it "assign the right amount of reviewers" do
@@ -56,24 +57,6 @@ module Danger
56
57
  @strategy.assign!(2)
57
58
  end
58
59
 
59
- it "honours excluded users" do
60
- allow(@mock_client).to receive(:fetch_mr_reviewers).with(10, 110).and_return([])
61
- allow(@mock_client).to receive(:find_user_with_username).with('Luke').and_return(@luke)
62
- allow(@mock_client).to receive(:find_user_with_username).with('Nic').and_return(@nic)
63
- allow(@mock_client).to receive(:fetch_users_for_group).with(2200).and_return(@members + [@nic, @luke])
64
- @strategy.excluded_users = ['Nic', 'Luke']
65
-
66
- expect(@mock_client).to receive(:assign_mr_to_users) do |project, mr, users|
67
- expect(project).to be == 10
68
- expect(mr).to be == 110
69
- expect(users).to contain_exactly(@tom, @sam)
70
- end
71
-
72
- @strategy.assign!(2)
73
-
74
- end
75
-
76
-
77
60
  end
78
61
  end
79
62
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danger-gitlab_reviewbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Gallonetto
@@ -112,30 +112,30 @@ dependencies:
112
112
  name: guard
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - "~>"
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '2.14'
117
+ version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - "~>"
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '2.14'
124
+ version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: guard-rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '4.7'
131
+ version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '4.7'
138
+ version: '0'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: listen
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +164,34 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pry-nav
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: awesome_print
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
167
195
  description: 'A review raffle bot for Gitlab '
168
196
  email:
169
197
  - fabio.gallonetto@curve.com