use tempfile::TempDir;
use super::manager::ManagedError;
use super::record::{ManagedSessionId, ManagedSessionState};
use super::tests::{make_manager, seed_record};
#[tokio::test]
async fn delete_record_removes_from_store() {
let dir = TempDir::new().unwrap();
let (mgr, _fake) = make_manager(&dir).await;
let id = ManagedSessionId::new();
seed_record(&mgr, &dir, id, ManagedSessionState::Stopped, false).await;
mgr.delete_record(&id, false).await.expect("delete");
assert!(matches!(
mgr.get(&id).await,
Err(ManagedError::SessionNotFound(_))
));
}
#[tokio::test]
async fn delete_record_refuses_running_without_force() {
let dir = TempDir::new().unwrap();
let (mgr, _fake) = make_manager(&dir).await;
let id = ManagedSessionId::new();
seed_record(&mgr, &dir, id, ManagedSessionState::Active, false).await;
let err = mgr
.delete_record(&id, false)
.await
.expect_err("must refuse to delete a running session without --force");
assert!(
matches!(err, ManagedError::InvalidState(ref sid, _) if sid == &id.to_string()),
"expected InvalidState for {id}, got: {err:?}"
);
let still_there = mgr.get(&id).await.expect("record must still exist");
assert_eq!(still_there.state, ManagedSessionState::Active);
}
#[tokio::test]
async fn delete_record_force_bypasses_running_guard() {
let dir = TempDir::new().unwrap();
let (mgr, _fake) = make_manager(&dir).await;
let id = ManagedSessionId::new();
seed_record(&mgr, &dir, id, ManagedSessionState::Active, false).await;
mgr.delete_record(&id, true)
.await
.expect("--force must bypass the running guard");
assert!(matches!(
mgr.get(&id).await,
Err(ManagedError::SessionNotFound(_))
));
}
#[tokio::test]
async fn delete_record_never_touches_workspace_dir() {
let dir = TempDir::new().unwrap();
let (mgr, _fake) = make_manager(&dir).await;
let id = ManagedSessionId::new();
let ws = seed_record(&mgr, &dir, id, ManagedSessionState::Stopped, false).await;
assert!(ws.exists(), "test invariant: workspace dir must pre-exist");
mgr.delete_record(&id, false).await.expect("delete");
assert!(
matches!(mgr.get(&id).await, Err(ManagedError::SessionNotFound(_))),
"record must be gone from the store"
);
assert!(
ws.exists(),
"workspace directory must NOT be removed by delete_record (store-only op)"
);
}