use windows_users::{
UserUpdate, add_user, change_user_password, delete_user, get_user, update_user, user_exists,
};
use crate::helpers::{
auto_remove_user::AutoRemoveUser,
build::{build_full_user, build_full_user_alt},
constants::USER_NAME,
utils::assert_user_eq,
};
mod helpers;
#[test]
fn test_add_and_get_user_with_full_payload() {
let user_name = format!("{USER_NAME}_2");
let user = build_full_user(&user_name);
let _guard = AutoRemoveUser::add(None, &user).expect("Failed to add user");
let fetched = get_user(None, &user_name).expect("Failed to fetch user");
assert_user_eq(&fetched, &user);
}
#[test]
fn test_add_user_if_not_exists() {
let user_name = format!("{USER_NAME}_3");
let user = build_full_user(&user_name);
let auto_remove_user_result = AutoRemoveUser::add_if_not_exists(None, &user).unwrap();
assert!(auto_remove_user_result.added_or_changed);
let auto_remove_user_result = AutoRemoveUser::add_if_not_exists(None, &user).unwrap();
assert!(!auto_remove_user_result.added_or_changed);
}
#[test]
fn test_add_user_or_update() {
let user_name = format!("{USER_NAME}_4");
let user = build_full_user(&user_name);
let auto_remove_user_result =
AutoRemoveUser::add_or_update(None, &user).expect("Failed to add or update user");
assert!(
auto_remove_user_result.added_or_changed,
"User should be added"
);
let updated_user = build_full_user_alt(&user_name);
let auto_remove_user_result =
AutoRemoveUser::add_or_update(None, &updated_user).expect("Failed to update user");
assert!(
!auto_remove_user_result.added_or_changed,
"Rule should be updated"
);
let updated_user = get_user(None, &user_name).expect("Failed to fetch updated user");
assert_user_eq(&updated_user, &updated_user);
}
#[test]
fn test_delete_user_removes_user() {
let user_name = format!("{USER_NAME}_5");
let user = build_full_user(&user_name);
add_user(None, &user).expect("Failed to add user");
delete_user(None, &user_name).expect("Failed to delete user");
assert!(
!user_exists(None, &user_name),
"Expected deleted user to no longer exist"
);
}
#[test]
fn test_user_exists_returns_true_for_created_user() {
let user_name = format!("{USER_NAME}_6");
let user = build_full_user(&user_name);
let _guard = AutoRemoveUser::add(None, &user).expect("Failed to add user");
assert!(
user_exists(None, &user_name),
"Expected user_exists to return true for an existing user"
);
}
#[test]
fn test_user_exists_returns_false_for_missing_user() {
let user_name = format!("{USER_NAME}_7");
assert!(
!user_exists(None, &user_name),
"Expected user_exists to return false for a missing user"
);
}
#[test]
fn test_update_user_changes_only_requested_fields() {
let user_name = format!("{USER_NAME}_8");
let mut user = build_full_user(&user_name);
let _guard = AutoRemoveUser::add(None, &user).expect("Failed to add user");
let new_full_name = "Updated Full Name";
let new_comment = "Updated comment";
let settings = UserUpdate::builder()
.full_name(new_full_name)
.comment(new_comment)
.build();
user.update(None, &settings)
.expect("Failed to update user with new API");
let fetched = get_user(None, &user_name).expect("Failed to fetch updated user");
user.set_full_name(Some(new_full_name.to_string()));
user.set_comment(Some(new_comment.to_string()));
assert_user_eq(&fetched, &user);
}
#[test]
fn test_update_full_user_to_new_full_user() {
let user_name = format!("{USER_NAME}_9");
let mut user = build_full_user(&user_name);
let _guard = AutoRemoveUser::add(None, &user).expect("Failed to add user");
let new_user = build_full_user_alt(&user_name);
user.update(None, &new_user.clone().into())
.expect("Failed to fully update user");
let fetched = get_user(None, &user_name).expect("Failed to fetch updated user");
assert_user_eq(&fetched, &new_user);
}
#[test]
fn test_update_user_fails_for_missing_user() {
let user_name = format!("{USER_NAME}_10");
let settings = UserUpdate::builder().full_name("Should Fail").build();
let result = update_user(None, &user_name, &settings);
assert!(
result.is_err(),
"Expected update_user to fail for missing user"
);
}
#[test]
fn test_change_user_password_accepts_current_password() {
let user_name = format!("{USER_NAME}_11");
let user = build_full_user(&user_name);
let _guard = AutoRemoveUser::add(None, &user).expect("Failed to add user");
change_user_password(None, &user_name, "P@ssw0rd123!", "N3wP@ssw0rd!")
.expect("Failed to change user password");
}