use motorcortex_rust::core::Request;
use motorcortex_rust::{ConnectionOptions, StatusCode};
use crate::{CERT_PATH, URL_REQ};
fn opts() -> ConnectionOptions {
ConnectionOptions::new(CERT_PATH.to_string(), 5000, 5000)
}
#[tokio::test]
async fn test_get_session_token_returns_non_empty_string() {
let req = Request::connect_to(URL_REQ, opts())
.await
.expect("connect");
req.login("root", "vectioneer").await.expect("login");
assert!(req.session_token().is_none(), "fresh handle has no token");
let token = req
.get_session_token()
.await
.expect("get_session_token must succeed against the test server");
assert!(
!token.is_empty(),
"server should return a non-empty token, got {token:?}"
);
assert_eq!(
req.session_token().as_deref(),
Some(token.as_str()),
"driver's cached token must match the one returned",
);
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_restore_session_with_valid_token_succeeds() {
let req = Request::connect_to(URL_REQ, opts())
.await
.expect("connect");
req.login("root", "vectioneer").await.expect("login");
let token = req.get_session_token().await.expect("get_session_token");
let status = req
.restore_session(&token)
.await
.expect("restore_session RPC completes");
assert!(
matches!(status, StatusCode::Ok | StatusCode::ReadOnlyMode),
"expected Ok / ReadOnlyMode, got {status:?}"
);
req.disconnect().await.expect("disconnect");
}
#[tokio::test]
async fn test_session_token_cleared_on_disconnect() {
let req = Request::connect_to(URL_REQ, opts())
.await
.expect("connect");
req.login("root", "vectioneer").await.expect("login");
let _ = req
.get_session_token()
.await
.expect("get_session_token");
assert!(req.session_token().is_some());
req.disconnect().await.expect("disconnect");
assert!(
req.session_token().is_none(),
"disconnect must clear the token cache"
);
}