use serde_json::Value;
use std::sync::Arc;
use tirea_state::Op;
pub trait ActivityManager: Send + Sync {
fn snapshot(&self, stream_id: &str) -> Value;
fn on_activity_op(&self, stream_id: &str, activity_type: &str, op: &Op);
}
pub struct NoOpActivityManager;
impl ActivityManager for NoOpActivityManager {
fn snapshot(&self, _stream_id: &str) -> Value {
Value::Object(Default::default())
}
fn on_activity_op(&self, _stream_id: &str, _activity_type: &str, _op: &Op) {}
}
impl NoOpActivityManager {
pub fn arc() -> Arc<dyn ActivityManager> {
Arc::new(Self)
}
}
#[cfg(test)]
mod tests {
use crate::testing::{TestFixture, TestFixtureState};
use serde_json::json;
#[test]
fn test_rebuild_state_reflects_write_through() {
let doc = json!({"__test_fixture": {"label": null}});
let fix = TestFixture::new_with_state(doc);
let ctx = fix.ctx_with("call-1", "test");
let ctrl = ctx.state_of::<TestFixtureState>();
ctrl.set_label(Some("test_value".into()))
.expect("failed to set label");
let rebuilt = fix.updated_state();
assert_eq!(
rebuilt["__test_fixture"]["label"], "test_value",
"updated_state must reflect write-through updates"
);
}
}