1mod cleaner;
2mod rules;
3mod policy;
4
5pub use policy::RedirectPolicy;
6pub use cleaner::{UrlTrackCleaner, UrlTrackCleanerBuilder};
7pub use rules::ReserveRule;
8
9#[cfg(test)]
10pub mod tests {
11 use super::*;
12 use anyhow::Result;
13
14 #[tokio::test]
15 pub async fn test_clean_b23() -> Result<()> {
16 let cleaner = UrlTrackCleaner::builder()
17 .follow_redirect(RedirectPolicy::All)
18 .build();
19 let cleaned = cleaner.do_clean("https://b23.tv/iFW9atP").await?;
20 println!("cleaned url: {} {}", cleaned, cleaned.as_str());
21 Ok(())
22 }
23
24 #[tokio::test]
25 pub async fn test_clean_localhost() -> Result<()> {
26 let cleaner = UrlTrackCleaner::builder()
27 .follow_redirect(RedirectPolicy::All)
28 .build();
29 let cleaned = cleaner.do_clean("http://localhost/?test=1").await?;
30 println!("cleaned url: {} {}", cleaned, cleaned.as_str());
31 Ok(())
32 }
33
34 #[tokio::test]
35 pub async fn test_clean_bilibili_with_reserving_timestamp() {
36 let reserve_rules: Vec<ReserveRule> = vec![ReserveRule::new_with_regex(
37 r#"^http(s)?://www.bilibili.com/.*"#,
38 vec!["t".to_string()],
39 )
40 .expect("failed to create reserve rule")];
41 let cleaner = UrlTrackCleaner::builder()
42 .reserve_rules(reserve_rules)
43 .build();
44 let cleaned = cleaner
45 .do_clean("https://www.bilibili.com/video/BV11111?t=360&track_id=2")
46 .await
47 .expect("failed to clean url");
48 println!("cleaned url: {}", cleaned);
49 assert_eq!(cleaned.query_pairs().count(), 1);
50 assert_eq!(cleaned.query_pairs().next().unwrap().0, "t");
51 assert_eq!(
52 format!("{}{}", cleaned.domain().unwrap(), cleaned.path()),
53 "www.bilibili.com/video/BV11111"
54 );
55 }
56}