]> Untitled Git - lemmy.git/blob - crates/utils/src/test.rs
Moving settings to Database. (#2492)
[lemmy.git] / crates / utils / src / test.rs
1 use regex::RegexBuilder;
2
3 use crate::utils::{
4   is_valid_actor_name,
5   is_valid_display_name,
6   is_valid_matrix_id,
7   is_valid_post_title,
8   remove_slurs,
9   scrape_text_for_mentions,
10   slur_check,
11   slurs_vec_to_str,
12 };
13
14 #[test]
15 fn test_mentions_regex() {
16   let text = "Just read a great blog post by [@tedu@honk.teduangst.com](/u/test). And another by !test_community@fish.teduangst.com . Another [@lemmy@lemmy-alpha:8540](/u/fish)";
17   let mentions = scrape_text_for_mentions(text);
18
19   assert_eq!(mentions[0].name, "tedu".to_string());
20   assert_eq!(mentions[0].domain, "honk.teduangst.com".to_string());
21   assert_eq!(mentions[1].domain, "lemmy-alpha:8540".to_string());
22 }
23
24 #[test]
25 fn test_valid_actor_name() {
26   let actor_name_max_length = 20;
27   assert!(is_valid_actor_name("Hello_98", actor_name_max_length));
28   assert!(is_valid_actor_name("ten", actor_name_max_length));
29   assert!(!is_valid_actor_name("Hello-98", actor_name_max_length));
30   assert!(!is_valid_actor_name("a", actor_name_max_length));
31   assert!(!is_valid_actor_name("", actor_name_max_length));
32 }
33
34 #[test]
35 fn test_valid_display_name() {
36   let actor_name_max_length = 20;
37   assert!(is_valid_display_name("hello @there", actor_name_max_length));
38   assert!(!is_valid_display_name(
39     "@hello there",
40     actor_name_max_length
41   ));
42
43   // Make sure zero-space with an @ doesn't work
44   assert!(!is_valid_display_name(
45     &format!("{}@my name is", '\u{200b}'),
46     actor_name_max_length
47   ));
48 }
49
50 #[test]
51 fn test_valid_post_title() {
52   assert!(is_valid_post_title("Post Title"));
53   assert!(is_valid_post_title("   POST TITLE ðŸ˜ƒðŸ˜ƒðŸ˜ƒðŸ˜ƒðŸ˜ƒ"));
54   assert!(!is_valid_post_title("\n \n \n \n             ")); // tabs/spaces/newlines
55 }
56
57 #[test]
58 fn test_valid_matrix_id() {
59   assert!(is_valid_matrix_id("@dess:matrix.org"));
60   assert!(!is_valid_matrix_id("dess:matrix.org"));
61   assert!(!is_valid_matrix_id(" @dess:matrix.org"));
62   assert!(!is_valid_matrix_id("@dess:matrix.org t"));
63 }
64
65 #[test]
66 fn test_slur_filter() {
67   let slur_regex = Some(RegexBuilder::new(r"(fag(g|got|tard)?\b|cock\s?sucker(s|ing)?|ni((g{2,}|q)+|[gq]{2,})[e3r]+(s|z)?|mudslime?s?|kikes?|\bspi(c|k)s?\b|\bchinks?|gooks?|bitch(es|ing|y)?|whor(es?|ing)|\btr(a|@)nn?(y|ies?)|\b(b|re|r)tard(ed)?s?)").case_insensitive(true).build().unwrap());
68   let test =
69       "faggot test kike tranny cocksucker retardeds. Capitalized Niggerz. This is a bunch of other safe text.";
70   let slur_free = "No slurs here";
71   assert_eq!(
72       remove_slurs(test, &slur_regex),
73       "*removed* test *removed* *removed* *removed* *removed*. Capitalized *removed*. This is a bunch of other safe text."
74         .to_string()
75     );
76
77   let has_slurs_vec = vec![
78     "Niggerz",
79     "cocksucker",
80     "faggot",
81     "kike",
82     "retardeds",
83     "tranny",
84   ];
85   let has_slurs_err_str = "No slurs - Niggerz, cocksucker, faggot, kike, retardeds, tranny";
86
87   assert_eq!(slur_check(test, &slur_regex), Err(has_slurs_vec));
88   assert_eq!(slur_check(slur_free, &slur_regex), Ok(()));
89   if let Err(slur_vec) = slur_check(test, &slur_regex) {
90     assert_eq!(&slurs_vec_to_str(slur_vec), has_slurs_err_str);
91   }
92 }
93
94 // These helped with testing
95 // #[test]
96 // fn test_send_email() {
97 //  let result =  send_email("not a subject", "test_email@gmail.com", "ur user", "<h1>HI there</h1>");
98 //   assert!(result.is_ok());
99 // }