chorus/tests/channels.rs

264 lines
8.1 KiB
Rust

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
use chorus::types::{self, Channel, GetChannelMessagesSchema, MessageSendSchema, PermissionFlags, PermissionOverwrite, PermissionOverwriteType, PrivateChannelCreateSchema, RelationshipType, Snowflake};
mod common;
#[cfg(target_arch = "wasm32")]
use wasm_bindgen_test::*;
#[cfg(target_arch = "wasm32")]
wasm_bindgen_test_configure!(run_in_browser);
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
async fn get_channel() {
let mut bundle = common::setup().await;
let bundle_channel = bundle.channel.read().unwrap().clone();
let bundle_user = &mut bundle.user;
assert_eq!(
bundle_channel,
Channel::get(bundle_user, bundle_channel.id).await.unwrap()
);
common::teardown(bundle).await
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
async fn delete_channel() {
let mut bundle = common::setup().await;
let channel_guard = bundle.channel.write().unwrap().clone();
let result = Channel::delete(channel_guard, None, &mut bundle.user).await;
assert!(result.is_ok());
common::teardown(bundle).await
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
async fn modify_channel() {
const CHANNEL_NAME: &str = "beepboop";
let mut bundle = common::setup().await;
let channel = &mut bundle.channel.read().unwrap().clone();
let modify_data: types::ChannelModifySchema = types::ChannelModifySchema {
name: Some(CHANNEL_NAME.to_string()),
channel_type: None,
topic: None,
icon: None,
bitrate: None,
user_limit: None,
rate_limit_per_user: None,
position: None,
permission_overwrites: None,
parent_id: None,
nsfw: None,
rtc_region: None,
default_auto_archive_duration: None,
default_reaction_emoji: None,
flags: None,
default_thread_rate_limit_per_user: None,
video_quality_mode: None,
};
let modified_channel = channel
.modify(modify_data, None, &mut bundle.user)
.await
.unwrap();
assert_eq!(modified_channel.name, Some(CHANNEL_NAME.to_string()));
let permission_override = PermissionFlags::MANAGE_CHANNELS | PermissionFlags::MANAGE_MESSAGES;
let user_id: types::Snowflake = bundle.user.object.read().unwrap().id;
let permission_override = PermissionOverwrite {
id: user_id,
overwrite_type: PermissionOverwriteType::Member,
allow: permission_override,
deny: PermissionFlags::empty(),
};
let channel_id: Snowflake = bundle.channel.read().unwrap().id;
Channel::modify_permissions(
&mut bundle.user,
channel_id,
None,
permission_override.clone(),
)
.await
.unwrap();
Channel::delete_permission(&mut bundle.user, channel_id, permission_override.id)
.await
.unwrap();
common::teardown(bundle).await
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
async fn get_channel_messages() {
let mut bundle = common::setup().await;
let channel_id: Snowflake = bundle.channel.read().unwrap().id;
// First create some messages to read
for _ in 0..10 {
let _ = bundle
.user
.send_message(
MessageSendSchema {
content: Some("A Message!".to_string()),
..Default::default()
},
channel_id,
)
.await
.unwrap();
}
assert_eq!(
Channel::messages(
GetChannelMessagesSchema::before(Snowflake::generate()),
channel_id,
&mut bundle.user,
)
.await
.unwrap()
.len(),
10
);
// around is currently bugged in spacebar: https://github.com/spacebarchat/server/issues/1072
// assert_eq!(
// Channel::messages(
// GetChannelMessagesSchema::around(Snowflake::generate()).limit(10),
// bundle.channel.id,
// &mut bundle.user,
// )
// .await
// .unwrap()
// .len(),
// 5
// );
assert!(Channel::messages(
GetChannelMessagesSchema::after(Snowflake::generate()),
channel_id,
&mut bundle.user,
)
.await
.unwrap()
.is_empty());
common::teardown(bundle).await
}
#[cfg_attr(target_arch = "wasm32", wasm_bindgen_test::wasm_bindgen_test)]
#[cfg_attr(not(target_arch = "wasm32"), tokio::test)]
async fn create_dm() {
let mut bundle = common::setup().await;
let other_user = bundle.create_user("integrationtestuser2").await;
let user = &mut bundle.user;
let private_channel_create_schema = PrivateChannelCreateSchema {
recipients: Some(Vec::from([other_user.object.read().unwrap().id])),
access_tokens: None,
nicks: None,
};
let dm_channel = user
.create_private_channel(private_channel_create_schema)
.await
.unwrap();
assert!(dm_channel.recipients.is_some());
assert_eq!(
dm_channel
.recipients
.as_ref()
.unwrap().first()
.unwrap()
.read()
.unwrap()
.id
.clone(),
other_user.object.read().unwrap().id
);
assert_eq!(
dm_channel
.recipients
.as_ref()
.unwrap()
.get(1)
.unwrap()
.read()
.unwrap()
.id
.clone(),
user.object.read().unwrap().id.clone()
);
common::teardown(bundle).await;
}
// #[tokio::test]
// TODO This test currently is broken due to an issue with the Spacebar Server.
#[allow(dead_code)]
async fn remove_add_person_from_to_dm() {
let mut bundle = common::setup().await;
let mut other_user = bundle.create_user("integrationtestuser2").await;
let mut third_user = bundle.create_user("integrationtestuser3").await;
let third_user_id = third_user.object.read().unwrap().id;
let other_user_id = other_user.object.read().unwrap().id;
let user_id = bundle.user.object.read().unwrap().id;
let user = &mut bundle.user;
let private_channel_create_schema = PrivateChannelCreateSchema {
recipients: Some(Vec::from([other_user_id, third_user_id])),
access_tokens: None,
nicks: None,
};
let dm_channel = user
.create_private_channel(private_channel_create_schema)
.await
.unwrap(); // Creates the Channel and stores the response Channel object
dm_channel
.remove_channel_recipient(other_user_id, user)
.await
.unwrap();
assert!(dm_channel.recipients.as_ref().unwrap().get(1).is_none());
other_user
.modify_user_relationship(user_id, RelationshipType::Friends)
.await
.unwrap();
user.modify_user_relationship(other_user_id, RelationshipType::Friends)
.await
.unwrap();
third_user
.modify_user_relationship(user_id, RelationshipType::Friends)
.await
.unwrap();
user.modify_user_relationship(third_user_id, RelationshipType::Friends)
.await
.unwrap();
// Users 1-2 and 1-3 are now friends
dm_channel
.add_channel_recipient(other_user_id, user, None)
.await
.unwrap();
assert!(dm_channel.recipients.is_some());
assert_eq!(
dm_channel
.recipients
.as_ref()
.unwrap().first()
.unwrap()
.read()
.unwrap()
.id,
other_user_id
);
assert_eq!(
dm_channel
.recipients
.as_ref()
.unwrap()
.get(1)
.unwrap()
.read()
.unwrap()
.id,
user_id
);
}