garbage_code_hunter/badge/
mod.rs1pub mod generator;
6
7use anyhow::Result;
8use generator::{generate_svg, BadgeStyle};
9use std::fs;
10use std::path::Path;
11
12pub fn run(score: f64, output_path: &Path, style: &BadgeStyle) -> Result<String> {
14 let svg = generate_svg(score, style);
15 fs::write(output_path, &svg)?;
16 Ok(format!(
17 "Badge written to {} (score: {:.0}/100)",
18 output_path.display(),
19 score
20 ))
21}
22
23pub fn render(score: f64, style: &BadgeStyle) -> String {
25 generate_svg(score, style)
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31 use tempfile::TempDir;
32
33 #[test]
34 fn test_run_writes_file() {
35 let dir = TempDir::new().unwrap();
36 let path = dir.path().join("badge.svg");
37 let result = run(85.0, &path, &BadgeStyle::Flat);
38 assert!(result.is_ok());
39 assert!(path.exists());
40 let content = fs::read_to_string(&path).unwrap();
41 assert!(content.contains("<svg"));
42 assert!(content.contains("85"));
43 }
44
45 #[test]
46 fn test_render_returns_svg() {
47 let svg = render(72.0, &BadgeStyle::Flat);
48 assert!(svg.starts_with("<svg"));
49 assert!(svg.ends_with("</svg>"));
50 }
51
52 #[test]
53 fn test_render_plastic_style() {
54 let svg = render(90.0, &BadgeStyle::Plastic);
55 assert!(svg.contains("90"));
56 }
57}