use url::Url;
#[test]
fn test_url_parsing_basic() {
let db_url = "postgresql://user:pass@localhost:5432/test_db";
let result = Url::parse(db_url);
assert!(result.is_ok());
let parsed = result.unwrap();
assert_eq!(parsed.host_str(), Some("localhost"));
assert_eq!(parsed.port(), Some(5432));
assert_eq!(parsed.path(), "/test_db");
assert_eq!(parsed.username(), "user");
assert_eq!(parsed.password(), Some("pass"));
}
#[test]
fn test_url_parsing_without_password() {
let db_url = "postgresql://user@localhost:5432/test_db";
let result = Url::parse(db_url);
assert!(result.is_ok());
let parsed = result.unwrap();
assert_eq!(parsed.username(), "user");
assert_eq!(parsed.password(), None);
}
#[test]
fn test_url_parsing_with_default_port() {
let db_url = "postgresql://user:pass@localhost/test_db";
let result = Url::parse(db_url);
assert!(result.is_ok());
let parsed = result.unwrap();
assert_eq!(parsed.port(), None); assert_eq!(parsed.scheme(), "postgresql");
}
#[test]
fn test_invalid_database_urls() {
let invalid_urls = vec!["not-a-url-at-all", "://missing-scheme", ""];
for url in invalid_urls {
let result = Url::parse(url);
assert!(result.is_err(), "Expected error for URL: {}", url);
}
let result = Url::parse("invalid-scheme://url");
assert!(result.is_ok());
assert_eq!(result.unwrap().scheme(), "invalid-scheme");
}
#[test]
fn test_database_connection_construction() {
let base_url = "postgresql://user:pass@localhost:5432";
let database_name = "test_db";
let mut url = Url::parse(base_url).unwrap();
url.set_path(database_name);
let final_url = url.as_str();
assert!(final_url.contains("test_db"));
assert!(final_url.contains("postgresql://"));
}
#[test]
fn test_database_url_modification() {
let base_url = "postgresql://user:pass@localhost:5432";
let database_name = "my_database";
let mut url = Url::parse(base_url).expect("Invalid base URL");
url.set_path(database_name);
let modified_url = url.as_str();
assert!(modified_url.ends_with("/my_database"));
assert_eq!(url.path(), "/my_database");
}