rustgenpass 0.6.0

Generate a hashed password similar to SuperGenPass.
Documentation
#[cfg(test)]
mod test_get_hostname {
    use rustgenpass::get_hostname;

    #[test]
    fn removes_subdomains() {
        let url = "https://foo.bar.example.com/foo/bar.html";
        assert_eq!("example.com", get_hostname(url).unwrap());
    }
}

#[cfg(test)]
mod test_get_hostname_with_config {
    use regex::Regex;
    use rustgenpass::{HostnameConfig, get_hostname_with_config};

    #[test]
    fn passes_through_input() {
        let url = "https://www.example.com/foo/bar.html";
        let config = HostnameConfig {
            passthrough: true,
            ..HostnameConfig::default()
        };
        assert_eq!(url, get_hostname_with_config(url, config).unwrap());
    }

    #[test]
    fn returns_error_with_empty_string() {
        let url = "";
        assert!(get_hostname_with_config(url, HostnameConfig::default()).is_err());
    }

    #[test]
    fn returns_string() {
        let url = "%invalid_url%";
        assert_eq!(
            "%invalid_url%",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn returns_ip_address() {
        let url = "https://127.0.0.1/foo/bar.html";
        assert_eq!(
            "127.0.0.1",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn keep_subdomains_flag() {
        let url = "https://foo.bar.example.com/foo/bar.html";
        let config = HostnameConfig {
            keep_subdomains: true,
            ..HostnameConfig::default()
        };
        assert_eq!(
            "foo.bar.example.com",
            get_hostname_with_config(url, config).unwrap()
        );
    }

    #[test]
    fn removes_subdomains() {
        let url = "https://foo.bar.example.com/foo/bar.html";
        assert_eq!(
            "example.com",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn keeps_cc_tld() {
        let url = "https://foo.bar.example.co.uk/foo/bar.html";
        assert_eq!(
            "example.co.uk",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn returns_single_hostname_as_is() {
        let url = "https://localhost/foo/bar.html";
        assert_eq!(
            "localhost",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn ignores_port() {
        let url = "https://localhost:4711/foo/bar.html";
        assert_eq!(
            "localhost",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn ignores_username_and_password() {
        let url = "https://foo:bar@localhost/foo/bar.html";
        assert_eq!(
            "localhost",
            get_hostname_with_config(url, HostnameConfig::default()).unwrap()
        );
    }

    #[test]
    fn test_regex_without_match() {
        let url = "";
        let re_domain = Regex::new(r"^(?i)(?:[a-z]+://)?(?:[^/@]+@)?([^/:]+)").unwrap();
        let captures = re_domain.captures(url.as_ref());
        assert!(captures.is_none());
    }

    #[test]
    fn test_regex() {
        let url = "https://127.0.0.1/foo/bar.html";
        let re_domain = Regex::new(r"^(?i)(?:[a-z]+://)?(?:[^/@]+@)?([^/:]+)").unwrap();
        let captures = re_domain.captures(url.as_ref()).unwrap();
        assert_eq!(Some("127.0.0.1"), captures.get(1).map(|m| m.as_str()));
    }
}