- UserProfile struct groups display_name/bio/avatar/banner/also_known_as/profile_fields - User::from_persistence takes UserProfile (6 args, was 11) - PersistedReview struct for Review::from_persistence (1 arg, was 8) - WatchlistApInput struct for watchlist_to_ap_object (1 arg, was 8) - ActivityPubDeps struct for activitypub::wire (1 arg, was 11) - FederationRepos type alias for wire() return types - FeedSortBy: impl std::str::FromStr instead of inherent from_str - postgres users.rs: row_to_user takes &PgRow like sqlite - collapse nested ifs in multipart handlers - type alias for complex return types (image-converter, worker) - tui: allow large_enum_variant at crate level (pre-existing, unrelated)
39 lines
1.1 KiB
Rust
39 lines
1.1 KiB
Rust
use super::*;
|
|
use crate::value_objects::{Email, PasswordHash, UserId, Username};
|
|
|
|
fn make_user() -> User {
|
|
User::from_persistence(
|
|
UserId::generate(),
|
|
Email::new("a@b.com".to_string()).unwrap(),
|
|
Username::new("alice".to_string()).unwrap(),
|
|
PasswordHash::new("hash".to_string()).unwrap(),
|
|
UserRole::Standard,
|
|
UserProfile::default(),
|
|
)
|
|
}
|
|
|
|
#[test]
|
|
fn update_profile_sets_fields() {
|
|
let mut user = make_user();
|
|
user.update_profile(UserProfile {
|
|
bio: Some("My bio".to_string()),
|
|
avatar_path: Some("avatars/abc".to_string()),
|
|
..Default::default()
|
|
});
|
|
assert_eq!(user.bio(), Some("My bio"));
|
|
assert_eq!(user.avatar_path(), Some("avatars/abc"));
|
|
}
|
|
|
|
#[test]
|
|
fn update_profile_clears_with_none() {
|
|
let mut user = make_user();
|
|
user.update_profile(UserProfile {
|
|
bio: Some("bio".to_string()),
|
|
avatar_path: Some("path".to_string()),
|
|
..Default::default()
|
|
});
|
|
user.update_profile(UserProfile::default());
|
|
assert_eq!(user.bio(), None);
|
|
assert_eq!(user.avatar_path(), None);
|
|
}
|