Annotation For tests/mail.rs
Logged in as anonymous

Origin for each line in tests/mail.rs from check-in 40a93e9a58:

e45c7e529b 2026-07-31    1: use smtp2tg::mail::MailServer;
e45c7e529b 2026-07-31    2: 
98c5a42df0 2026-08-01    3: use config::FileFormat::Toml;
e45c7e529b 2026-07-31    4: use stacked_errors::{
e45c7e529b 2026-07-31    5: 	Result,
e45c7e529b 2026-07-31    6: 	StackableErr,
98c5a42df0 2026-08-01    7: 	ensure,
98c5a42df0 2026-08-01    8: 	ensure_eq,
e45c7e529b 2026-07-31    9: };
e45c7e529b 2026-07-31   10: 
e45c7e529b 2026-07-31   11: use tgbot::types::ChatPeerId;
98c5a42df0 2026-08-01   12: 
98c5a42df0 2026-08-01   13: #[test]
98c5a42df0 2026-08-01   14: fn get_id_properly_resolves_addresses () -> Result<()> {
98c5a42df0 2026-08-01   15: 	let server = MailServer::new(config::Config::builder()
e45c7e529b 2026-07-31   16: 		.add_source(config::File::from_str(r#"
e45c7e529b 2026-07-31   17: 			api_key = "test-api-key"
e45c7e529b 2026-07-31   18: 			api_gateway = "https://api.telegram.org"
e45c7e529b 2026-07-31   19: 			default = 0
e45c7e529b 2026-07-31   20: 			fields = ["date", "from", "subject"]
e45c7e529b 2026-07-31   21: 			domains = ["example.com"]
e45c7e529b 2026-07-31   22: 
e45c7e529b 2026-07-31   23: 			[recipients]
e45c7e529b 2026-07-31   24: 			"someone@example.com" = 1
e45c7e529b 2026-07-31   25: 			"root" = -1
98c5a42df0 2026-08-01   26: 		"#, Toml))
e45c7e529b 2026-07-31   27: 		.build()
98c5a42df0 2026-08-01   28: 		.stack()?)?;
b9af445709 2026-07-31   29: 	let cases = [
b9af445709 2026-07-31   30: 		("someone@example.com", 1),
b9af445709 2026-07-31   31: 		("someone", 0),
b9af445709 2026-07-31   32: 		("root", -1),
b9af445709 2026-07-31   33: 		("unknown@example.com", 0),
158c9cffc6 2026-08-01   34: 		("SOMEONE@example.com", 1),	// uppercase local part
158c9cffc6 2026-08-01   35: 		("someone@EXAMPLE.COM", 1),	// uppercase domain
40a93e9a58 2026-08-01   36: 		("some.one@example.com", 0),	// dot are not skipped
158c9cffc6 2026-08-01   37: 		("some-one-2", 0),	// Hyphens
b9af445709 2026-07-31   38: 	];
b9af445709 2026-07-31   39: 	for (email, id) in cases {
98c5a42df0 2026-08-01   40: 		ensure_eq!(*server.get_id(email)?, ChatPeerId::from(id), format!("email [{email}] expected to return id [{id}]"));
f748e99b70 2026-08-01   41: 	}
f748e99b70 2026-08-01   42: 	let cases = [
f748e99b70 2026-08-01   43: 		"someone@otherdomain.net",
158c9cffc6 2026-08-01   44: 		"@example.com",             // empty local part
158c9cffc6 2026-08-01   45: 		"some@one@example.com",     // more than one '@'
158c9cffc6 2026-08-01   46: 		"someone@example.com.evil",
158c9cffc6 2026-08-01   47: 		"someone@example.org",
f748e99b70 2026-08-01   48: 	];
f748e99b70 2026-08-01   49: 	for email in cases {
98c5a42df0 2026-08-01   50: 		ensure!(server.get_id(email).is_err(), format!("this email should be rejected: {email}"));
98c5a42df0 2026-08-01   51: 	}
98c5a42df0 2026-08-01   52: 	Ok(())
98c5a42df0 2026-08-01   53: }
98c5a42df0 2026-08-01   54: 
98c5a42df0 2026-08-01   55: #[test]
98c5a42df0 2026-08-01   56: fn wrong_server_config () -> Result<()> {
98c5a42df0 2026-08-01   57: 	let configs = [
98c5a42df0 2026-08-01   58: 		"domains = []",
98c5a42df0 2026-08-01   59: 		"",
98c5a42df0 2026-08-01   60: 		"[recipents]\na = 1",
98c5a42df0 2026-08-01   61: 		r#"
98c5a42df0 2026-08-01   62: 		api_key = "test-api-key"
98c5a42df0 2026-08-01   63: 		api_gateway = "https://api.telegram.org"
98c5a42df0 2026-08-01   64: 		default = 0
98c5a42df0 2026-08-01   65: 		fields = ["date", "from", "subject"]
98c5a42df0 2026-08-01   66: 		domains = ["example.com"]
98c5a42df0 2026-08-01   67: 		# no recipients
98c5a42df0 2026-08-01   68: 		"#,
98c5a42df0 2026-08-01   69: 		r#"
98c5a42df0 2026-08-01   70: 		ap_key = "test-api-key" # bad one
98c5a42df0 2026-08-01   71: 		api_gateway = "https://api.telegram.org"
98c5a42df0 2026-08-01   72: 		default = 0
98c5a42df0 2026-08-01   73: 		fields = ["date", "from", "subject"]
98c5a42df0 2026-08-01   74: 		domains = ["example.com"]
98c5a42df0 2026-08-01   75: 
98c5a42df0 2026-08-01   76: 		[recipients]
98c5a42df0 2026-08-01   77: 		"someone@example.com" = 1
98c5a42df0 2026-08-01   78: 		"root" = -1"#,
98c5a42df0 2026-08-01   79: 		r#"
98c5a42df0 2026-08-01   80: 		api_key = "test-api-key"
98c5a42df0 2026-08-01   81: 		api_gateway = "https://api.telegram.org"
98c5a42df0 2026-08-01   82: 		default = 0
98c5a42df0 2026-08-01   83: 		fields = ["date", "from", "subject"]
98c5a42df0 2026-08-01   84: 		domains = [] # empty
98c5a42df0 2026-08-01   85: 
98c5a42df0 2026-08-01   86: 		[recipients]
98c5a42df0 2026-08-01   87: 		"someone@example.com" = 1
98c5a42df0 2026-08-01   88: 		"root" = -1"#,
98c5a42df0 2026-08-01   89: 	];
98c5a42df0 2026-08-01   90: 	for config in configs {
98c5a42df0 2026-08-01   91: 		let settings = config::Config::builder()
98c5a42df0 2026-08-01   92: 			.add_source(config::File::from_str(config, Toml))
98c5a42df0 2026-08-01   93: 			.build()
98c5a42df0 2026-08-01   94: 			.stack()?;
98c5a42df0 2026-08-01   95: 		ensure!(MailServer::new(settings).is_err(), format!("this config shouldn't be valid:\n{config}"));
b9af445709 2026-07-31   96: 	}
98c5a42df0 2026-08-01   97: 	
e45c7e529b 2026-07-31   98: 	Ok(())
e45c7e529b 2026-07-31   99: }