rpz

Response policy zone (RPZ) file generator.
git clone https://git.philomathiclife.com/repos/rpz
Log | Files | Refs | README

tests.rs (3642B)


      1 use crate::Config;
      2 #[expect(clippy::unwrap_used, reason = "OK in tests")]
      3 #[test]
      4 fn missing_fields() {
      5     drop(toml::from_str::<Config>("").unwrap_err());
      6     drop(toml::from_str::<Config>("timeout=15").unwrap_err());
      7     drop(toml::from_str::<Config>(r#"rpz="/foo""#).unwrap_err());
      8     drop(toml::from_str::<Config>(r#"local_dir="/foo/""#).unwrap());
      9     drop(toml::from_str::<Config>(r#"adblock=["https://foo.com/foo"]"#).unwrap());
     10 }
     11 #[expect(clippy::unwrap_used, reason = "OK in tests")]
     12 #[test]
     13 fn invalid_fields() {
     14     drop(toml::from_str::<Config>("bob=15").unwrap_err());
     15     drop(toml::from_str::<Config>(r#"foo=["https://foo.com/foo"]"#).unwrap_err());
     16 }
     17 #[expect(clippy::unwrap_used, reason = "OK in tests")]
     18 #[test]
     19 fn timeout() {
     20     drop(toml::from_str::<Config>(r#"local_dir="/foo/""#).unwrap());
     21     drop(
     22         toml::from_str::<Config>(
     23             r#"timeout=15
     24 local_dir="/foo/""#,
     25         )
     26         .unwrap(),
     27     );
     28     drop(
     29         toml::from_str::<Config>(
     30             r#"timeout=4294967295
     31 local_dir="/foo/""#,
     32         )
     33         .unwrap(),
     34     );
     35     drop(
     36         toml::from_str::<Config>(
     37             r#"timeout=-1
     38 local_dir="/foo/""#,
     39         )
     40         .unwrap_err(),
     41     );
     42     drop(
     43         toml::from_str::<Config>(
     44             r#"timeout=0
     45 local_dir="/foo/""#,
     46         )
     47         .unwrap(),
     48     );
     49     drop(
     50         toml::from_str::<Config>(
     51             r#"timeout=4294967296
     52 local_dir="/foo/""#,
     53         )
     54         .unwrap_err(),
     55     );
     56 }
     57 #[expect(clippy::unwrap_used, reason = "OK in tests")]
     58 #[test]
     59 fn arrays() {
     60     drop(
     61         toml::from_str::<Config>(r#"adblock=["https://foo.com/foo","https://foo.com/foo"]"#)
     62             .unwrap_err(),
     63     );
     64     drop(toml::from_str::<Config>(r#"adblock=["https://foo.com/foo"]"#).unwrap());
     65     drop(
     66         toml::from_str::<Config>(
     67             r#"adblock=["https://foo.com/foo"]
     68 domain=["https://foo.com/foo"]"#,
     69         )
     70         .unwrap_err(),
     71     );
     72 }
     73 #[expect(clippy::unwrap_used, reason = "OK in tests")]
     74 #[test]
     75 fn urls() {
     76     drop(toml::from_str::<Config>(r#"adblock=["file://foo.com/foo"]"#).unwrap_err());
     77     drop(toml::from_str::<Config>(r#"adblock=["foo.com/foo"]"#).unwrap_err());
     78     drop(toml::from_str::<Config>(r#"adblock=["http://foo.com/foo"]"#).unwrap());
     79     drop(
     80         toml::from_str::<Config>(
     81             r#"adblock=[]
     82 domain=["https:///foo"]"#,
     83         )
     84         .unwrap(),
     85     );
     86     drop(toml::from_str::<Config>(r#"adblock=[""]"#).unwrap_err());
     87     drop(toml::from_str::<Config>(r#"adblock=["https://"]"#).unwrap_err());
     88     drop(toml::from_str::<Config>(r#"adblock=["ftp://foo.com/foo"]"#).unwrap_err());
     89 }
     90 #[expect(clippy::unwrap_used, reason = "OK in tests")]
     91 #[test]
     92 fn paths() {
     93     drop(
     94         toml::from_str::<Config>(
     95             r#"rpz="/foo/"
     96 wildcard=["https://foo.com/foo"]"#,
     97         )
     98         .unwrap_err(),
     99     );
    100     drop(
    101         toml::from_str::<Config>(
    102             r#"rpz="foo"
    103 wildcard=["https://foo.com/foo"]"#,
    104         )
    105         .unwrap_err(),
    106     );
    107     drop(
    108         toml::from_str::<Config>(
    109             r#"rpz="/foo"
    110 wildcard=["https://foo.com/foo"]"#,
    111         )
    112         .unwrap(),
    113     );
    114     drop(toml::from_str::<Config>(r#"local_dir="foo/""#).unwrap_err());
    115     drop(toml::from_str::<Config>(r#"local_dir="/foo/""#).unwrap());
    116     // Directories are allowed to not have a trailing `/`, but they will get it
    117     // added.
    118     assert!(
    119         toml::from_str::<Config>(
    120             r#"local_dir="/foo"
    121 wildcard=["https://foo.com/foo"]"#
    122         )
    123         .is_ok_and(|config| config
    124             .local_dir
    125             .is_some_and(|dir| dir.to_str().is_some_and(|val| val == "/foo/")))
    126     );
    127 }