use once_cell::sync::Lazy; /// YouTube video metadata extraction from `ytInitialPlayerResponse` embedded JSON. /// /// YouTube embeds the full player config (title, author, view count, description, /// duration, upload date) in a ` "#; let result = try_extract(html).unwrap(); assert!(result.contains("# Rust in 100 Seconds")); assert!(result.contains("**Channel:** Fireship")); assert!(result.contains("5.4M")); assert!(result.contains("2023-01-15")); assert!(result.contains("2:00")); assert!(result.contains("Learn Rust in 100 seconds.")); } #[test] fn returns_none_for_non_youtube_html() { let html = "

Hello world

"; assert!(try_extract(html).is_none()); } #[test] fn handles_missing_optional_fields() { let html = r#" "#; let result = try_extract(html).unwrap(); assert!(result.contains("# Minimal Video")); assert!(result.contains("**Channel:** Someone")); // Upload date should be "Unknown" when microformat is missing assert!(result.contains("Unknown")); } }