test: begin writing test for role editing
This commit is contained in:
@@ -52,7 +52,7 @@
|
|||||||
"a": 545270208,
|
"a": 545270208,
|
||||||
"d": 0
|
"d": 0
|
||||||
},
|
},
|
||||||
"rank": 3
|
"rank": 1
|
||||||
},
|
},
|
||||||
"__ID:6__": {
|
"__ID:6__": {
|
||||||
"name": "Owner",
|
"name": "Owner",
|
||||||
@@ -61,6 +61,22 @@
|
|||||||
"d": 0
|
"d": 0
|
||||||
},
|
},
|
||||||
"rank": 0
|
"rank": 0
|
||||||
|
},
|
||||||
|
"__ID:7__": {
|
||||||
|
"name": "Lower Rank 1",
|
||||||
|
"permissions": {
|
||||||
|
"a": 0,
|
||||||
|
"d": 0
|
||||||
|
},
|
||||||
|
"rank": 2
|
||||||
|
},
|
||||||
|
"__ID:8__": {
|
||||||
|
"name": "Lower Rank 2",
|
||||||
|
"permissions": {
|
||||||
|
"a": 0,
|
||||||
|
"d": 0
|
||||||
|
},
|
||||||
|
"rank": 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"default_permissions": 4000322560
|
"default_permissions": 4000322560
|
||||||
|
|||||||
28
crates/delta/fixtures/group_with_members.json
Normal file
28
crates/delta/fixtures/group_with_members.json
Normal file
@@ -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__"]
|
||||||
|
}
|
||||||
|
]
|
||||||
111
crates/delta/fixtures/server_with_roles.json
Normal file
111
crates/delta/fixtures/server_with_roles.json
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"_object_type": "User",
|
||||||
|
"_id": "__ID:0__",
|
||||||
|
"username": "Owner",
|
||||||
|
"discriminator": "0001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "User",
|
||||||
|
"_id": "__ID:1__",
|
||||||
|
"username": "Moderator",
|
||||||
|
"discriminator": "0001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "User",
|
||||||
|
"_id": "__ID:2__",
|
||||||
|
"username": "User",
|
||||||
|
"discriminator": "0001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "Channel",
|
||||||
|
"_id": "__ID:3__",
|
||||||
|
"channel_type": "TextChannel",
|
||||||
|
"name": "General",
|
||||||
|
"server": "__ID:4__",
|
||||||
|
"default_permissions": {
|
||||||
|
"a": 0,
|
||||||
|
"d": 1048576
|
||||||
|
},
|
||||||
|
"role_permissions": {
|
||||||
|
"__ID:5__": {
|
||||||
|
"a": 1048576,
|
||||||
|
"d": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "Server",
|
||||||
|
"_id": "__ID:4__",
|
||||||
|
"owner": "__ID:0__",
|
||||||
|
"name": "Server",
|
||||||
|
"channels": [
|
||||||
|
"__ID:3__"
|
||||||
|
],
|
||||||
|
"roles": {
|
||||||
|
"__ID:5__": {
|
||||||
|
"name": "Moderator",
|
||||||
|
"permissions": {
|
||||||
|
"a": 545270208,
|
||||||
|
"d": 0
|
||||||
|
},
|
||||||
|
"rank": 1
|
||||||
|
},
|
||||||
|
"__ID:6__": {
|
||||||
|
"name": "Owner",
|
||||||
|
"permissions": {
|
||||||
|
"a": 0,
|
||||||
|
"d": 0
|
||||||
|
},
|
||||||
|
"rank": 0
|
||||||
|
},
|
||||||
|
"__ID:7__": {
|
||||||
|
"name": "Lower Rank 1",
|
||||||
|
"permissions": {
|
||||||
|
"a": 0,
|
||||||
|
"d": 0
|
||||||
|
},
|
||||||
|
"rank": 2
|
||||||
|
},
|
||||||
|
"__ID:8__": {
|
||||||
|
"name": "Lower Rank 2",
|
||||||
|
"permissions": {
|
||||||
|
"a": 0,
|
||||||
|
"d": 0
|
||||||
|
},
|
||||||
|
"rank": 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default_permissions": 4000322560
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "ServerMember",
|
||||||
|
"_id": {
|
||||||
|
"user": "__ID:0__",
|
||||||
|
"server": "__ID:4__"
|
||||||
|
},
|
||||||
|
"roles": [
|
||||||
|
"__ID:6__"
|
||||||
|
],
|
||||||
|
"joined_at": 1698318340195
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "ServerMember",
|
||||||
|
"_id": {
|
||||||
|
"user": "__ID:1__",
|
||||||
|
"server": "__ID:4__"
|
||||||
|
},
|
||||||
|
"roles": [
|
||||||
|
"__ID:5__"
|
||||||
|
],
|
||||||
|
"joined_at": 1698318340195
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"_object_type": "ServerMember",
|
||||||
|
"_id": {
|
||||||
|
"user": "__ID:2__",
|
||||||
|
"server": "__ID:4__"
|
||||||
|
},
|
||||||
|
"joined_at": 1698318340195
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -72,3 +72,54 @@ pub async fn edit_role_ranks(
|
|||||||
|
|
||||||
Ok(Json(server.into()))
|
Ok(Json(server.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use revolt_database::fixture;
|
||||||
|
use revolt_models::v0;
|
||||||
|
use rocket::http::{ContentType, Header, Status};
|
||||||
|
|
||||||
|
use crate::util::test::TestHarness;
|
||||||
|
|
||||||
|
#[rocket::async_test]
|
||||||
|
async fn edit_role_rankings() {
|
||||||
|
let harness = TestHarness::new().await;
|
||||||
|
|
||||||
|
fixture!(harness.db, "server_with_roles",
|
||||||
|
owner user 0
|
||||||
|
moderator user 1
|
||||||
|
user user 2
|
||||||
|
server server 4);
|
||||||
|
|
||||||
|
// Moderator can re-order the roles below them
|
||||||
|
let (_, moderator_session) = harness.account_from_user(moderator.id).await;
|
||||||
|
let mut target_order: Vec<String> = server
|
||||||
|
.ordered_roles()
|
||||||
|
.into_iter()
|
||||||
|
.map(|(id, _)| id)
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
// Swap the two lower ranked roles
|
||||||
|
target_order.swap(2, 3);
|
||||||
|
|
||||||
|
let response = harness
|
||||||
|
.client
|
||||||
|
.post(format!("/servers/{}/roles/ranks", server.id))
|
||||||
|
.header(ContentType::JSON)
|
||||||
|
.body(
|
||||||
|
json!(v0::DataEditRoleRanks {
|
||||||
|
ranks: target_order.clone()
|
||||||
|
})
|
||||||
|
.to_string(),
|
||||||
|
)
|
||||||
|
.header(Header::new(
|
||||||
|
"x-session-token",
|
||||||
|
moderator_session.token.to_string(),
|
||||||
|
))
|
||||||
|
.dispatch()
|
||||||
|
.await;
|
||||||
|
|
||||||
|
assert_eq!(response.status(), Status::Ok);
|
||||||
|
drop(response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
use authifier::{
|
use authifier::{
|
||||||
models::{Account, Session},
|
models::{Account, EmailVerification, Session},
|
||||||
Authifier,
|
Authifier,
|
||||||
};
|
};
|
||||||
use futures::StreamExt;
|
use futures::StreamExt;
|
||||||
@@ -83,30 +83,41 @@ impl TestHarness {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub async fn new_user(&self) -> (Account, Session, User) {
|
pub async fn new_user(&self) -> (Account, Session, User) {
|
||||||
let account = Account::new(
|
let user = User::create(&self.db, TestHarness::rand_string(), None, None)
|
||||||
&self.authifier,
|
.await
|
||||||
format!("{}@revolt.chat", TestHarness::rand_string()),
|
.expect("`User`");
|
||||||
"password".to_string(),
|
|
||||||
false,
|
let (account, session) = self.account_from_user(user.id.clone()).await;
|
||||||
)
|
|
||||||
.await
|
(account, session, user)
|
||||||
.expect("`Account`");
|
}
|
||||||
|
|
||||||
|
pub async fn account_from_user(&self, id: String) -> (Account, Session) {
|
||||||
|
let account = Account {
|
||||||
|
id,
|
||||||
|
email: format!("{}@revolt.chat", TestHarness::rand_string()),
|
||||||
|
password: Default::default(),
|
||||||
|
email_normalised: Default::default(),
|
||||||
|
deletion: None,
|
||||||
|
disabled: false,
|
||||||
|
lockout: None,
|
||||||
|
mfa: Default::default(),
|
||||||
|
password_reset: None,
|
||||||
|
verification: EmailVerification::Verified,
|
||||||
|
};
|
||||||
|
|
||||||
|
self.authifier
|
||||||
|
.database
|
||||||
|
.save_account(&account)
|
||||||
|
.await
|
||||||
|
.expect("`Account`");
|
||||||
|
|
||||||
let session = account
|
let session = account
|
||||||
.create_session(&self.authifier, String::new())
|
.create_session(&self.authifier, String::new())
|
||||||
.await
|
.await
|
||||||
.expect("`Session`");
|
.expect("`Session`");
|
||||||
|
|
||||||
let user = User::create(
|
(account, session)
|
||||||
&self.db,
|
|
||||||
TestHarness::rand_string(),
|
|
||||||
account.id.to_string(),
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
.await
|
|
||||||
.expect("`User`");
|
|
||||||
|
|
||||||
(account, session, user)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn new_server(&self, user: &User) -> (Server, Vec<Channel>) {
|
pub async fn new_server(&self, user: &User) -> (Server, Vec<Channel>) {
|
||||||
|
|||||||
Reference in New Issue
Block a user