use crate::config::Config;
pub fn is_email_unwanted(email_address: &str) -> bool {
if !email_address.contains("@") || email_address.len() < 3 {
return false;
}
let config = Config::load_default();
match extract_domain(email_address) {
Some(domain) => config.unwanted_domains.contains(&domain.to_string()),
None => false,
}
}
pub fn extract_domain(email_address: &str) -> Option<&str> {
email_address.strip_suffix(".").unwrap_or(email_address).split('@').nth(1)
}
#[cfg(test)]
mod test {
use super::{is_email_unwanted, extract_domain};
#[test]
fn is_email_unwanted_true() {
let email = "user_name@mostlysunny.com";
assert!(is_email_unwanted(email))
}
#[test]
fn is_email_unwanted_false() {
let email = "user_name@yahoo.com";
assert!(!is_email_unwanted(email))
}
#[test]
fn is_email_unwanted_contains_not_equal() {
let email = "user_name@mostlysunny_and_this.com";
assert!(!is_email_unwanted(email))
}
#[test]
fn is_email_unwanted_domain_no_split_symbol() {
let email = "user_nameyahoo.com";
assert!(!is_email_unwanted(email))
}
#[test]
fn is_email_unwanted_blank_email_address() {
let email = "";
assert!(!is_email_unwanted(email))
}
#[test]
fn extract_domain_extracts_domain() {
let email = "user_name@yahoo.com";
assert_eq!(extract_domain(email), Some("yahoo.com"))
}
#[test]
fn extract_domain_strips_trailing_period() {
let email = "user_name@mostlysunny.com.";
assert_eq!(extract_domain(email), Some("mostlysunny.com"))
}
}