3
3
RSpec . describe GitTracker ::CommitMessage do
4
4
include CommitMessageHelper
5
5
6
- subject ( :commit_message ) { described_class . new ( file ) }
7
- let ( :file ) { "COMMIT_EDITMSG" }
6
+ subject ( :commit_message ) { described_class . new ( commit_editmsg_file . to_path ) }
7
+ let ( :commit_editmsg_file ) { Pathname ( @git_dir ) . join ( "COMMIT_EDITMSG" ) }
8
+
9
+ around do |example |
10
+ Dir . mktmpdir do |dir |
11
+ @git_dir = dir
12
+ example . call
13
+ remove_instance_variable ( :@git_dir )
14
+ end
15
+ end
8
16
9
17
it "requires path to the temporary commit message file" do
10
18
expect { GitTracker ::CommitMessage . new } . to raise_error ArgumentError
11
19
end
12
20
13
- def stub_commit_message ( story_text )
14
- allow ( File ) . to receive ( :read ) . with ( file ) { example_commit_message ( story_text ) }
15
- end
16
-
17
21
describe "#keyword" do
18
22
%w[ fix Fixed FIXES Complete completed completes FINISH finished Finishes Deliver delivered DELIVERS ] . each do |keyword |
19
23
it "detects the #{ keyword } keyword" do
20
- stub_commit_message ( "Did the darn thing. [#{ keyword } ]" )
24
+ setup_commit_editmsg_file ( "Did the darn thing. [#{ keyword } ]" )
21
25
expect ( commit_message . keyword ) . to eq ( keyword )
22
26
end
23
27
end
24
28
25
29
it "does not find the keyword when it does not exist" do
26
- stub_commit_message ( "Did the darn thing. [Something]" )
30
+ setup_commit_editmsg_file ( "Did the darn thing. [Something]" )
27
31
expect ( commit_message . keyword ) . to_not be
28
32
end
29
33
end
30
34
31
35
describe "#mentions_story?" do
32
36
context "commit message contains the special Pivotal Tracker story syntax" do
33
37
it "allows just the number" do
34
- stub_commit_message ( "[#8675309]" )
38
+ setup_commit_editmsg_file ( "[#8675309]" )
35
39
expect ( commit_message ) . to be_mentions_story ( "8675309" )
36
40
end
37
41
38
42
it "allows multiple numbers" do
39
- stub_commit_message ( "[#99 #777 #8675309 #111222]" )
40
- expect ( commit_message ) . to be_mentions_story ( "99" )
41
- expect ( commit_message ) . to be_mentions_story ( "777" )
42
- expect ( commit_message ) . to be_mentions_story ( "8675309" )
43
- expect ( commit_message ) . to be_mentions_story ( "111222" )
43
+ setup_commit_editmsg_file ( "[#99 #777 #8675308 #111222]" )
44
+
45
+ aggregate_failures do
46
+ expect ( commit_message ) . to be_mentions_story ( "99" )
47
+ expect ( commit_message ) . to be_mentions_story ( "777" )
48
+ expect ( commit_message ) . to be_mentions_story ( "8675308" )
49
+ expect ( commit_message ) . to be_mentions_story ( "111222" )
50
+ end
44
51
end
45
52
46
53
it "allows state change before number" do
47
- stub_commit_message ( "[Fixes #8675309 ]" )
48
- expect ( commit_message ) . to be_mentions_story ( "8675309 " )
54
+ setup_commit_editmsg_file ( "[Fixes #8675307 ]" )
55
+ expect ( commit_message ) . to be_mentions_story ( "8675307 " )
49
56
end
50
57
51
58
it "allows state change after the number" do
52
- stub_commit_message ( "[#8675309 Delivered]" )
53
- expect ( commit_message ) . to be_mentions_story ( "8675309 " )
59
+ setup_commit_editmsg_file ( "[#8675306 Delivered]" )
60
+ expect ( commit_message ) . to be_mentions_story ( "8675306 " )
54
61
end
55
62
56
63
it "allows surrounding text" do
57
- stub_commit_message ( "derp de #herp [Fixes #8675309 ] de herp-ity derp" )
58
- expect ( commit_message ) . to be_mentions_story ( "8675309 " )
64
+ setup_commit_editmsg_file ( "derp de #herp [Fixes #8675305 ] de herp-ity derp" )
65
+ expect ( commit_message ) . to be_mentions_story ( "8675305 " )
59
66
end
60
67
end
61
68
62
69
context "commit message doesn not contain the special Pivotal Tracker story syntax" do
63
70
it "requires brackets" do
64
- stub_commit_message ( "#8675309" )
71
+ setup_commit_editmsg_file ( "#8675309" )
65
72
expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
66
73
end
67
74
68
75
it "requires a pound sign" do
69
- stub_commit_message ( "[8675309]" )
76
+ setup_commit_editmsg_file ( "[8675309]" )
70
77
expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
71
78
end
72
79
73
80
it "does not allow the bare number" do
74
- stub_commit_message ( "8675309" )
81
+ setup_commit_editmsg_file ( "8675309" )
75
82
expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
76
83
end
77
84
78
85
it "does not allow multiple state changes" do
79
- stub_commit_message ( "[Fixes Deploys #8675309]" )
86
+ setup_commit_editmsg_file ( "[Fixes Deploys #8675309]" )
80
87
expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
81
88
end
82
89
83
90
it "does not allow comments" do
84
- stub_commit_message ( "#[#8675309]" )
91
+ setup_commit_editmsg_file ( "#[#8675309]" )
85
92
expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
86
93
end
87
94
end
88
95
end
89
96
90
97
describe "#append" do
91
- let ( :fake_file ) { GitTracker ::FakeFile . new }
92
-
93
- before do
94
- allow ( File ) . to receive ( :open ) . and_yield ( fake_file )
95
- end
96
-
97
- def stub_original_commit_message ( message )
98
- allow ( File ) . to receive ( :read ) { message }
99
- end
100
-
101
98
it "handles no existing message" do
102
99
commit_message_text = <<~COMMIT_MESSAGE
103
100
@@ -106,10 +103,10 @@ def stub_original_commit_message(message)
106
103
# some other comments
107
104
COMMIT_MESSAGE
108
105
109
- stub_original_commit_message ( "\n \n # some other comments\n " )
106
+ write_commit_editmsg_file ( "\n \n # some other comments\n " )
110
107
commit_message . append ( "[#8675309]" )
111
108
112
- expect ( fake_file . content ) . to eq ( commit_message_text )
109
+ expect ( commit_editmsg_file . read ) . to eq ( commit_message_text )
113
110
end
114
111
115
112
it "preserves existing messages" do
@@ -122,10 +119,10 @@ def stub_original_commit_message(message)
122
119
# other comments
123
120
COMMIT_MESSAGE
124
121
125
- stub_original_commit_message ( "A first line\n \n With more here\n # other comments\n " )
122
+ write_commit_editmsg_file ( "A first line\n \n With more here\n # other comments\n " )
126
123
commit_message . append ( "[#8675309]" )
127
124
128
- expect ( fake_file . content ) . to eq ( commit_message_text )
125
+ expect ( commit_editmsg_file . read ) . to eq ( commit_message_text )
129
126
end
130
127
131
128
it "preserves line breaks in comments" do
@@ -138,10 +135,10 @@ def stub_original_commit_message(message)
138
135
# comment III
139
136
COMMIT_MESSAGE
140
137
141
- stub_original_commit_message ( "# comment #1\n # comment B\n # comment III" )
138
+ write_commit_editmsg_file ( "# comment #1\n # comment B\n # comment III" )
142
139
commit_message . append ( "[#8675309]" )
143
140
144
- expect ( fake_file . content ) . to eq ( commit_message_text )
141
+ expect ( commit_editmsg_file . read ) . to eq ( commit_message_text )
145
142
end
146
143
end
147
144
end
0 commit comments