use chrono::prelude::*; use goodpod::*; use pretty_assertions::assert_eq; use url::Url; #[test] fn serialize_simple_feed() { let rss = Rss { channel: Channel { title: Some("My title".to_string()), description: Some("My description".to_string()), generator: Some("RSS Blue v1.0".to_string()), language: Some(Language::English(LanguageEnglish::UnitedStates)), ..Default::default() }, }; let expected = include_str!("../tests/data/simple-feed.xml").trim(); let actual = goodpod::ser::to_string_with_config( &rss, &goodpod::ser::Config { perform_indent: true, indent_string: Some(" ".to_string()), write_document_declaration: true, }, ) .unwrap(); assert_eq!(expected, actual); } #[test] fn serialize_publisher_feed() { let rss = Rss { channel: Channel { title: Some("John Doe".to_string()), description: Some("John Doe is a fictional artist.".to_string()), last_build_date: Some( chrono::prelude::Utc .with_ymd_and_hms(2024, 4, 20, 0, 5, 50) .unwrap(), ), itunes_image: Some(itunes::Image { href: "https://example.com/john-doe.jpg".to_string(), }), podcast_guid: Some( uuid::Uuid::parse_str("4136005d-a5b9-534d-b32a-e88894e1ae4a").unwrap(), ), podcast_medium: Some(podcast::Medium::Publisher), podcast_remote_items: vec![ podcast::RemoteItem { feed_guid: uuid::Uuid::parse_str("b9f0b2e5-6a56-5e73-83e4-af1c33769e73") .unwrap(), item_guid: None, feed_url: None, medium: Some(podcast::Medium::Music), }, podcast::RemoteItem { feed_guid: uuid::Uuid::parse_str("cb6e27c5-6d11-54a1-bf60-40537c0336e3") .unwrap(), item_guid: None, feed_url: Some(url::Url::parse("https://www.example.com/feed.xml").unwrap()), medium: Some(podcast::Medium::Music), }, ], ..Default::default() }, }; let expected = include_str!("../tests/data/publisher-feed.xml").trim(); let actual = goodpod::ser::to_string_with_config( &rss, &goodpod::ser::Config { perform_indent: true, indent_string: Some(" ".to_string()), write_document_declaration: true, }, ) .unwrap(); assert_eq!(expected, actual); } #[test] fn serialize_complex_feed() { let rss = Rss { channel: Channel { title: Some("My title".to_string()), link: Some(Url::parse("https://example.com").unwrap()), description: Some("My description".to_string()), generator: Some("RSS Blue v1.0".to_string()), last_build_date: None, podcast_funding: vec![ podcast::Funding { url: url::Url::parse("https://www.example.com/donations").unwrap(), display_text: "Support the show!".to_string(), }, podcast::Funding { url: url::Url::parse("https://www.example.com/members").unwrap(), display_text: "Become a member!".to_string(), }, ], podcast_locked: Some(podcast::Locked { value: false, owner_email: Some("john@example.com".to_string()), }), ..Default::default() }, }; let expected = include_str!("../tests/data/complex-feed.xml").trim(); let actual = goodpod::ser::to_string_with_config( &rss, &goodpod::ser::Config { perform_indent: true, indent_string: Some(" ".to_string()), write_document_declaration: true, }, ) .unwrap(); assert_eq!(expected, actual); }