git-gemini-forge 0.6.6

A simple Gemini server that serves a read-only view of public repositories from a Git forge.
use super::truncate_spaces;
use crate::network::responses::*;
use urlencoding::encode as encode_uri_component;

/// Creates an internal page link in Gemtext for the given user page.
pub fn user_link(user: &User) -> String {
	// Replace space with "_"
	let username_clean: String = truncate_spaces(&user.login);
	let username_link = encode_uri_component(&username_clean);

	// Create Gemini link
	format!("=> /{username_link} {username_clean}")
}

// MARK: - Tests

#[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");
	}
}