use std::fs;
use std::str::FromStr;
use codelore_lib::Options;
use codelore_lib::analyses::authors::run_authors;
use codelore_lib::analysis::AnalysisName;
use codelore_lib::facts::FactsDb;
use codelore_lib::repo::GixRepo;
#[test]
fn team_map_renames_authors_in_output() {
let diff_repo = codelore_lib::test_support::differential_repo::build();
let dir = tempfile::tempdir().expect("tempdir");
let path = dir.path().join("team-map.csv");
fs::write(
&path,
"author,team\n\
alice@example.com,Backend Team\n\
canonical-alice@example.com,Backend Team\n",
)
.unwrap();
let repo = GixRepo::open(diff_repo.dir.path()).expect("open");
let db = FactsDb::new_in_memory().expect("db");
let opts = Options {
repo_path: diff_repo.dir.path().to_path_buf(),
min_revs: 1,
team_map_file: Some(path),
..Options::default()
};
db.ingest(&repo, &opts).expect("ingest");
let _rows = run_authors(&db, &opts).expect("authors");
let team_count: i64 = db
.query_row(
"SELECT COUNT(*) FROM commits WHERE canonical_author = 'Backend Team'",
[],
|r| r.get(0),
)
.expect("count commits");
assert!(
team_count > 0,
"team-map aliasing produced 0 commits under the team name"
);
}
#[test]
fn dot_codelore_teams_is_auto_discovered() {
let diff_repo = codelore_lib::test_support::differential_repo::build();
let auto_path = diff_repo.dir.path().join(".codelore-teams");
fs::write(
&auto_path,
"author,team\ncanonical-alice@example.com,AutoTeam\n",
)
.unwrap();
let repo = GixRepo::open(diff_repo.dir.path()).expect("open");
let db = FactsDb::new_in_memory().expect("db");
let opts = Options {
repo_path: diff_repo.dir.path().to_path_buf(),
min_revs: 1,
..Options::default()
};
db.ingest(&repo, &opts).expect("ingest");
let team_count: i64 = db
.query_row(
"SELECT COUNT(*) FROM commits WHERE canonical_author = 'AutoTeam'",
[],
|r| r.get(0),
)
.expect("count commits");
assert!(
team_count > 0,
".codelore-teams was not auto-discovered (0 commits under 'AutoTeam')"
);
}
#[test]
fn team_map_does_not_break_analysis_dispatcher() {
assert!(AnalysisName::from_str("ownership").is_ok());
assert!(AnalysisName::from_str("fragmentation").is_ok());
assert!(AnalysisName::from_str("nonsense-analysis").is_err());
}