use faf_kernel::{score, tier_symbol};
use std::fs;
fn fixture(name: &str) -> String {
fs::read_to_string(format!(
"{}/tests/parity/{}",
env!("CARGO_MANIFEST_DIR"),
name
))
.unwrap()
}
#[test]
fn unicode_and_emoji_values_populate() {
let r = score("project:\n name: ๆต่ฏ-้กน็ฎ\n goal: ๐๏ธ๐ฅ\n").unwrap();
assert_eq!(r.populated, 2);
}
#[test]
fn numbers_bools_sequences_and_maps_populate() {
let yaml = "project:\n name: 42\nmonorepo:\n packages_count: 12\nstack:\n workspaces: true\ntech_stack:\n - Rust\n";
let r = score(yaml).unwrap();
assert!(
r.populated >= 3,
"scalars/bools count as populated: {}",
r.populated
);
}
#[test]
fn empty_sequences_and_maps_are_empty() {
let r = score("project:\n name: []\n goal: {}\n").unwrap();
assert_eq!(r.populated, 0, "empty containers are not populated data");
}
#[test]
fn whitespace_only_string_is_empty() {
let r = score("project:\n name: \" \"\n").unwrap();
assert_eq!(r.populated, 0);
}
#[test]
fn slotignored_is_trimmed_before_matching() {
let r = score("project:\n name: x\n goal: \" slotignored \"\n").unwrap();
let goal_ignored = r
.slots
.iter()
.any(|(n, s)| n == "project.goal" && *s == faf_kernel::SlotState::Slotignored);
assert!(
goal_ignored,
"padded `slotignored` must still be Slotignored"
);
}
#[test]
fn nested_non_empty_mapping_populates() {
let r = score("project:\n name:\n nested: value\n").unwrap();
assert!(r.populated >= 1);
}
#[test]
fn no_medal_emoji_anywhere() {
for s in [100u32, 99, 95, 85, 70, 55, 1, 0] {
let sym = tier_symbol(s);
assert!(!sym.contains('๐ฅ') && !sym.contains('๐ฅ') && !sym.contains('๐ฅ'));
assert!(
!sym.contains('๐ข')
&& !sym.contains('๐ก')
&& !sym.contains('๐ด')
&& !sym.contains('๐ค')
);
}
let json = score(&fixture("cli-trophy.faf")).unwrap().to_json();
for medal in ['๐ฅ', '๐ฅ', '๐ฅ', '๐ข', '๐ก', '๐ด'] {
assert!(!json.contains(medal));
}
}
#[test]
fn trophy_is_the_only_emoji_symbol() {
assert_eq!(tier_symbol(100), "๐");
assert_eq!(tier_symbol(99), "โ
");
assert_eq!(tier_symbol(95), "โ");
assert_eq!(tier_symbol(85), "โ");
assert_eq!(tier_symbol(0), "โก");
}
#[test]
fn green_and_yellow_share_the_geometric_glyph() {
assert_eq!(tier_symbol(70), "โ");
assert_eq!(tier_symbol(55), "โ");
}
#[test]
fn barely_started_file_scores_low_against_full_33() {
let r = score(&fixture("minimal-raw.faf")).unwrap();
assert_eq!(r.active, 33);
assert_eq!(r.populated, 1);
assert_eq!(r.score, 3);
}