Skip to content

Commit e92deeb

Browse files
committed
Replace subprocess calls with method calls in tests
1 parent bcfca30 commit e92deeb

File tree

4 files changed

+116
-69
lines changed

4 files changed

+116
-69
lines changed

tests/test_bisect.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,10 +501,6 @@ fn test_bisect_start_same_commits() {
501501
// Git will handle this case - it's a valid scenario where no bisect is needed
502502
}
503503

504-
// Unit tests for helper functions (these test the internal logic)
505-
506-
// Error handling tests
507-
508504
#[test]
509505
fn test_bisect_start_with_tags() {
510506
let (_temp_dir, repo_path) = create_test_repo();

tests/test_contributors.rs

Lines changed: 66 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,22 @@ mod common;
88

99
#[test]
1010
fn 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]

tests/test_graph.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,26 @@ fn test_git_graph_runs_without_error() {
1010

1111
#[test]
1212
fn test_git_graph_outputs_graph_symbols() {
13-
use assert_cmd::Command;
13+
use git_x::commands::analysis::GraphCommand;
14+
use git_x::core::traits::Command;
1415

1516
let repo = basic_repo();
16-
let output = Command::cargo_bin("git-x")
17-
.unwrap()
18-
.arg("graph")
19-
.current_dir(repo.path())
20-
.output()
21-
.unwrap();
22-
23-
let stdout = String::from_utf8_lossy(&output.stdout);
17+
let original_dir = std::env::current_dir().unwrap();
18+
19+
std::env::set_current_dir(repo.path()).unwrap();
20+
21+
let cmd = GraphCommand::new();
22+
let result = cmd.execute();
23+
24+
assert!(result.is_ok());
25+
let stdout = result.unwrap();
2426
assert!(
2527
stdout.contains("*") || stdout.contains("|"),
2628
"Expected ASCII graph symbols in output"
2729
);
30+
31+
// Restore original directory
32+
let _ = std::env::set_current_dir(&original_dir);
2833
}
2934

3035
// Unit tests now handled by common module tests

tests/test_technical_debt.rs

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,19 @@ use git_x::core::traits::Command as CommandTrait;
1212
#[test]
1313
fn test_technical_debt_in_non_git_repo() {
1414
let temp_dir = TempDir::new().expect("Failed to create temp dir");
15+
let original_dir = std::env::current_dir().unwrap();
1516

16-
let mut cmd = Command::cargo_bin("git-x").expect("Failed to find binary");
17-
cmd.current_dir(temp_dir.path())
18-
.arg("technical-debt")
19-
.assert()
20-
.success()
21-
.stdout(predicate::str::contains("Technical Debt Analysis"));
17+
std::env::set_current_dir(temp_dir.path()).unwrap();
18+
19+
let cmd = TechnicalDebtCommand::new();
20+
let result = cmd.execute();
21+
22+
assert!(result.is_ok());
23+
let output = result.unwrap();
24+
assert!(output.contains("Technical Debt Analysis"));
25+
26+
// Restore original directory
27+
let _ = std::env::set_current_dir(&original_dir);
2228
}
2329

2430
#[test]
@@ -45,12 +51,18 @@ fn test_technical_debt_in_empty_git_repo() {
4551
.output()
4652
.expect("Failed to configure git");
4753

48-
let mut cmd = Command::cargo_bin("git-x").expect("Failed to find binary");
49-
cmd.current_dir(temp_dir.path())
50-
.arg("technical-debt")
51-
.assert()
52-
.success()
53-
.stdout(predicate::str::contains("Technical Debt Analysis"));
54+
let original_dir = std::env::current_dir().unwrap();
55+
std::env::set_current_dir(temp_dir.path()).unwrap();
56+
57+
let cmd = TechnicalDebtCommand::new();
58+
let result = cmd.execute();
59+
60+
assert!(result.is_ok());
61+
let output = result.unwrap();
62+
assert!(output.contains("Technical Debt Analysis"));
63+
64+
// Restore original directory
65+
let _ = std::env::set_current_dir(&original_dir);
5466
}
5567

5668
#[test]
@@ -85,12 +97,18 @@ fn test_technical_debt_with_files() {
8597
.output()
8698
.expect("Failed to commit files");
8799

88-
let mut cmd = Command::cargo_bin("git-x").expect("Failed to find binary");
89-
cmd.current_dir(repo.path())
90-
.arg("technical-debt")
91-
.assert()
92-
.success()
93-
.stdout(predicate::str::contains("Technical Debt Analysis"));
100+
let original_dir = std::env::current_dir().unwrap();
101+
std::env::set_current_dir(repo.path()).unwrap();
102+
103+
let cmd = TechnicalDebtCommand::new();
104+
let result = cmd.execute();
105+
106+
assert!(result.is_ok());
107+
let output = result.unwrap();
108+
assert!(output.contains("Technical Debt Analysis"));
109+
110+
// Restore original directory
111+
let _ = std::env::set_current_dir(&original_dir);
94112
}
95113

96114
#[test]

0 commit comments

Comments
 (0)