FollowCommand.target is now FollowTarget (Identity|Handle) instead of SocialIdentity. actor_url field always holds a URL; handles go through FollowTarget::Handle. Adapter resolves handles explicitly. Type system prevents misuse in future commands.
56 lines
1.6 KiB
Rust
56 lines
1.6 KiB
Rust
use super::*;
|
|
use crate::value_objects::{FollowTarget, SocialIdentity, UserId};
|
|
|
|
#[test]
|
|
fn follow_accepted_matches() {
|
|
let uid = UserId::from_uuid(uuid::Uuid::new_v4());
|
|
let event = DomainEvent::FollowAccepted {
|
|
owner: uid.clone(),
|
|
requester: SocialIdentity::Remote {
|
|
actor_url: "https://remote.example/users/alice".to_string(),
|
|
},
|
|
};
|
|
let DomainEvent::FollowAccepted { requester, .. } = event else {
|
|
panic!("wrong variant");
|
|
};
|
|
assert_eq!(
|
|
requester,
|
|
SocialIdentity::Remote {
|
|
actor_url: "https://remote.example/users/alice".to_string()
|
|
}
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn follow_requested_with_identity() {
|
|
let follower = UserId::from_uuid(uuid::Uuid::new_v4());
|
|
let target = UserId::from_uuid(uuid::Uuid::new_v4());
|
|
let event = DomainEvent::FollowRequested {
|
|
follower: follower.clone(),
|
|
target: FollowTarget::Identity(SocialIdentity::Local(target.clone())),
|
|
};
|
|
assert!(matches!(
|
|
event,
|
|
DomainEvent::FollowRequested {
|
|
target: FollowTarget::Identity(SocialIdentity::Local(_)),
|
|
..
|
|
}
|
|
));
|
|
}
|
|
|
|
#[test]
|
|
fn follow_requested_with_handle() {
|
|
let follower = UserId::from_uuid(uuid::Uuid::new_v4());
|
|
let event = DomainEvent::FollowRequested {
|
|
follower: follower.clone(),
|
|
target: FollowTarget::Handle("@alice@remote.example".into()),
|
|
};
|
|
assert!(matches!(
|
|
event,
|
|
DomainEvent::FollowRequested {
|
|
target: FollowTarget::Handle(_),
|
|
..
|
|
}
|
|
));
|
|
}
|