use super::truncate_spaces;
use crate::network::responses::*;
use urlencoding::encode as encode_uri_component;
pub fn user_link(user: &User) -> String {
let username_clean: String = truncate_spaces(&user.login);
let username_link = encode_uri_component(&username_clean);
format!("=> /{username_link} {username_clean}")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_trims_username_whitespace() {
let login: String = String::from("foo ");
let user: User = User { login };
assert_eq!(user_link(&user), "=> /foo foo");
}
#[test]
fn test_trims_username_newline() {
let login: String = String::from("foo\n");
let user: User = User { login };
assert_eq!(user_link(&user), "=> /foo foo");
}
#[test]
fn test_ignores_username_newline() {
let login: String = String::from("foo\nbar");
let user: User = User { login };
assert_eq!(user_link(&user), "=> /foo%20bar foo bar");
}
#[test]
fn test_ignores_multiple_username_newlines() {
let login: String = String::from("foo\n\nbar");
let user: User = User { login };
assert_eq!(user_link(&user), "=> /foo%20bar foo bar");
}
#[test]
fn test_uses_good_username() {
let login: String = String::from("foobar");
let user: User = User { login };
assert_eq!(user_link(&user), "=> /foobar foobar");
}
}