@@ -8,14 +8,22 @@ mod common;
88
99#[ test]
1010fn test_contributors_in_non_git_repo ( ) {
11+ use git_x:: commands:: analysis:: ContributorsCommand ;
12+ use git_x:: core:: traits:: Command as CommandTrait ;
13+
1114 let temp_dir = TempDir :: new ( ) . expect ( "Failed to create temp dir" ) ;
15+ let original_dir = std:: env:: current_dir ( ) . unwrap ( ) ;
1216
13- let mut cmd = Command :: cargo_bin ( "git-x" ) . expect ( "Failed to find binary" ) ;
14- cmd. current_dir ( temp_dir. path ( ) )
15- . arg ( "contributors" )
16- . assert ( )
17- . success ( )
18- . stderr ( predicate:: str:: contains ( "Git command failed" ) ) ;
17+ std:: env:: set_current_dir ( temp_dir. path ( ) ) . unwrap ( ) ;
18+
19+ let cmd = ContributorsCommand :: new ( None ) ;
20+ let result = cmd. execute ( ) ;
21+
22+ // Should fail in non-git directory
23+ assert ! ( result. is_err( ) ) ;
24+
25+ // Restore original directory
26+ let _ = std:: env:: set_current_dir ( & original_dir) ;
1927}
2028
2129#[ test]
@@ -42,12 +50,18 @@ fn test_contributors_in_empty_git_repo() {
4250 . output ( )
4351 . expect ( "Failed to set git user email" ) ;
4452
45- let mut cmd = Command :: cargo_bin ( "git-x" ) . expect ( "Failed to find binary" ) ;
46- cmd. current_dir ( temp_dir. path ( ) )
47- . arg ( "contributors" )
48- . assert ( )
49- . success ( )
50- . stdout ( predicate:: str:: contains ( "No contributors found" ) ) ;
53+ let original_dir = std:: env:: current_dir ( ) . unwrap ( ) ;
54+ std:: env:: set_current_dir ( temp_dir. path ( ) ) . unwrap ( ) ;
55+
56+ let cmd = git_x:: commands:: analysis:: ContributorsCommand :: new ( None ) ;
57+ let result = cmd. execute ( ) ;
58+
59+ assert ! ( result. is_ok( ) ) ;
60+ let output = result. unwrap ( ) ;
61+ assert ! ( output. contains( "No contributors found" ) ) ;
62+
63+ // Restore original directory
64+ let _ = std:: env:: set_current_dir ( & original_dir) ;
5165}
5266
5367#[ test]
@@ -88,17 +102,24 @@ fn test_contributors_with_single_contributor() {
88102 . output ( )
89103 . expect ( "Failed to commit" ) ;
90104
91- let mut cmd = Command :: cargo_bin ( "git-x" ) . expect ( "Failed to find binary" ) ;
92- cmd. current_dir ( temp_dir. path ( ) )
93- . arg ( "contributors" )
94- . assert ( )
95- . success ( )
96- . stdout ( predicate:: str:: contains ( "Repository Contributors" ) )
97- . stdout ( predicate:: str:: contains ( "Alice Smith" ) )
98- . stdout ( predicate:: str:: contains ( "alice@example.com" ) )
99- . stdout ( predicate:: str:: contains ( "🥇" ) )
100- . stdout ( predicate:: str:: contains ( "1 commits" ) )
101- . stdout ( predicate:: str:: contains ( "100.0%" ) ) ;
105+ let original_dir = std:: env:: current_dir ( ) . unwrap ( ) ;
106+ std:: env:: set_current_dir ( temp_dir. path ( ) ) . unwrap ( ) ;
107+
108+ let cmd = git_x:: commands:: analysis:: ContributorsCommand :: new ( None ) ;
109+ let result = cmd. execute ( ) ;
110+
111+ assert ! ( result. is_ok( ) ) ;
112+ let output = result. unwrap ( ) ;
113+ assert ! ( output. contains( "Repository Contributors" ) ) ;
114+ assert ! ( output. contains( "Alice Smith" ) ) ;
115+ assert ! ( output. contains( "alice@example.com" ) ) ;
116+ assert ! ( output. contains( "🥇" ) ) ;
117+ assert ! ( output. contains( "1 commits" ) ) ;
118+
119+ assert ! ( output. contains( "100.0%" ) ) ;
120+
121+ // Restore original directory
122+ let _ = std:: env:: set_current_dir ( & original_dir) ;
102123}
103124
104125#[ test]
@@ -192,21 +213,28 @@ fn test_contributors_with_multiple_contributors() {
192213 . output ( )
193214 . expect ( "Failed to commit" ) ;
194215
195- let mut cmd = Command :: cargo_bin ( "git-x" ) . expect ( "Failed to find binary" ) ;
196- cmd. current_dir ( temp_dir. path ( ) )
197- . arg ( "contributors" )
198- . assert ( )
199- . success ( )
200- . stdout ( predicate:: str:: contains ( "Repository Contributors" ) )
201- . stdout ( predicate:: str:: contains ( "3 total commits" ) )
202- . stdout ( predicate:: str:: contains ( "Alice Smith" ) )
203- . stdout ( predicate:: str:: contains ( "Bob Jones" ) )
204- . stdout ( predicate:: str:: contains ( "🥇" ) ) // Alice should be first with 2 commits
205- . stdout ( predicate:: str:: contains ( "🥈" ) ) // Bob should be second with 1 commit
206- . stdout ( predicate:: str:: contains ( "2 commits" ) )
207- . stdout ( predicate:: str:: contains ( "1 commits" ) )
208- . stdout ( predicate:: str:: contains ( "66.7%" ) ) // Alice: 2/3 commits
209- . stdout ( predicate:: str:: contains ( "33.3%" ) ) ; // Bob: 1/3 commits
216+ let original_dir = std:: env:: current_dir ( ) . unwrap ( ) ;
217+ std:: env:: set_current_dir ( temp_dir. path ( ) ) . unwrap ( ) ;
218+
219+ let cmd = git_x:: commands:: analysis:: ContributorsCommand :: new ( None ) ;
220+ let result = cmd. execute ( ) ;
221+
222+ assert ! ( result. is_ok( ) ) ;
223+ let output = result. unwrap ( ) ;
224+ assert ! ( output. contains( "Repository Contributors" ) ) ;
225+ assert ! ( output. contains( "3 total commits" ) ) ;
226+ assert ! ( output. contains( "Alice Smith" ) ) ;
227+ assert ! ( output. contains( "Bob Jones" ) ) ;
228+ assert ! ( output. contains( "🥇" ) ) ; // Alice should be first with 2 commits
229+ assert ! ( output. contains( "🥈" ) ) ; // Bob should be second with 1 commit
230+ assert ! ( output. contains( "2 commits" ) ) ;
231+ assert ! ( output. contains( "1 commits" ) ) ;
232+
233+ assert ! ( output. contains( "66.7%" ) ) ; // Alice: 2/3 commits
234+ assert ! ( output. contains( "33.3%" ) ) ; // Bob: 1/3 commits
235+
236+ // Restore original directory
237+ let _ = std:: env:: set_current_dir ( & original_dir) ;
210238}
211239
212240#[ test]
0 commit comments