danger-gitlab_reviewbot 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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