Skip to content

Commit 0873760

Browse files
committed
test(coverage): batch 5.3 — socket/manager webhook router paths
- socket/manager.rs: 67.54% (adds set_webhook_router populates/overwrites paths and emit-after-disconnect guard) 3 new deterministic tests. Refs tinyhumansai#530.
1 parent 2e64ddb commit 0873760

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

‎src/openhuman/socket/manager.rs‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,4 +280,36 @@ mod tests {
280280
emit_server_event(&shared, "any.event", json!({}));
281281
assert_eq!(*shared.status.read(), ConnectionStatus::Connected);
282282
}
283+
284+
#[test]
285+
fn set_webhook_router_populates_the_shared_slot() {
286+
let mgr = SocketManager::new();
287+
assert!(mgr.shared.webhook_router.read().is_none());
288+
let router = Arc::new(WebhookRouter::new(None));
289+
mgr.set_webhook_router(router);
290+
assert!(mgr.shared.webhook_router.read().is_some());
291+
}
292+
293+
#[test]
294+
fn set_webhook_router_overwrites_previous_router() {
295+
// Replacing the router is allowed so callers can hot-swap during
296+
// reconfiguration — this test nails that observable behaviour down.
297+
let mgr = SocketManager::new();
298+
mgr.set_webhook_router(Arc::new(WebhookRouter::new(None)));
299+
let second = Arc::new(WebhookRouter::new(None));
300+
let second_ptr = Arc::as_ptr(&second);
301+
mgr.set_webhook_router(Arc::clone(&second));
302+
let stored = mgr.shared.webhook_router.read().clone().unwrap();
303+
assert!(std::ptr::eq(Arc::as_ptr(&stored), second_ptr));
304+
}
305+
306+
#[tokio::test]
307+
async fn emit_after_disconnect_errors_not_connected() {
308+
// Even without ever calling connect(), the disconnect() call path
309+
// leaves the emit channel torn down — and emit() must reject.
310+
let mgr = SocketManager::new();
311+
mgr.disconnect().await.unwrap();
312+
let err = mgr.emit("x", json!({})).await.unwrap_err();
313+
assert_eq!(err, "Not connected");
314+
}
283315
}

0 commit comments

Comments
 (0)