56 lines
1.8 KiB
Rust
56 lines
1.8 KiB
Rust
use domain::provider::{EncryptedCredential, ProviderConnection, ProviderName};
|
|
use domain::user::UserId;
|
|
|
|
fn credential() -> EncryptedCredential {
|
|
EncryptedCredential::from_persistence(vec![1, 2, 3, 4])
|
|
}
|
|
|
|
#[test]
|
|
fn a_provider_name_is_a_lowercase_slug() {
|
|
assert_eq!(ProviderName::new("Subsonic").unwrap().value(), "subsonic");
|
|
assert_eq!(ProviderName::new(" spotify ").unwrap().value(), "spotify");
|
|
}
|
|
|
|
#[test]
|
|
fn a_blank_or_malformed_provider_name_is_rejected() {
|
|
assert!(ProviderName::new("").is_err());
|
|
assert!(ProviderName::new(" ").is_err());
|
|
assert!(ProviderName::new("my provider").is_err());
|
|
}
|
|
|
|
#[test]
|
|
fn a_connection_belongs_to_one_user_and_one_provider() {
|
|
let user_id = UserId::generate();
|
|
let provider = ProviderName::new("subsonic").unwrap();
|
|
|
|
let connection = ProviderConnection::new(user_id.clone(), provider.clone(), credential());
|
|
|
|
assert_eq!(*connection.user_id(), user_id);
|
|
assert_eq!(connection.provider().value(), "subsonic");
|
|
}
|
|
|
|
#[test]
|
|
fn a_credential_never_reveals_itself_in_debug_output() {
|
|
let user_id = UserId::generate();
|
|
let provider = ProviderName::new("subsonic").unwrap();
|
|
let secret = EncryptedCredential::from_persistence(b"hunter2".to_vec());
|
|
|
|
let connection = ProviderConnection::new(user_id, provider, secret);
|
|
|
|
let rendered = format!("{connection:?}");
|
|
assert!(!rendered.contains("hunter2"));
|
|
assert!(!rendered.contains("104, 117, 110"));
|
|
}
|
|
|
|
#[test]
|
|
fn replacing_a_credential_touches_the_connection() {
|
|
let user_id = UserId::generate();
|
|
let provider = ProviderName::new("subsonic").unwrap();
|
|
let mut connection = ProviderConnection::new(user_id, provider, credential());
|
|
let before = *connection.updated_at();
|
|
|
|
connection.replace_credential(EncryptedCredential::from_persistence(vec![9, 9]));
|
|
|
|
assert!(*connection.updated_at() >= before);
|
|
}
|