mod common;
use common::{init, test_client};
#[tokio::test]
async fn test_usergroups_list() {
init();
let client = skip_if_no_client!(test_client());
let result = client.usergroups().list().await;
match result {
Ok(response) => {
println!(
"✓ usergroups.list: {} usergroups found",
response.usergroups.len()
);
for ug in response.usergroups.iter().take(5) {
println!(
" - @{} ({}) - {} users",
ug.handle,
ug.name,
ug.user_count.unwrap_or(0)
);
}
}
Err(e) => {
println!("✓ usergroups.list: {} (may require admin permissions)", e);
}
}
}
#[tokio::test]
async fn test_usergroups_create_update_disable() {
init();
let client = skip_if_no_client!(test_client());
let timestamp = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_millis();
let handle = format!("test-group-{}", timestamp);
let name = format!("Test Group {}", timestamp);
let create_result = client
.usergroups()
.create(
&name,
&handle,
Some("Integration test group - please ignore"),
)
.await;
match create_result {
Ok(response) => {
let usergroup_id = response.usergroup.id.clone();
println!(
"✓ usergroups.create: created @{} ({})",
response.usergroup.handle, usergroup_id
);
let update_result = client
.usergroups()
.update(&usergroup_id, None, None, Some("Updated description"))
.await;
match update_result {
Ok(updated) => {
println!("✓ usergroups.update: updated {}", updated.usergroup.id);
}
Err(e) => {
println!("✗ usergroups.update: {}", e);
}
}
let disable_result = client.usergroups().disable(&usergroup_id).await;
match disable_result {
Ok(disabled) => {
println!("✓ usergroups.disable: disabled {}", disabled.usergroup.id);
}
Err(e) => {
println!("✗ usergroups.disable: {}", e);
}
}
}
Err(e) => {
println!("✓ usergroups.create: {} (may require admin permissions)", e);
}
}
}
#[tokio::test]
async fn test_usergroups_users_list() {
init();
let client = skip_if_no_client!(test_client());
let list_result = client.usergroups().list().await;
match list_result {
Ok(response) => {
if response.usergroups.is_empty() {
println!("✓ usergroups.users.list: No usergroups to test with");
return;
}
let usergroup = &response.usergroups[0];
let users_result = client.usergroups().users_list(&usergroup.id).await;
match users_result {
Ok(users_response) => {
println!(
"✓ usergroups.users.list: @{} has {} users",
usergroup.handle,
users_response.users.len()
);
for user in users_response.users.iter().take(3) {
println!(" - {}", user);
}
}
Err(e) => {
println!(
"✓ usergroups.users.list: {} (may require different permissions)",
e
);
}
}
}
Err(e) => {
println!(
"✓ usergroups.users.list: Skipped (couldn't list usergroups: {})",
e
);
}
}
}
#[tokio::test]
async fn test_usergroups_enable_existing() {
init();
let client = skip_if_no_client!(test_client());
let list_result = client.usergroups().list().await;
match list_result {
Ok(response) => {
if response.usergroups.is_empty() {
println!("✓ usergroups.enable: No usergroups to test with");
return;
}
let usergroup = &response.usergroups[0];
let enable_result = client.usergroups().enable(&usergroup.id).await;
match enable_result {
Ok(enabled) => {
println!(
"✓ usergroups.enable: @{} is enabled",
enabled.usergroup.handle
);
}
Err(e) => {
println!("✓ usergroups.enable: {} (may already be enabled)", e);
}
}
}
Err(e) => {
println!(
"✓ usergroups.enable: Skipped (couldn't list usergroups: {})",
e
);
}
}
}
#[tokio::test]
async fn test_usergroups_users_update() {
init();
let client = skip_if_no_client!(test_client());
let auth = client.auth().test().await.expect("Failed to get auth info");
let list_result = client.usergroups().list().await;
match list_result {
Ok(response) => {
if response.usergroups.is_empty() {
println!("✓ usergroups.users.update: No usergroups to test with");
return;
}
let usergroup = &response.usergroups[0];
let current_users = client.usergroups().users_list(&usergroup.id).await;
let original_users: Vec<String> = current_users.map(|r| r.users).unwrap_or_default();
let mut new_users: Vec<&str> = original_users.iter().map(|s| s.as_str()).collect();
if !new_users.contains(&auth.user_id.as_str()) {
new_users.push(&auth.user_id);
}
let update_result = client
.usergroups()
.users_update(&usergroup.id, &new_users)
.await;
match update_result {
Ok(updated) => {
println!(
"✓ usergroups.users.update: @{} now has {} users",
updated.usergroup.handle,
updated.usergroup.user_count.unwrap_or(0)
);
if !original_users.contains(&auth.user_id) {
let restore_users: Vec<&str> =
original_users.iter().map(|s| s.as_str()).collect();
let _ = client
.usergroups()
.users_update(&usergroup.id, &restore_users)
.await;
}
}
Err(e) => {
println!(
"✓ usergroups.users.update: {} (may require admin permissions)",
e
);
}
}
}
Err(e) => {
println!(
"✓ usergroups.users.update: Skipped (couldn't list usergroups: {})",
e
);
}
}
}