From c9d9e77f16f164cf04005595d851e4de79c26f93 Mon Sep 17 00:00:00 2001 From: bitfl0wer Date: Wed, 16 Aug 2023 14:06:04 +0200 Subject: [PATCH] Add recursive-updating-structs test --- tests/gateway.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/tests/gateway.rs b/tests/gateway.rs index 9cbcc49..3876ef6 100644 --- a/tests/gateway.rs +++ b/tests/gateway.rs @@ -1,7 +1,11 @@ mod common; +use std::sync::{Arc, RwLock}; + use chorus::gateway::*; -use chorus::types::{self, ChannelModifySchema}; +use chorus::types::{ + self, ChannelModifySchema, Composite, PermissionFlags, RoleCreateModifySchema, RoleObject, +}; #[tokio::test] /// Tests establishing a connection (hello and heartbeats) on the local gateway; @@ -58,3 +62,51 @@ async fn test_self_updating_structs() { common::teardown(bundle).await } + +#[tokio::test] +async fn test_recursive_self_updating_structs() { + let mut bundle = common::setup().await; + + let guild = bundle + .user + .gateway + .observe_and_into_inner(bundle.guild.clone()) + .await; + assert!(guild.roles.is_none()); + let id = guild.id; + let permissions = PermissionFlags::CONNECT | PermissionFlags::MANAGE_EVENTS; + let permissions = Some(permissions.to_string()); + let mut role_create_schema = RoleCreateModifySchema { + name: Some("among us".to_string()), + permissions, + hoist: Some(true), + icon: None, + unicode_emoji: Some("".to_string()), + mentionable: Some(true), + position: None, + color: None, + }; + let role = RoleObject::create(&mut bundle.user, id, role_create_schema.clone()) + .await + .unwrap(); + let role_watch = bundle + .user + .gateway + .observer_channel(Arc::new(RwLock::new(role.clone()))) + .await; + let guild = bundle + .user + .gateway + .observe_and_into_inner(bundle.guild.clone()) + .await; + assert!(guild.roles.is_some()); + role_create_schema.name = Some("enbyenvy".to_string()); + RoleObject::modify(&mut bundle.user, id, role.id, role_create_schema) + .await + .unwrap(); + let newrole = role_watch.borrow().read().unwrap().clone(); + assert_eq!(newrole.name, "enbyenvy".to_string()); + let guild_role = role_watch.borrow().read().unwrap().clone(); + assert_eq!(guild_role.name, "enbyenvy".to_string()); + common::teardown(bundle).await; +}