git-topic 0.1.6.4 → 0.2.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.
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe GitTopic do
5
+
6
+ describe "#accept" do
7
+
8
+ describe "while on a review branch" do
9
+ before( :each ) do
10
+ use_repo 'in-progress'
11
+ GitTopic.review 'user24601/zombie-basic'
12
+ end
13
+ after( :each ) { Dir.chdir '..' }
14
+
15
+ describe "with no specified argument" do
16
+ it "
17
+ should merge to master, push master and destroy the local and remote
18
+ branches when the merge is a fast-forward merge
19
+ ".oneline do
20
+
21
+ git_branch.should == 'review/user24601/zombie-basic'
22
+ GitTopic.accept
23
+ git_branch.should == 'master'
24
+ git_branches.should_not include( 'review/user24601/zombie-basic' )
25
+ git_remote_branches.should_not include( 'review/user24601/zombie-basic' )
26
+
27
+ git_head.should == '0ce06c616769768f09f5e629cfcc68eabe3dee81'
28
+ git_origin_master.should == '0ce06c616769768f09f5e629cfcc68eabe3dee81'
29
+ end
30
+
31
+ it "should provide feedback to the user" do
32
+ GitTopic.accept
33
+ $?.success?.should == true
34
+ @output.should_not be_nil
35
+ @output.should_not be_empty
36
+ end
37
+
38
+ it "should fail if the working tree is dirty" do
39
+ dirty_branch!
40
+ lambda{ GitTopic.accept }.should raise_error
41
+ end
42
+ end
43
+ end
44
+
45
+ describe "while on a review branch that does not FF" do
46
+ before( :each ) do
47
+ use_repo 'in-progress'
48
+ system "
49
+ git checkout master > /dev/null 2> /dev/null &&
50
+ git merge origin/wip/prevent-ff > /dev/null 2> /dev/null
51
+ "
52
+ @original_git_Head = git_head
53
+ GitTopic.review 'user24601/zombie-basic'
54
+ end
55
+ after( :each ) { Dir.chdir '..' }
56
+
57
+ it "should refuse to accept the review branch" do
58
+ git_branch.should == 'review/user24601/zombie-basic'
59
+ lambda{ GitTopic.accept }.should raise_error
60
+ git_branch.should == 'review/user24601/zombie-basic'
61
+ git_remote_branches.should include( 'review/user24601/zombie-basic' )
62
+
63
+ system "git checkout master > /dev/null 2> /dev/null"
64
+ git_head.should == @original_git_Head
65
+ end
66
+ end
67
+
68
+ describe "while not on a review branch" do
69
+ before( :each ) { use_repo 'in-progress' }
70
+ after( :each ) { Dir.chdir '..' }
71
+
72
+ it "should fail" do
73
+ lambda{ GitTopic.accept }.should raise_error
74
+ end
75
+ end
76
+ end
77
+
78
+ end
@@ -0,0 +1,393 @@
1
+ require 'spec_helper'
2
+
3
+ GeneralCommentOnly = %Q{
4
+ Spec 123: I have some general comments, mostly relating to the quality
5
+ of our zombie-control policies. Basically, they're not
6
+ working.
7
+ }.strip
8
+
9
+ FirstComment = %Q{
10
+ Spec 123: I have some general comments, mostly relating to the quality
11
+ of our zombie-control policies. Basically, they're not
12
+ working.
13
+
14
+ ./zombies
15
+
16
+ Line 2
17
+ Spec 123: I suggest we do the following instead:
18
+ zombies.each{ |z| reason_with( z )}
19
+ zomies.select do |z|
20
+ z.unconvinced?
21
+ end.each do |z|
22
+ destroy z
23
+ end
24
+ This should take care of our issues with zombies.
25
+ }.strip
26
+
27
+ FirstCommentUpdated = %Q{
28
+ Spec 123: I agree, though I wonder if maybe we've become a little too
29
+ obsessed with bacon. Umm, wait, sorry, wrong thread.
30
+ There is no way this is going to work. Sorry, but there's just not.
31
+
32
+ ./ninjas
33
+
34
+ Line 2
35
+ Spec 123: I suggest we do the following instead:
36
+ everyone.giveup
37
+ This should take care of our issues with zombies.
38
+ }.strip
39
+
40
+ FirstCommentReply = %Q{
41
+ # Spec 123: I have some general comments, mostly relating to the quality
42
+ # of our zombie-control policies. Basically, they're not
43
+ # working.
44
+
45
+ I agree, though I wonder if maybe we've become a little too obsessed with bacon. Umm, wait, sorry, wrong thread.
46
+
47
+ #
48
+ # ./zombies
49
+ #
50
+ # Line 2
51
+ # Spec 123: I suggest we do the following instead:
52
+ # zombies.each{ |z| reason_with( z )}
53
+ # zomies.select do |z|
54
+ # z.unconvinced?
55
+ # end.each do |z|
56
+ # destroy z
57
+ # end
58
+ # This should take care of our issues with zombies.
59
+ There is no way this is going to work. Sorry, but there's just not.
60
+ }.strip
61
+
62
+ SecondComment = %Q{
63
+ Spec 123: I have some general comments, mostly relating to the quality
64
+ of our zombie-control policies. Basically, they're not
65
+ working.
66
+ Spec 123: I agree, though I wonder if maybe we've become a little too
67
+ obsessed with bacon. Umm, wait, sorry, wrong thread.
68
+
69
+ ./zombies
70
+
71
+ Line 2
72
+ Spec 123: I suggest we do the following instead:
73
+ zombies.each{ |z| reason_with( z )}
74
+ zomies.select do |z|
75
+ z.unconvinced?
76
+ end.each do |z|
77
+ destroy z
78
+ end
79
+ This should take care of our issues with zombies.
80
+ Spec 123: There is no way this is going to work. Sorry, but there's
81
+ just not.
82
+ }.strip
83
+
84
+ SecondCommentWithReply = %Q{
85
+ Spec 123: I have some general comments, mostly relating to the quality
86
+ of our zombie-control policies. Basically, they're not
87
+ working.
88
+ Spec 234: I agree, though I wonder if maybe we've become a little too
89
+ obsessed with bacon. Umm, wait, sorry, wrong thread.
90
+
91
+ ./zombies
92
+
93
+ Line 2
94
+ Spec 123: I suggest we do the following instead:
95
+ zombies.each{ |z| reason_with( z )}
96
+ zomies.select do |z|
97
+ z.unconvinced?
98
+ end.each do |z|
99
+ destroy z
100
+ end
101
+ This should take care of our issues with zombies.
102
+ Spec 234: There is no way this is going to work. Sorry, but there's
103
+ just not.
104
+ }.strip
105
+
106
+
107
+ describe GitTopic do
108
+
109
+ describe "#comment" do
110
+
111
+ before( :each ) do
112
+ GitTopic.stub!( :invoke_git_editor ) do |path|
113
+ File.open( path, 'w' ) do |f|
114
+ f.puts %Q{
115
+ I have some general comments, mostly relating to the quality of our
116
+ zombie-control policies. Basically, they're not working.
117
+ }.cleanup
118
+ end
119
+ end
120
+ end
121
+
122
+ describe "on a review branch with no comments" do
123
+
124
+ before( :each ) do
125
+ use_repo 'in-progress'
126
+ GitTopic.review 'user24601/zombie-basic'
127
+ end
128
+ after( :each ) { Dir.chdir '..' }
129
+
130
+
131
+ it "should fail if the diff includes added lines not prefixed with #" do
132
+ File.open( 'zombies', 'a' ){ |f| f.puts "a line" }
133
+ lambda{ GitTopic.comment }.should raise_error
134
+ end
135
+
136
+ it "should fail if the diff includes removed lines" do
137
+ File.open( 'zombies', 'w' ){ |f| f.puts '' }
138
+ lambda{ GitTopic.comment }.should raise_error
139
+ end
140
+
141
+ it "should fail if there are new files." do
142
+ File.open( 'new-untracked-file', 'w' ){ |f| f.puts 'content' }
143
+ system "git add new-untracked-file > /dev/null 2> /dev/null"
144
+ lambda{ GitTopic.comment }.should raise_error
145
+ end
146
+
147
+ it "should fail if files have been deleted." do
148
+ FileUtils.rm 'zombies'
149
+ lambda{ GitTopic.comment }.should raise_error
150
+ end
151
+
152
+ it "should fail if file modes have been modified." do
153
+ FileUtils.chmod 0744, 'zombies'
154
+ lambda{ GitTopic.comment }.should raise_error
155
+ end
156
+
157
+ it "should fail if git config user.name is not set" do
158
+ GitTopic::Git::ClassMethods.class_variable_set( "@@git_author_name_short", nil )
159
+ GitTopic.stub( :` ) do |cmd|
160
+ if cmd =~ %r{^git config user.name}
161
+ $?.instance_eval do
162
+ def success?; false; end
163
+ end
164
+ ""
165
+ else
166
+ %x{#{cmd}}
167
+ end
168
+ end
169
+
170
+ File.open( 'zombies', 'a' ) do |f|
171
+ f.puts %Q{
172
+ # I suggest we do the following instead:
173
+ # zombies.each{ |z| reason_with( z )}
174
+ # zomies.select do |z|
175
+ # z.unconvinced?
176
+ # end.each do |z|
177
+ # destroy z
178
+ # end
179
+ # This should take care of our issues with zombies.
180
+ }.cleanup
181
+ end
182
+ lambda{ GitTopic.comment }.should raise_error
183
+ end
184
+
185
+ it "should allow general comments if there is no diff" do
186
+ git_diff.should be_empty
187
+
188
+ GitTopic.should_receive( :invoke_git_editor ).once
189
+ GitTopic.should_receive(
190
+ :git_author_name_short
191
+ ).once.and_return( "Spec 123" )
192
+
193
+ lambda{ GitTopic.comment }.should_not raise_error
194
+
195
+ git_notes_list(
196
+ "refs/notes/reviews/user24601/zombie-basic"
197
+ ).should_not be_empty
198
+
199
+ git_notes_show(
200
+ "refs/notes/reviews/user24601/zombie-basic"
201
+ ).should == GeneralCommentOnly
202
+ end
203
+
204
+ it "
205
+ should convert added lines to notes, formatted appropriately, and save
206
+ them in refs/notes/reviews/<user>/<topic>.
207
+ ".oneline do
208
+ File.open( 'zombies', 'a' ) do |f|
209
+ f.puts %Q{
210
+ # I suggest we do the following instead:
211
+ # zombies.each{ |z| reason_with( z )}
212
+ # zomies.select do |z|
213
+ # z.unconvinced?
214
+ # end.each do |z|
215
+ # destroy z
216
+ # end
217
+ # This should take care of our issues with zombies.
218
+ }.cleanup
219
+ end
220
+ GitTopic.should_receive( :invoke_git_editor ).once
221
+ GitTopic.should_receive(
222
+ :git_author_name_short
223
+ ).once.and_return( "Spec 123" )
224
+
225
+ lambda{ GitTopic.comment }.should_not raise_error
226
+ git_notes_list(
227
+ "refs/notes/reviews/user24601/zombie-basic"
228
+ ).should_not be_empty
229
+
230
+ git_notes_show(
231
+ "refs/notes/reviews/user24601/zombie-basic"
232
+ ).should == FirstComment
233
+
234
+ git_diff.should be_empty
235
+ end
236
+
237
+ end
238
+
239
+
240
+ describe "on a review branch with existing comments" do
241
+
242
+ before( :each ) do
243
+ use_repo( 'in-progress' )
244
+ GitTopic.review 'user24601/ninja-basic'
245
+
246
+ GitTopic.stub!( :invoke_git_editor ) do |path|
247
+ File.open( path, 'w' ) do |f|
248
+ f.write FirstCommentReply
249
+ end
250
+ end
251
+ end
252
+ after( :each ) { Dir.chdir '..' }
253
+
254
+
255
+ it "should fail if the working tree is dirty" do
256
+ File.open( 'ninjas', 'a' ) do |f|
257
+ f.puts %Q{
258
+ # I suggest we do the following instead:
259
+ # zombies.each{ |z| reason_with( z )}
260
+ # zomies.select do |z|
261
+ # z.unconvinced?
262
+ # end.each do |z|
263
+ # destroy z
264
+ # end
265
+ # This should take care of our issues with zombies.
266
+ }.cleanup
267
+ end
268
+
269
+ lambda{ GitTopic.comment }.should raise_error
270
+ end
271
+
272
+ it "should replace existing comments with --force" do
273
+ File.open( 'ninjas', 'a' ) do |f|
274
+ f.puts %Q{
275
+ # I suggest we do the following instead:
276
+ # everyone.giveup
277
+ # This should take care of our issues with zombies.
278
+ }.cleanup
279
+ end
280
+
281
+ GitTopic.should_receive( :invoke_git_editor ).once
282
+ GitTopic.should_receive(
283
+ :git_author_name_short
284
+ ).once.and_return( "Spec 123" )
285
+
286
+
287
+ lambda do
288
+ GitTopic.comment :force_update => true
289
+ end.should_not raise_error
290
+
291
+ git_notes_list(
292
+ "refs/notes/reviews/user24601/ninja-basic"
293
+ ).should_not be_empty
294
+
295
+ git_notes_show(
296
+ "refs/notes/reviews/user24601/ninja-basic"
297
+ ).should == FirstCommentUpdated
298
+
299
+ git_diff.should be_empty
300
+ end
301
+
302
+ it "should append comments (without --force-update)" do
303
+ git_notes_list(
304
+ "refs/notes/reviews/user24601/ninja-basic"
305
+ ).should_not be_empty
306
+ git_notes_show(
307
+ "refs/notes/reviews/user24601/ninja-basic"
308
+ ).should == FirstComment
309
+
310
+ GitTopic.should_receive( :invoke_git_editor ).once
311
+ GitTopic.should_receive(
312
+ :git_author_name_short
313
+ ).once.and_return( "Spec 123" )
314
+
315
+ lambda{ GitTopic.comment }.should_not raise_error
316
+ git_notes_list(
317
+ "refs/notes/reviews/user24601/ninja-basic"
318
+ ).should_not be_empty
319
+
320
+ git_notes_show(
321
+ "refs/notes/reviews/user24601/ninja-basic"
322
+ ).should == SecondComment
323
+ end
324
+ end
325
+
326
+
327
+ describe "on a wip branch with no comments" do
328
+ before( :each ) { use_repo 'in-progress' }
329
+ after( :each ) { Dir.chdir '..' }
330
+
331
+ it "should report that there is nothing to do" do
332
+ GitTopic.work_on 'pirates-advanced'
333
+ lambda{ GitTopic.comment }.should_not raise_error
334
+
335
+ git_notes_list(
336
+ "refs/notes/reviews/#{@user}/pirates-advanced"
337
+ ).should be_empty
338
+ @output.should_not be_empty
339
+ end
340
+ end
341
+
342
+
343
+ describe "on a wip branch with existing comments" do
344
+ before( :each ) do
345
+ use_repo 'in-progress'
346
+ GitTopic.work_on 'rejected/krakens'
347
+
348
+ GitTopic.stub!( :invoke_git_editor ) do |path|
349
+ File.open( path, 'w' ) do |f|
350
+ f.puts FirstCommentReply
351
+ end
352
+ end
353
+ end
354
+ after( :each ) { Dir.chdir '..' }
355
+
356
+
357
+ it "should fail if the working tree is dirty" do
358
+ File.open( 'kraken', 'a' ) do |f|
359
+ f.puts %Q{
360
+ # I suggest we do the following instead:
361
+ # zombies.each{ |z| reason_with( z )}
362
+ # zomies.select do |z|
363
+ # z.unconvinced?
364
+ # end.each do |z|
365
+ # destroy z
366
+ # end
367
+ # This should take care of our issues with zombies.
368
+ }.cleanup
369
+ end
370
+
371
+ lambda{ GitTopic.comment }.should raise_error
372
+ end
373
+
374
+ it "should append comments" do
375
+ GitTopic.should_receive( :invoke_git_editor ).once
376
+ GitTopic.should_receive(
377
+ :git_author_name_short
378
+ ).once.and_return( "Spec 234" )
379
+
380
+ lambda{ GitTopic.comment }.should_not raise_error
381
+ git_notes_list(
382
+ "refs/notes/reviews/#{@user}/krakens"
383
+ ).should_not be_empty
384
+
385
+ git_notes_show(
386
+ "refs/notes/reviews/#{@user}/krakens"
387
+ ).should == SecondCommentWithReply
388
+ end
389
+ end
390
+
391
+ end
392
+ end
393
+