KeiSeiKit-1.0/_primitives/_rust/kei-gdrive-import/tests/classify_fixtures.rs
Parfii-bot 0be354a920 KeiSeiKit-public — clean state
Single-commit clean baseline after security scrub of niche-tells,
project codenames, internal jargon, and contributor-email leaks.

Contents:
- 100 Rust crates (_primitives/_rust/)
- 37 agent manifests (_manifests/) + generated specs (_generated/)
- 67 user-invocable skills (skills/)
- 33 hooks (hooks/)
- Composition blocks (_blocks/)
- Documentation (docs/, README.md)
- TS adapter packages (_ts_packages/)
- Assembler (_assembler/)
- Roles (_roles/)
- Templates (_templates/)
- Forgejo CI (.forgejo/)

Author: Denis Parfionovich <info@greendragon.info>

License: see LICENSE.
2026-05-01 12:09:03 +08:00

70 lines
2.1 KiB
Rust

use std::path::PathBuf;
use std::sync::Once;
use kei_gdrive_import::{classify, Verdict};
fn fixture(name: &str) -> PathBuf {
let mut p = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
p.push("tests");
p.push("fixtures");
p.push(name);
p
}
// `.git/` cannot be tracked inside a parent git repo. The already-repo
// fixture's `.git/HEAD` is materialised at test-runtime instead.
static ENSURE_ALREADY_REPO_FIXTURE: Once = Once::new();
fn ensure_already_repo_fixture() {
ENSURE_ALREADY_REPO_FIXTURE.call_once(|| {
let dot_git = fixture("already-repo").join(".git");
std::fs::create_dir_all(&dot_git).expect("create .git/");
std::fs::write(dot_git.join("HEAD"), "ref: refs/heads/main\n")
.expect("write .git/HEAD");
});
}
#[test]
fn rust_project_is_project() {
let c = classify(&fixture("rust-project"));
assert_eq!(c.verdict, Verdict::Project);
assert_eq!(c.primary_lang, "rust");
assert!(c.score >= 15, "score was {}", c.score);
assert!(c.markers.iter().any(|m| m.file == "Cargo.toml"));
}
#[test]
fn node_project_is_project() {
let c = classify(&fixture("node-project"));
assert_eq!(c.verdict, Verdict::Project);
assert_eq!(c.primary_lang, "node");
}
#[test]
fn python_project_is_project() {
let c = classify(&fixture("python-project"));
assert_eq!(c.verdict, Verdict::Project);
assert_eq!(c.primary_lang, "python");
}
#[test]
fn photos_folder_is_not_a_project() {
let c = classify(&fixture("photos-folder"));
assert_eq!(c.verdict, Verdict::NotAProject);
assert_eq!(c.score, 0);
}
#[test]
fn already_repo_short_circuits_regardless_of_score() {
ensure_already_repo_fixture();
let c = classify(&fixture("already-repo"));
assert_eq!(c.verdict, Verdict::AlreadyRepo);
// Cargo.toml still contributes to score; AlreadyRepo just overrides verdict.
assert!(c.markers.iter().any(|m| m.file == ".git"));
}
#[test]
fn mixed_ambiguous_falls_in_middle_band() {
let c = classify(&fixture("mixed-ambiguous"));
assert_eq!(c.verdict, Verdict::Ambiguous);
assert!(c.score >= 5 && c.score <= 7, "score was {}", c.score);
}