Merge pull request #111 from polyphony-chat/feature/relationships

Feature/relationships
This commit is contained in:
Flori 2023-06-19 19:01:29 +02:00 committed by GitHub
commit d7894ff006
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 99 additions and 7 deletions

View File

@ -58,8 +58,8 @@
### User Management ### User Management
- [ ] [User profile customization](https://github.com/polyphony-chat/chorus/issues/41) - [ ] [User profile customization](https://github.com/polyphony-chat/chorus/issues/41)
- [x] Gettings users and user profiles - [x] Gettings users and user profiles
- [ ] [Friend requests](https://github.com/polyphony-chat/chorus/issues/92) - [x] [Friend requests](https://github.com/polyphony-chat/chorus/issues/92)
- [ ] [Blocking users](https://github.com/polyphony-chat/chorus/issues/92) - [x] [Blocking users](https://github.com/polyphony-chat/chorus/issues/92)
- [ ] User presence (online, offline, idle, etc.) - [ ] User presence (online, offline, idle, etc.)
- [ ] User status (custom status, etc.) - [ ] User status (custom status, etc.)
- [x] Account deletion - [x] Account deletion

View File

@ -143,7 +143,7 @@ impl UserMeta {
self.belongs_to.borrow().urls.get_api(), self.belongs_to.borrow().urls.get_api(),
user_id user_id
); );
let request = Client::new().post(url).bearer_auth(self.token()); let request = Client::new().delete(url).bearer_auth(self.token());
handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await handle_request_as_option(request, self, crate::api::limits::LimitType::Global).await
} }
} }

View File

@ -6,7 +6,7 @@ use crate::types::Snowflake;
use super::PublicUser; use super::PublicUser;
#[derive(Debug, Deserialize, Serialize, Clone, Default)] #[derive(Debug, Deserialize, Serialize, Clone, Default, PartialEq, Eq)]
/// See https://discord-userdoccers.vercel.app/resources/user#relationship-structure /// See https://discord-userdoccers.vercel.app/resources/user#relationship-structure
pub struct Relationship { pub struct Relationship {
pub id: Snowflake, pub id: Snowflake,
@ -17,7 +17,7 @@ pub struct Relationship {
pub since: Option<DateTime<Utc>>, pub since: Option<DateTime<Utc>>,
} }
#[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default)] #[derive(Serialize_repr, Deserialize_repr, Debug, Clone, Default, Eq, PartialEq)]
#[repr(u8)] #[repr(u8)]
/// See https://discord-userdoccers.vercel.app/resources/user#relationship-type /// See https://discord-userdoccers.vercel.app/resources/user#relationship-type
pub enum RelationshipType { pub enum RelationshipType {

View File

@ -1,4 +1,4 @@
use chorus::types::{self, RegisterSchema, RegisterSchemaOptions}; use chorus::types::{self, RegisterSchema, RegisterSchemaOptions, Relationship, RelationshipType};
mod common; mod common;
@ -47,6 +47,98 @@ async fn test_get_relationships() {
}; };
other_user.send_friend_request(friend_request_schema).await; other_user.send_friend_request(friend_request_schema).await;
let relationships = user.get_relationships().await.unwrap(); let relationships = user.get_relationships().await.unwrap();
println!("{:?}", relationships); assert_eq!(relationships.get(0).unwrap().id, other_user.object.id);
common::teardown(bundle).await
}
#[tokio::test]
async fn test_modify_relationship_friends() {
let register_schema = RegisterSchemaOptions {
date_of_birth: Some("2000-01-01".to_string()),
..RegisterSchema::builder("integrationtestuser2", true)
}
.build()
.unwrap();
let mut bundle = common::setup().await;
let belongs_to = &mut bundle.instance;
let user = &mut bundle.user;
let mut other_user = belongs_to.register_account(&register_schema).await.unwrap();
other_user
.modify_user_relationship(
&user.object.id.to_string(),
types::RelationshipType::Friends,
)
.await;
let relationships = user.get_relationships().await.unwrap();
assert_eq!(relationships.get(0).unwrap().id, other_user.object.id);
assert_eq!(
relationships.get(0).unwrap().relationship_type,
RelationshipType::Incoming
);
let relationships = other_user.get_relationships().await.unwrap();
assert_eq!(relationships.get(0).unwrap().id, user.object.id);
assert_eq!(
relationships.get(0).unwrap().relationship_type,
RelationshipType::Outgoing
);
user.modify_user_relationship(
other_user.object.id.to_string().as_str(),
RelationshipType::Friends,
)
.await;
assert_eq!(
other_user
.get_relationships()
.await
.unwrap()
.get(0)
.unwrap()
.relationship_type,
RelationshipType::Friends
);
user.remove_relationship(other_user.object.id.to_string().as_str())
.await;
assert_eq!(
other_user.get_relationships().await.unwrap(),
Vec::<Relationship>::new()
);
common::teardown(bundle).await
}
#[tokio::test]
async fn test_modify_relationship_block() {
let register_schema = RegisterSchemaOptions {
date_of_birth: Some("2000-01-01".to_string()),
..RegisterSchema::builder("integrationtestuser2", true)
}
.build()
.unwrap();
let mut bundle = common::setup().await;
let belongs_to = &mut bundle.instance;
let user = &mut bundle.user;
let mut other_user = belongs_to.register_account(&register_schema).await.unwrap();
other_user
.modify_user_relationship(
&user.object.id.to_string(),
types::RelationshipType::Blocked,
)
.await;
let relationships = user.get_relationships().await.unwrap();
assert_eq!(relationships, Vec::<Relationship>::new());
let relationships = other_user.get_relationships().await.unwrap();
assert_eq!(relationships.get(0).unwrap().id, user.object.id);
assert_eq!(
relationships.get(0).unwrap().relationship_type,
RelationshipType::Blocked
);
other_user
.remove_relationship(user.object.id.to_string().as_str())
.await;
assert_eq!(
other_user.get_relationships().await.unwrap(),
Vec::<Relationship>::new()
);
common::teardown(bundle).await common::teardown(bundle).await
} }