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.
70 lines
2.1 KiB
Rust
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);
|
|
}
|