33RSpec . describe GitTracker ::CommitMessage do
44 include CommitMessageHelper
55
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
816
917 it "requires path to the temporary commit message file" do
1018 expect { GitTracker ::CommitMessage . new } . to raise_error ArgumentError
1119 end
1220
13- def stub_commit_message ( story_text )
14- allow ( File ) . to receive ( :read ) . with ( file ) { example_commit_message ( story_text ) }
15- end
16-
1721 describe "#keyword" do
1822 %w[ fix Fixed FIXES Complete completed completes FINISH finished Finishes Deliver delivered DELIVERS ] . each do |keyword |
1923 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 } ]" )
2125 expect ( commit_message . keyword ) . to eq ( keyword )
2226 end
2327 end
2428
2529 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]" )
2731 expect ( commit_message . keyword ) . to_not be
2832 end
2933 end
3034
3135 describe "#mentions_story?" do
3236 context "commit message contains the special Pivotal Tracker story syntax" do
3337 it "allows just the number" do
34- stub_commit_message ( "[#8675309]" )
38+ setup_commit_editmsg_file ( "[#8675309]" )
3539 expect ( commit_message ) . to be_mentions_story ( "8675309" )
3640 end
3741
3842 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
4451 end
4552
4653 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 " )
4956 end
5057
5158 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 " )
5461 end
5562
5663 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 " )
5966 end
6067 end
6168
6269 context "commit message doesn not contain the special Pivotal Tracker story syntax" do
6370 it "requires brackets" do
64- stub_commit_message ( "#8675309" )
71+ setup_commit_editmsg_file ( "#8675309" )
6572 expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
6673 end
6774
6875 it "requires a pound sign" do
69- stub_commit_message ( "[8675309]" )
76+ setup_commit_editmsg_file ( "[8675309]" )
7077 expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
7178 end
7279
7380 it "does not allow the bare number" do
74- stub_commit_message ( "8675309" )
81+ setup_commit_editmsg_file ( "8675309" )
7582 expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
7683 end
7784
7885 it "does not allow multiple state changes" do
79- stub_commit_message ( "[Fixes Deploys #8675309]" )
86+ setup_commit_editmsg_file ( "[Fixes Deploys #8675309]" )
8087 expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
8188 end
8289
8390 it "does not allow comments" do
84- stub_commit_message ( "#[#8675309]" )
91+ setup_commit_editmsg_file ( "#[#8675309]" )
8592 expect ( commit_message ) . to_not be_mentions_story ( "8675309" )
8693 end
8794 end
8895 end
8996
9097 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-
10198 it "handles no existing message" do
10299 commit_message_text = <<~COMMIT_MESSAGE
103100
@@ -106,10 +103,10 @@ def stub_original_commit_message(message)
106103 # some other comments
107104 COMMIT_MESSAGE
108105
109- stub_original_commit_message ( "\n \n # some other comments\n " )
106+ write_commit_editmsg_file ( "\n \n # some other comments\n " )
110107 commit_message . append ( "[#8675309]" )
111108
112- expect ( fake_file . content ) . to eq ( commit_message_text )
109+ expect ( commit_editmsg_file . read ) . to eq ( commit_message_text )
113110 end
114111
115112 it "preserves existing messages" do
@@ -122,10 +119,10 @@ def stub_original_commit_message(message)
122119 # other comments
123120 COMMIT_MESSAGE
124121
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 " )
126123 commit_message . append ( "[#8675309]" )
127124
128- expect ( fake_file . content ) . to eq ( commit_message_text )
125+ expect ( commit_editmsg_file . read ) . to eq ( commit_message_text )
129126 end
130127
131128 it "preserves line breaks in comments" do
@@ -138,10 +135,10 @@ def stub_original_commit_message(message)
138135 # comment III
139136 COMMIT_MESSAGE
140137
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" )
142139 commit_message . append ( "[#8675309]" )
143140
144- expect ( fake_file . content ) . to eq ( commit_message_text )
141+ expect ( commit_editmsg_file . read ) . to eq ( commit_message_text )
145142 end
146143 end
147144end
0 commit comments