From a641034895f183e003a5084a7faa889daa95edb7 Mon Sep 17 00:00:00 2001 From: Paul Makles Date: Mon, 12 Feb 2024 21:19:36 +0000 Subject: [PATCH] test: write a unit test for group chat permissions --- .../database/fixtures/group_with_members.json | 28 +++++++++++++++++++ .../database/src/models/channels/model.rs | 26 +++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 crates/core/database/fixtures/group_with_members.json diff --git a/crates/core/database/fixtures/group_with_members.json b/crates/core/database/fixtures/group_with_members.json new file mode 100644 index 00000000..1eeeb0ba --- /dev/null +++ b/crates/core/database/fixtures/group_with_members.json @@ -0,0 +1,28 @@ +[ + { + "_object_type": "User", + "_id": "__ID:0__", + "username": "Owner", + "discriminator": "0001" + }, + { + "_object_type": "User", + "_id": "__ID:1__", + "username": "Member", + "discriminator": "0001" + }, + { + "_object_type": "User", + "_id": "__ID:2__", + "username": "Member", + "discriminator": "0002" + }, + { + "_object_type": "Channel", + "_id": "__ID:3__", + "channel_type": "Group", + "name": "My Group", + "owner": "__ID:0__", + "recipients": ["__ID:0__", "__ID:1__", "__ID:2__"] + } +] diff --git a/crates/core/database/src/models/channels/model.rs b/crates/core/database/src/models/channels/model.rs index 52db968f..8f04a0aa 100644 --- a/crates/core/database/src/models/channels/model.rs +++ b/crates/core/database/src/models/channels/model.rs @@ -695,6 +695,32 @@ mod tests { use crate::{fixture, util::permissions::DatabasePermissionQuery}; + #[async_std::test] + async fn permissions_group_channel() { + database_test!(|db| async move { + fixture!(db, "group_with_members", + owner user 0 + member1 user 1 + member2 user 2 + channel channel 3); + + let mut query = DatabasePermissionQuery::new(&db, &owner).channel(&channel); + assert!(calculate_channel_permissions(&mut query) + .await + .has_channel_permission(ChannelPermission::SendMessage)); + + let mut query = DatabasePermissionQuery::new(&db, &member1).channel(&channel); + assert!(calculate_channel_permissions(&mut query) + .await + .has_channel_permission(ChannelPermission::SendMessage)); + + let mut query = DatabasePermissionQuery::new(&db, &member2).channel(&channel); + assert!(!calculate_channel_permissions(&mut query) + .await + .has_channel_permission(ChannelPermission::SendMessage)); + }); + } + #[async_std::test] async fn permissions_text_channel() { database_test!(|db| async move {