reviewlette 0.0.6 → 0.0.7
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 +4 -4
- data/.gitignore +4 -6
- data/Gemfile +1 -1
- data/Gemfile.lock +6 -6
- data/README.md +5 -57
- data/Rakefile +13 -1
- data/bin/reviewlette +2 -1
- data/config/github_example.yml +3 -0
- data/config/members_example.yml +25 -0
- data/config/trello_example.yml +9 -0
- data/lib/reviewlette/github_connection.rb +29 -34
- data/lib/reviewlette/trello_connection.rb +30 -64
- data/lib/reviewlette/vacations.rb +23 -31
- data/lib/reviewlette.rb +36 -185
- data/reviewlette.gemspec +2 -2
- data/spec/github_connection_spec.rb +18 -73
- data/spec/reviewlette_spec.rb +40 -336
- data/spec/spec_helper.rb +1 -8
- data/spec/trello_connection_spec.rb +29 -164
- data/spec/vacation_spec.rb +26 -4
- metadata +12 -27
- data/Guardfile +0 -24
- data/config/.github.yml +0 -2
- data/config/.members.yml +0 -1
- data/config/.trello.yml +0 -4
- data/lib/matching.rb +0 -0
- data/lib/reviewlette/database.rb +0 -77
- data/lib/reviewlette/exceptions.rb +0 -7
- data/lib/reviewlette/graph.html +0 -17
- data/lib/reviewlette/graph_gen.rb +0 -62
- data/lib/reviewlette/mail.rb +0 -27
- data/lib/reviewlette/reviewlette.db +0 -0
- data/lib/reviewlette/version.rb +0 -3
- data/prophet.rb +0 -4
- data/reviewlette.db +0 -0
- data/spec/database_spec.rb +0 -34
- data/spec/support/request_stubbing.rb +0 -305
- data/task +0 -1
data/spec/reviewlette_spec.rb
CHANGED
@@ -2,366 +2,70 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Reviewlette do
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
Reviewlette.instance_variable_set("@#{variable_name}", send(variable_name.to_sym))
|
8
|
-
end
|
9
|
-
|
10
|
-
let(:number) { 23 }
|
11
|
-
let(:title) { 'title' }
|
12
|
-
let(:body) { 'body' }
|
13
|
-
let(:githubname) { 'gitty' }
|
14
|
-
let(:trelloname) { 'jschmid' }
|
15
|
-
let(:github_stub) { github_stub }
|
16
|
-
let(:board) { stub_boards_call }
|
17
|
-
let(:repo) { 'repo/repo' }
|
18
|
-
let(:id) { 23 }
|
19
|
-
let(:card) { stub_card_call }
|
20
|
-
let(:logger) { double 'logger' }
|
21
|
-
let(:repos) { %w[repo/repo, repos/repos] }
|
22
|
-
let(:trello_connection) { double 'trello_connection' }
|
23
|
-
let(:reviewer) {double 'reviewer'}
|
24
|
-
let(:db) {Reviewlette::Database.new}
|
25
|
-
let(:github_connection) { double 'github_connection' }
|
26
|
-
let(:full_comment) { @full_comment = "@#{trelloname} will review https://github.com/#{repo}/issues/#{number.to_s}" }
|
27
|
-
let(:exp) { AlreadyAssignedException }
|
28
|
-
|
29
|
-
describe '.spin' do
|
30
|
-
before do
|
31
|
-
instance_variable! :github_connection
|
32
|
-
instance_variable! :repo
|
33
|
-
instance_variable! :trello_connection
|
34
|
-
instance_variable! :id
|
35
|
-
instance_variable! :repos
|
36
|
-
instance_variable! :title
|
37
|
-
instance_variable! :body
|
38
|
-
instance_variable! :number
|
39
|
-
instance_variable! :logger
|
40
|
-
instance_variable! :repos
|
41
|
-
issue = { number: 1, title: 'Title', body: 'Body' }
|
42
|
-
expect(Reviewlette).to receive(:setup)
|
43
|
-
expect(Reviewlette).to receive(:get_available_repos).and_return [repo]
|
44
|
-
expect(Reviewlette).to receive(:get_unassigned_github_issues).and_return [issue]
|
45
|
-
expect(Reviewlette).to receive(:find_card).and_return true
|
46
|
-
expect(Reviewlette).to receive(:update_vacations)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'spins until find_id' do
|
50
|
-
expect(Reviewlette).to receive(:find_id).and_return false
|
51
|
-
expect(Reviewlette).to_not receive(:set_reviewer)
|
52
|
-
expect(Reviewlette).to_not receive(:transform_name)
|
53
|
-
expect(Reviewlette).to_not receive(:add_reviewer_on_github)
|
54
|
-
expect(Reviewlette).to_not receive(:comment_on_github)
|
55
|
-
expect(Reviewlette).to_not receive(:add_to_trello_card)
|
56
|
-
expect(Reviewlette).to_not receive(:comment_on_trello)
|
57
|
-
expect(Reviewlette).to_not receive(:move_to_list)
|
58
|
-
expect(Reviewlette).to_not receive(:comment_on_error)
|
59
|
-
Reviewlette.spin
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'spins until set_reviewer' do
|
63
|
-
expect(Reviewlette).to receive(:find_id).and_return true
|
64
|
-
expect(Reviewlette).to receive(:set_reviewer)
|
65
|
-
expect(Reviewlette).to_not receive(:transform_name)
|
66
|
-
expect(Reviewlette).to_not receive(:add_reviewer_on_github)
|
67
|
-
expect(Reviewlette).to_not receive(:comment_on_github)
|
68
|
-
expect(Reviewlette).to_not receive(:add_to_trello_card)
|
69
|
-
expect(Reviewlette).to_not receive(:comment_on_trello)
|
70
|
-
expect(Reviewlette).to_not receive(:move_to_list)
|
71
|
-
expect(Reviewlette).to receive(:comment_on_error)
|
72
|
-
Reviewlette.spin
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'spins until set_reviewer' do
|
76
|
-
expect(Reviewlette).to receive(:find_id).and_return true
|
77
|
-
expect(Reviewlette).to receive(:set_reviewer).and_return true
|
78
|
-
expect(Reviewlette).to receive(:transform_name)
|
79
|
-
expect(Reviewlette).to receive(:add_reviewer_on_github)
|
80
|
-
expect(Reviewlette).to receive(:comment_on_github)
|
81
|
-
# expect(Reviewlette).to receive(:add_to_trello_card)
|
82
|
-
expect(Reviewlette).to receive(:comment_on_trello)
|
83
|
-
expect(Reviewlette).to receive(:move_to_list)
|
84
|
-
Reviewlette.instance_variable_set(:@reviewer, 'hi')
|
85
|
-
Reviewlette.instance_variable_set(:@db, db)
|
86
|
-
allow(@reviewer).to receive(:username)
|
87
|
-
expect(db).to receive(:add_pr_to_db).with('Title', @reviewer.username)
|
88
|
-
expect(Reviewlette.instance_variable_set(:@reviewer, nil))
|
89
|
-
expect(Reviewlette).to_not receive(:comment_on_error)
|
90
|
-
Reviewlette.spin
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '.get_available_repos' do
|
95
|
-
|
96
|
-
it 'pulls in an array on avaialble repos' do
|
97
|
-
|
98
|
-
instance_variable! :repos
|
99
|
-
expect(Reviewlette.instance_variable_get(:@repos)).to be_kind_of Array #ok
|
100
|
-
Reviewlette.get_available_repos
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe '#find_card' do
|
105
|
-
|
106
|
-
it 'finds the card by Github title' do
|
107
|
-
line = 'Review_1337_name_of_pr_trello_shortid_454'
|
108
|
-
pulls = { number: 1 }
|
109
|
-
expect(Reviewlette).to receive(:match_pr_id_with_issue_id).and_return [pulls]
|
110
|
-
allow(Reviewlette.find_card(line)).to receive(:match_pr_id_with_issue_id).and_return Array
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
describe '.fetch_branch' do
|
116
|
-
|
117
|
-
it 'gets the branch_name from github' do
|
118
|
-
branch_name = 'review_github_branch_name_trello_23'
|
119
|
-
subject.instance_variable_set(:@pullreq_ids, {number: 1})
|
120
|
-
split_branch_name = branch_name.split('_')
|
121
|
-
instance_variable! :github_connection
|
122
|
-
expect(Reviewlette.instance_variable_get(:@pullreq_ids)).to receive_message_chain(:values, :index => 0).and_return number
|
123
|
-
expect(github_connection).to receive(:get_branch_name).and_return branch_name
|
124
|
-
expect(branch_name).to receive(:split).with('_').and_return split_branch_name
|
125
|
-
expect(split_branch_name).to receive_message_chain(:last, :to_i)
|
126
|
-
Reviewlette.fetch_branch
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
describe '.comment_on_error' do
|
131
|
-
it 'posts a comment with the arror message on trello' do
|
132
|
-
instance_variable! :trello_connection
|
133
|
-
expect(trello_connection).to receive(:comment_on_card).with("Skipped Issue 1 because everyone on the team is assigned to the card", nil)
|
134
|
-
Reviewlette.comment_on_error
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
describe '.get_unassigned_github_issues' do
|
139
|
-
it 'returns all unassigned issues' do
|
140
|
-
instance_variable! :github_connection
|
141
|
-
expect(github_connection).to receive_message_chain(:list_issues, :select)
|
142
|
-
Reviewlette.get_unassigned_github_issues
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
describe '.match_pr_id_with_issue_id' do
|
147
|
-
|
148
|
-
it 'matches issue id with pr id' do
|
149
|
-
instance_variable! :github_connection
|
150
|
-
instance_variable! :repo
|
151
|
-
pulls = {number: 1}
|
152
|
-
allow(github_connection).to receive(:list_pulls).and_return [pulls]
|
153
|
-
allow(pulls).to receive(:number).and_return [1]
|
154
|
-
Reviewlette.match_pr_id_with_issue_id
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
|
159
|
-
describe '.transform_name' do
|
160
|
-
it 'transforms trelloname to github name' do
|
161
|
-
instance_variable! :trelloname
|
162
|
-
Reviewlette.transform_name
|
163
|
-
expect(Reviewlette.instance_variable_get("@githubname")).to be_a_kind_of String
|
164
|
-
end
|
165
|
-
end
|
5
|
+
subject { Reviewlette }
|
6
|
+
let( :reviewlette ) { subject.new }
|
166
7
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
end
|
8
|
+
before {
|
9
|
+
allow(GithubConnection).to receive(:new).and_return GithubConnection
|
10
|
+
allow(TrelloConnection).to receive(:new).and_return TrelloConnection
|
11
|
+
}
|
172
12
|
|
173
|
-
it 'finds the id' do
|
174
|
-
expect(trello_connection).to receive(:find_card_by_id).with(id).and_return card
|
175
|
-
Reviewlette.find_id
|
176
|
-
end
|
177
13
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
14
|
+
describe '.new' do
|
15
|
+
it 'sets github and trello connections' do
|
16
|
+
expect(GithubConnection).to receive (:new)
|
17
|
+
expect(TrelloConnection).to receive (:new)
|
18
|
+
subject.new
|
183
19
|
end
|
184
20
|
end
|
185
21
|
|
186
|
-
describe '.
|
22
|
+
describe '.run' do
|
187
23
|
|
188
|
-
|
189
|
-
|
190
|
-
|
24
|
+
it 'iterates over all open pull requests and extracts trello ids from name' do
|
25
|
+
expect(GithubConnection).to receive(:unassigned_pull_requests).and_return([{number: 11, title: 'test_issue_12'}])
|
26
|
+
expect(TrelloConnection).to receive(:find_card_by_id).with(12)
|
191
27
|
|
192
|
-
|
193
|
-
reviewer = double('reviewer')
|
194
|
-
instance_variable! :trello_connection
|
195
|
-
instance_variable! :card
|
196
|
-
expect(trello_connection).to receive(:determine_reviewer).with(card).and_return reviewer
|
197
|
-
expect(reviewer).to receive(:username).and_return String
|
198
|
-
expect(reviewer).to receive(:username).and_return String
|
199
|
-
Reviewlette.set_reviewer
|
28
|
+
reviewlette.run
|
200
29
|
end
|
201
30
|
|
202
|
-
it '
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
expect(trello_connection).to receive(:determine_reviewer).with(card).and_raise(Reviewlette::AlreadyAssignedException)
|
208
|
-
allow(card).to receive(:short_id).and_return 3
|
209
|
-
expect($stdout).to receive(:puts)
|
210
|
-
expect(logger).to receive(:warn)
|
211
|
-
expect(Reviewlette.set_reviewer).to eq false
|
212
|
-
end
|
213
|
-
end
|
31
|
+
it 'adds assignee and reviewer comment on github, adds comment on trello and moves card' do
|
32
|
+
card = Trello::Card.new
|
33
|
+
expect(GithubConnection).to receive(:unassigned_pull_requests).and_return([{number: 11, title: 'test_issue_12'}])
|
34
|
+
expect(TrelloConnection).to receive(:find_card_by_id).with(12).and_return(card)
|
35
|
+
expect(reviewlette).to receive(:select_reviewer).and_return({'suse_username' => 'test', 'github_username' => 'testgit'})
|
214
36
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
instance_variable! :title
|
219
|
-
instance_variable! :body
|
220
|
-
instance_variable! :number
|
221
|
-
instance_variable! :githubname
|
222
|
-
expect(github_connection).to receive(:add_assignee).with('repo/repo', 23, 'title', 'body', 'gitty').and_return true
|
223
|
-
Reviewlette.add_reviewer_on_github
|
224
|
-
end
|
225
|
-
end
|
37
|
+
expect(GithubConnection).to receive(:add_assignee).with(11, 'testgit')
|
38
|
+
expect(GithubConnection).to receive(:reviewer_comment).with(11, 'testgit', card)
|
39
|
+
expect(GithubConnection).to receive(:repo).and_return('SUSE/test')
|
226
40
|
|
227
|
-
|
228
|
-
|
229
|
-
instance_variable! :card
|
230
|
-
instance_variable! :number
|
231
|
-
instance_variable! :githubname
|
232
|
-
instance_variable! :github_connection
|
233
|
-
expect(card).to receive(:url).and_return 'www.example.url'
|
234
|
-
expect(github_connection).to receive(:comment_on_issue).with('repo/repo', 23, 'gitty', 'www.example.url').and_return true
|
235
|
-
Reviewlette.comment_on_github
|
236
|
-
end
|
237
|
-
end
|
41
|
+
expect(TrelloConnection).to receive(:comment_on_card).with("@ will review https://github.com/SUSE/test/issues/11", card)
|
42
|
+
expect(TrelloConnection).to receive(:move_card_to_list).with(card, 'In review')
|
238
43
|
|
239
|
-
|
240
|
-
it 'adds a reviewer to the right trello card' do
|
241
|
-
instance_variable! :trello_connection
|
242
|
-
instance_variable! :reviewer
|
243
|
-
instance_variable! :card
|
244
|
-
expect(trello_connection).to receive(:add_reviewer_to_card).with(reviewer, card).and_return true
|
245
|
-
Reviewlette.add_to_trello_card
|
44
|
+
reviewlette.run
|
246
45
|
end
|
247
46
|
|
248
|
-
it 'rescues with: already assigned' do
|
249
|
-
instance_variable! :trello_connection
|
250
|
-
expect{Reviewlette.add_to_trello_card}.to raise_exception
|
251
|
-
# Reviewlette.add_to_trello_card
|
252
|
-
end
|
253
47
|
end
|
254
48
|
|
255
|
-
describe '.
|
256
|
-
before do
|
257
|
-
instance_variable! :repo
|
258
|
-
instance_variable! :trelloname
|
259
|
-
instance_variable! :number
|
260
|
-
instance_variable! :trello_connection
|
261
|
-
instance_variable! :full_comment
|
262
|
-
instance_variable! :card
|
263
|
-
end
|
264
|
-
|
265
|
-
it 'puts a comment on the trello card ' do
|
266
|
-
expect(full_comment).to eq '@jschmid will review https://github.com/repo/repo/issues/23'
|
267
|
-
end
|
49
|
+
describe '.select_reviewer' do
|
268
50
|
|
269
|
-
|
270
|
-
|
271
|
-
Reviewlette.comment_on_trello
|
272
|
-
end
|
273
|
-
end
|
51
|
+
MEMBERS_CONFIG['members'] = [{'suse_username' => 'test1', 'trello_username' => 'trellotest1'},
|
52
|
+
{'suse_username' => 'test2', 'trello_username' => 'trellotest2'}]
|
274
53
|
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
instance_variable! :repo
|
281
|
-
instance_variable! :id
|
54
|
+
it 'excludes members on vacation' do
|
55
|
+
card = Trello::Card.new
|
56
|
+
allow(card).to receive(:members).and_return([])
|
57
|
+
expect(Vacations).to receive(:members_on_vacation).and_return(MEMBERS_CONFIG['members'].first['suse_username'])
|
58
|
+
expect(reviewlette.select_reviewer(nil, card)).to eq(MEMBERS_CONFIG['members'].last)
|
282
59
|
end
|
283
60
|
|
284
|
-
it '
|
285
|
-
|
286
|
-
|
287
|
-
expect(
|
288
|
-
|
61
|
+
it 'excludes the owner of the trello card' do
|
62
|
+
card = Trello::Card.new
|
63
|
+
allow(card).to receive_message_chain(:members, :map).and_return(['trellotest1'])
|
64
|
+
expect(Vacations).to receive(:members_on_vacation).and_return([])
|
65
|
+
expect(reviewlette.select_reviewer(nil, card)).to eq(MEMBERS_CONFIG['members'].last)
|
289
66
|
end
|
290
67
|
|
291
|
-
it 'moves the card to #in-Review list if the pull is not merged' do
|
292
|
-
expect(trello_connection).to receive(:find_column).with('In review').and_return 'In review'
|
293
|
-
expect(trello_connection).to receive(:move_card_to_list).with(card,'In review').and_return Object
|
294
|
-
expect(github_connection).to receive(:pull_merged?).with(repo, id).and_return false
|
295
|
-
Reviewlette.move_to_list
|
296
|
-
end
|
297
68
|
end
|
298
69
|
|
299
|
-
describe '.setup' do
|
300
|
-
before do
|
301
|
-
instance_variable! :github_connection
|
302
|
-
instance_variable! :trello_connection
|
303
|
-
instance_variable! :board
|
304
|
-
instance_variable! :repo
|
305
|
-
end
|
306
|
-
|
307
|
-
it 'sets up repo variable' do
|
308
|
-
Reviewlette.setup
|
309
|
-
expect(Reviewlette.instance_variable_get('@repo')).to be_kind_of String #ok
|
310
|
-
end
|
311
|
-
it 'sets up the github_connection' do
|
312
|
-
Reviewlette.setup
|
313
|
-
expect(github_connection).to be_kind_of Object #how to call this kind of structure
|
314
|
-
end
|
315
70
|
|
316
|
-
it 'sets up the trello_connection' do
|
317
|
-
Reviewlette.setup
|
318
|
-
expect(Reviewlette.instance_variable_get('@trello_connection')).to be_kind_of Object #same
|
319
|
-
end
|
320
|
-
|
321
|
-
it 'sets up the board' do
|
322
|
-
Reviewlette.setup
|
323
|
-
expect(Reviewlette.instance_variable_get('@board')).to be_kind_of Object #same
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
|
-
describe '.update_vacations' do
|
328
|
-
|
329
|
-
it 'updates vacationsstatus based on tel vacation output' do
|
330
|
-
vacations = ['2015-01-07', '2015-01-25']
|
331
|
-
instance_variable_set(:@vacations, vacations)
|
332
|
-
instance_variable_set(:@db, db)
|
333
|
-
expect(Reviewlette::Vacations).to receive(:find_vacations).at_least(:once)
|
334
|
-
expect(Reviewlette).to receive(:evaluate_vacations).at_least(:once)
|
335
|
-
Reviewlette.update_vacations
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
|
-
describe '.evaluate_vacations' do
|
340
|
-
|
341
|
-
it 'checks if vacation state is true' do
|
342
|
-
today = Date.today
|
343
|
-
allow(subject).to receive(:parse_vacations).and_return [[today]]
|
344
|
-
subject.evaluate_vacations('jschmid')
|
345
|
-
end
|
346
|
-
|
347
|
-
it 'checks if vacation state is false' do
|
348
|
-
allow(subject).to receive(:parse_vacations).and_return [1,2]
|
349
|
-
subject.evaluate_vacations('jschmid')
|
350
|
-
end
|
351
|
-
end
|
352
|
-
|
353
|
-
|
354
|
-
describe '.parse_vacations' do
|
355
|
-
|
356
|
-
it 'parses Date in proper format' do
|
357
|
-
# vacations = ["2014-08-23 - 2014-09-14", "2014-10-03 - 2014-10-05", "2014-12-24 - 2014-12-28"]
|
358
|
-
# split = [["2014-08-23", "2014-09-14"], ["2014-10-03", "2014-10-05"], ["2014-12-24", "2014-12-28"]]
|
359
|
-
# ret = [['Sat, 23 Aug 2014', 'Sun, 14 Sep 2014'], ['Fri, 03 Oct 2014', 'Sun, 05 Oct 2014'], ['Wed, 24 Dec 2014', 'Sun, 28 Dec 2014']]
|
360
|
-
# instance_variable_set(:@vacations, vacations)
|
361
|
-
# instance_variable_set(:@split, split)
|
362
|
-
# expect(instance_variable_get(:@vacations)).to receive(:map).and_return split
|
363
|
-
# expect(instance_variable_get(:@split)).to receive(:map).and_return ret
|
364
|
-
# subject.parse_vacations
|
365
|
-
end
|
366
|
-
end
|
367
71
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,17 +7,10 @@ require 'simplecov'
|
|
7
7
|
SimpleCov.minimum_coverage 80
|
8
8
|
SimpleCov.formatter = SimpleCov::Formatter::HTMLFormatter
|
9
9
|
SimpleCov.start do
|
10
|
-
add_filter '/spec
|
11
|
-
#add_filter 'vendor'
|
10
|
+
add_filter '/spec'
|
12
11
|
end
|
13
12
|
|
14
13
|
|
15
14
|
require 'webmock/rspec'
|
16
15
|
require 'rspec'
|
17
|
-
require_relative '../lib/reviewlette/exceptions'
|
18
|
-
require_relative '../lib/reviewlette/vacations'
|
19
|
-
require_relative '../lib/reviewlette/database'
|
20
16
|
require 'reviewlette'
|
21
|
-
require 'support/request_stubbing'
|
22
|
-
|
23
|
-
|
@@ -1,202 +1,67 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe TrelloConnection do
|
4
4
|
|
5
|
-
|
5
|
+
TRELLO_CONFIG = { :consumerkey => '4a6', :consumersecret => '899', :oauthtoken => 'a8e', :board_id => 'T5S' }
|
6
|
+
subject { TrelloConnection }
|
7
|
+
let (:trello) { subject.new }
|
8
|
+
let (:card) { Trello::Card.new }
|
6
9
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
stub_boards_call
|
11
|
-
expect(subject.new.board).to be_kind_of Trello::Board
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'sets up trello' do
|
15
|
-
allow(Trello::Board).to receive(:find).and_return nil
|
16
|
-
config = Reviewlette::TRELLO_CONFIG1
|
17
|
-
expect_any_instance_of(Trello::Configuration).to receive(:developer_public_key=).with(config['consumerkey']).and_call_original
|
18
|
-
subject.new
|
19
|
-
end
|
10
|
+
before {
|
11
|
+
allow(Trello::Board).to receive(:find).and_return(Trello::Board.new)
|
12
|
+
}
|
20
13
|
|
14
|
+
describe '.new' do
|
21
15
|
it 'sets up trello' do
|
22
|
-
|
23
|
-
|
24
|
-
expect_any_instance_of(Trello::Configuration).to receive(:member_token=).with(config['oauthtoken']).and_call_original
|
16
|
+
expect_any_instance_of(Trello::Configuration).to receive(:developer_public_key=).with(TRELLO_CONFIG['consumerkey'])
|
17
|
+
expect_any_instance_of(Trello::Configuration).to receive(:member_token=).with(TRELLO_CONFIG['oauthtoken'])
|
25
18
|
subject.new
|
26
19
|
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
describe '#find_member_by_id(id)' do
|
32
|
-
let( :trello_connection ) { subject.new }
|
33
|
-
|
34
|
-
before do
|
35
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
36
|
-
allow(subject).to receive(:find_card_by_id).and_return :id
|
37
|
-
end
|
38
|
-
|
39
|
-
it "finds the right card based on the trello id" do
|
40
|
-
board = double('board')
|
41
|
-
trello_connection.board = board
|
42
|
-
expect(board).to receive_message_chain(:cards, :find)
|
43
|
-
trello_connection.send(:find_card_by_id, 42)
|
44
|
-
#privates with send
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe '#find_member_by_username' do
|
49
|
-
let( :trello_connection ) { subject.new }
|
50
|
-
|
51
|
-
before do
|
52
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
53
|
-
allow(subject).to receive(:find_member_by_username).and_return :username
|
54
|
-
end
|
55
|
-
|
56
|
-
it "finds a member based on a username and returns a trello member object" do
|
57
|
-
board = double('board')
|
58
|
-
trello_connection.board = board
|
59
|
-
expect(board).to receive_message_chain(:members, :find)
|
60
|
-
trello_connection.send(:find_member_by_username, 'art')
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
describe '#find_member_by_id' do
|
65
|
-
let( :trello_connection ) { subject.new }
|
66
|
-
|
67
|
-
before do
|
68
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
69
|
-
allow(subject).to receive(:find_member_by_id).and_return :id
|
70
|
-
end
|
71
|
-
|
72
|
-
it "finds the right member based on the trello id and returns a trello member object" do
|
73
|
-
board = double('board')
|
74
|
-
trello_connection.board = board
|
75
|
-
expect(board).to receive_message_chain(:members, :find)
|
76
|
-
trello_connection.send(:find_member_by_id, 42)
|
77
|
-
end
|
78
20
|
end
|
79
21
|
|
80
22
|
describe '#add_reviewer_to_card' do
|
81
|
-
let ( :trello_connection ) { subject.new }
|
82
|
-
|
83
|
-
before do
|
84
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
85
|
-
end
|
86
|
-
|
87
23
|
it "adds the valid member to the trello card and comments it" do
|
88
|
-
|
89
|
-
|
90
|
-
|
24
|
+
expect(trello).to receive(:find_member_by_username).with('testuser1').and_return 'testuser1'
|
25
|
+
expect_any_instance_of(Trello::Card).to receive(:add_member).with('testuser1')
|
26
|
+
trello.add_reviewer_to_card('testuser1', card)
|
91
27
|
end
|
92
28
|
end
|
93
29
|
|
94
30
|
describe '#comment_on_card' do
|
95
|
-
let ( :trello_connection ) { subject.new }
|
96
|
-
|
97
|
-
before do
|
98
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
99
|
-
end
|
100
|
-
|
101
31
|
it "comments on the assigned trello card " do
|
102
|
-
card
|
103
|
-
|
104
|
-
expect(trello_connection.comment_on_card('username', card)).to eq true
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
describe '#team' do
|
109
|
-
let ( :trello_connection ) { subject.new }
|
110
|
-
|
111
|
-
before do
|
112
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
113
|
-
end
|
114
|
-
|
115
|
-
it "builds the team member list" do
|
116
|
-
expect(trello_connection.team).to be_a_kind_of Array
|
32
|
+
allow(card).to receive(:add_comment).with('comment').and_return true
|
33
|
+
expect(trello.comment_on_card('comment', card)).to eq true
|
117
34
|
end
|
118
35
|
end
|
119
36
|
|
120
37
|
describe '#move_card_to_list' do
|
121
|
-
let( :trello_connection ) { subject.new }
|
122
|
-
|
123
|
-
before do
|
124
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
125
|
-
end
|
126
|
-
|
127
38
|
it 'move cards to its certain column' do
|
128
|
-
|
129
|
-
|
130
|
-
expect(
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'fails to move cards to its certain column' do
|
134
|
-
card = double('card')
|
135
|
-
allow(card).to receive(:move_to_list).with('Done').and_return false
|
136
|
-
expect(trello_connection.move_card_to_list(card, 'Done')).to be false
|
39
|
+
expect(trello).to receive(:find_column).with('Done').and_return 'column'
|
40
|
+
expect(card).to receive(:move_to_list).with('column').and_return true
|
41
|
+
expect(trello.move_card_to_list(card, 'Done')).to be true
|
137
42
|
end
|
138
43
|
end
|
139
44
|
|
140
45
|
describe '#find_column' do
|
141
|
-
let( :trello_connection ) { subject.new }
|
142
|
-
|
143
|
-
before do
|
144
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
145
|
-
end
|
146
|
-
|
147
46
|
it 'detects columns' do
|
148
|
-
|
149
|
-
|
150
|
-
expect(board).to receive_message_chain(:lists, :find)
|
151
|
-
trello_connection.send(:find_column, 'Done')
|
47
|
+
expect_any_instance_of(Trello::Board).to receive_message_chain(:lists, :find)
|
48
|
+
trello.find_column('Done')
|
152
49
|
end
|
153
50
|
end
|
154
51
|
|
155
|
-
describe '#
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
160
|
-
end
|
161
|
-
it 'randomly selects a teammember' do
|
162
|
-
card = double('card')
|
163
|
-
expect(card).to receive_message_chain(:assignees, :map).and_return ['funny','names']
|
164
|
-
trello_connection.sample_reviewer(card)
|
52
|
+
describe '#find_member_by_username' do
|
53
|
+
it "finds a member based on a username and returns a trello member object" do
|
54
|
+
expect_any_instance_of(Trello::Board).to receive_message_chain(:members, :find)
|
55
|
+
trello.find_member_by_username('testuser')
|
165
56
|
end
|
166
57
|
end
|
167
58
|
|
168
|
-
describe '#
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
173
|
-
end
|
174
|
-
it 'checks sum of for card assignees' do
|
175
|
-
card = double('card')
|
176
|
-
expect(card).to receive_message_chain(:assignees, :map).and_return [1,2,3]
|
177
|
-
trello_connection.reviewer_exception_handler(card)
|
59
|
+
describe '#find_card_by_id(id)' do
|
60
|
+
it "finds the right card based on the trello id" do
|
61
|
+
expect_any_instance_of(Trello::Board).to receive_message_chain(:cards, :find)
|
62
|
+
trello.find_card_by_id(123)
|
178
63
|
end
|
179
64
|
end
|
180
65
|
|
181
|
-
describe '#determine_reviewer' do
|
182
|
-
let ( :trello_connection ) { subject.new }
|
183
|
-
|
184
|
-
before do
|
185
|
-
allow_any_instance_of(subject).to receive(:setup_trello).and_return true
|
186
|
-
end
|
187
|
-
|
188
|
-
it 'fails to holds an array of the available reveiewers' do
|
189
|
-
card = double('card')
|
190
|
-
expect(trello_connection).to receive(:reviewer_exception_handler).with(card).and_return true
|
191
|
-
expect{trello_connection.determine_reviewer(card)}.to raise_error(Exception, 'Everyone on the team is assigned to the Card.')
|
192
|
-
end
|
193
66
|
|
194
|
-
it 'holds an array of the available reveiewers' do
|
195
|
-
card = double('card')
|
196
|
-
expect(trello_connection).to receive(:reviewer_exception_handler).with(card).and_return false
|
197
|
-
expect(trello_connection).to receive(:sample_reviewer).and_return true
|
198
|
-
expect(trello_connection).to receive(:find_member_by_username).and_return 'name'
|
199
|
-
expect(trello_connection.determine_reviewer(card)).to eq 'name'
|
200
|
-
end
|
201
|
-
end
|
202
67
|
end
|