use super::*;
use rusqlite::params;
use tga::core::config::TeamConfig;
use crate::commands::aliases::tests::{insert_author, insert_commit};
fn config_with_domain(domain: &str) -> Config {
Config {
team: Some(TeamConfig {
members: vec![],
aliases: std::collections::HashMap::new(),
canonical_domain: Some(domain.to_string()),
}),
..Config::default()
}
}
#[test]
fn auto_accept_only_merges_high() {
let mut db = Database::open_in_memory().expect("open");
let alt = insert_author(&db, "Bob", "alt@example.com");
let bob = insert_author(&db, "Bob", "bob@example.com");
insert_commit(&db, "sha-bob", bob);
insert_commit(&db, "sha-alt", alt);
let cfg = Config::default();
run(&cfg, &mut db, 0.85, true).expect("run");
let bob_exists: i64 = db
.connection()
.query_row(
"SELECT COUNT(*) FROM authors WHERE canonical_email = 'bob@example.com'",
[],
|r| r.get(0),
)
.expect("count");
assert_eq!(
bob_exists, 0,
"auto-accept should have removed bob@example.com"
);
let n: i64 = db
.connection()
.query_row(
"SELECT COUNT(*) FROM commits WHERE author_id = ?1",
params![alt],
|r| r.get(0),
)
.expect("count");
assert_eq!(n, 2);
}
#[test]
fn suggest_without_auto_accept_never_merges() {
let mut db = Database::open_in_memory().expect("open");
insert_author(&db, "Bob", "alt@example.com");
insert_author(&db, "Bob", "bob@example.com");
let cfg = Config::default();
run(&cfg, &mut db, 0.85, false).expect("run");
let rows: i64 = db
.connection()
.query_row("SELECT COUNT(*) FROM authors", [], |r| r.get(0))
.expect("count");
assert_eq!(rows, 2, "both identities must survive a suggest-only run");
}
#[test]
fn config_canonical_domain_threads_through() {
let mut db = Database::open_in_memory().expect("open");
insert_author(&db, "Z", "z@duettoresearh.com");
insert_author(&db, "Z", "z@duettoresearch.com");
let cfg = config_with_domain("duettoresearch.com");
run(&cfg, &mut db, 0.5, false).expect("run");
}