use crate::session::main::user_sessions::{
add_session_to_user_mapping, cleanup_stale_sessions, get_user_session_ids,
remove_session_from_user_mapping,
};
use crate::session::types::{SessionId, UserId};
use crate::session::{insert_test_session, insert_test_user};
use crate::test_utils;
#[tokio::test]
async fn test_get_user_session_ids_empty() {
test_utils::init_test_environment().await;
let user_id = "test-user-sessions-empty";
let result = get_user_session_ids(user_id).await.unwrap();
assert!(result.is_empty());
}
#[tokio::test]
async fn test_add_and_get_session_ids() {
test_utils::init_test_environment().await;
let user_id = "test-user-add-sessions";
let session_id_1 = "test-session-add-1-abcdefghij";
let session_id_2 = "test-session-add-2-abcdefghij";
add_session_to_user_mapping(user_id, session_id_1)
.await
.unwrap();
let result = get_user_session_ids(user_id).await.unwrap();
assert_eq!(result, vec![session_id_1]);
add_session_to_user_mapping(user_id, session_id_2)
.await
.unwrap();
let result = get_user_session_ids(user_id).await.unwrap();
assert_eq!(result, vec![session_id_1, session_id_2]);
add_session_to_user_mapping(user_id, session_id_1)
.await
.unwrap();
let result = get_user_session_ids(user_id).await.unwrap();
assert_eq!(result.len(), 2);
remove_session_from_user_mapping(user_id, session_id_1)
.await
.unwrap();
remove_session_from_user_mapping(user_id, session_id_2)
.await
.unwrap();
}
#[tokio::test]
async fn test_remove_session_from_mapping() {
test_utils::init_test_environment().await;
let user_id = "test-user-remove-session";
let session_id_1 = "test-session-rm-1-abcdefghij";
let session_id_2 = "test-session-rm-2-abcdefghij";
add_session_to_user_mapping(user_id, session_id_1)
.await
.unwrap();
add_session_to_user_mapping(user_id, session_id_2)
.await
.unwrap();
remove_session_from_user_mapping(user_id, session_id_1)
.await
.unwrap();
let result = get_user_session_ids(user_id).await.unwrap();
assert_eq!(result, vec![session_id_2]);
remove_session_from_user_mapping(user_id, session_id_2)
.await
.unwrap();
let result = get_user_session_ids(user_id).await.unwrap();
assert!(result.is_empty());
}
#[tokio::test]
async fn test_cleanup_stale_sessions() {
test_utils::init_test_environment().await;
let user_id_str = "test-user-cleanup-stale";
let user_id = UserId::new(user_id_str.to_string()).unwrap();
let real_session_id_str = "test-session-real-abcdefghij";
let stale_session_id_str = "test-session-stale-bcdefghij";
let real_session_id = SessionId::new(real_session_id_str.to_string()).unwrap();
insert_test_user(user_id.clone(), "cleanup-test", "Cleanup Test", false)
.await
.unwrap();
insert_test_session(real_session_id, user_id.clone(), "csrf-token-cleanup", 600)
.await
.unwrap();
add_session_to_user_mapping(user_id_str, real_session_id_str)
.await
.unwrap();
add_session_to_user_mapping(user_id_str, stale_session_id_str)
.await
.unwrap();
let before = get_user_session_ids(user_id_str).await.unwrap();
assert_eq!(before.len(), 2);
let valid = cleanup_stale_sessions(user_id_str).await.unwrap();
assert_eq!(valid, vec![real_session_id_str]);
let after = get_user_session_ids(user_id_str).await.unwrap();
assert_eq!(after, vec![real_session_id_str]);
remove_session_from_user_mapping(user_id_str, real_session_id_str)
.await
.unwrap();
}