use tempfile::TempDir;
use super::manager::ManagedError;
use super::record::ManagedSessionState;
use super::tests::make_manager;
#[tokio::test]
async fn mark_reactivated_flips_stopped_to_active() {
let dir = TempDir::new().unwrap();
let workspace_dir = TempDir::new().unwrap();
let (mgr, fake) = make_manager(&dir).await;
let record = mgr
.create(
"task".into(),
Some(workspace_dir.path().to_owned()),
None,
Some(workspace_dir.path().to_owned()),
None,
None,
)
.await
.expect("create");
mgr.stop(&record.id).await.expect("stop");
let kill_calls_before = fake.kill_calls.lock().unwrap().len();
let create_calls_before = fake.create_cwd_calls.lock().unwrap().len();
let reactivated = mgr.mark_reactivated(&record.id).await.expect("reactivate");
assert_eq!(
reactivated.state,
ManagedSessionState::Active,
"mark_reactivated must flip Stopped -> Active"
);
assert_eq!(
fake.kill_calls.lock().unwrap().len(),
kill_calls_before,
"mark_reactivated must NEVER call kill_session (#2023 C)"
);
assert_eq!(
fake.create_cwd_calls.lock().unwrap().len(),
create_calls_before,
"mark_reactivated must NEVER call create_session (#2023 C)"
);
let after = mgr.get(&record.id).await.unwrap();
assert_eq!(after.state, ManagedSessionState::Active);
}
#[tokio::test]
async fn mark_reactivated_rejects_non_stopped() {
let dir = TempDir::new().unwrap();
let workspace_dir = TempDir::new().unwrap();
let (mgr, _fake) = make_manager(&dir).await;
let record = mgr
.create(
"task".into(),
Some(workspace_dir.path().to_owned()),
None,
Some(workspace_dir.path().to_owned()),
None,
None,
)
.await
.expect("create");
mgr.stop(&record.id).await.expect("stop");
mgr.mark_reactivated(&record.id)
.await
.expect("first reactivate");
let err = mgr
.mark_reactivated(&record.id)
.await
.expect_err("reactivating an already-Active session must fail");
assert!(
matches!(err, ManagedError::InvalidState(_, _)),
"expected InvalidState, got {err:?}"
);
}