Skip to content

Commit eff0765

Browse files
committed
test(tools): fill WorkerGet and error-path coverage gaps
WorkerGet had zero test coverage. WorkerAwaitReady and WorkerSendPrompt had only one happy-path test each with no error paths. Added 4 tests: - worker_get_returns_worker_state: WorkerGet fetches correct worker_id/status/cwd - worker_get_on_unknown_id_returns_error: unknown id -> 'worker not found' - worker_await_ready_on_spawning_worker_returns_not_ready: ready=false on spawning worker - worker_send_prompt_on_non_ready_worker_returns_error: sending prompt before ready fails 94 tool tests passing, 0 failing.
1 parent aee5263 commit eff0765

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

rust/crates/tools/src/lib.rs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5656,6 +5656,87 @@ mod tests {
56565656
);
56575657
}
56585658

5659+
#[test]
5660+
fn worker_get_returns_worker_state() {
5661+
let created = execute_tool(
5662+
"WorkerCreate",
5663+
&json!({"cwd": "/tmp/worker-get-test", "trusted_roots": ["/tmp"]}),
5664+
)
5665+
.expect("WorkerCreate should succeed");
5666+
let created_output: serde_json::Value = serde_json::from_str(&created).expect("json");
5667+
let worker_id = created_output["worker_id"].as_str().expect("worker_id");
5668+
5669+
let fetched = execute_tool(
5670+
"WorkerGet",
5671+
&json!({"worker_id": worker_id}),
5672+
)
5673+
.expect("WorkerGet should succeed");
5674+
let fetched_output: serde_json::Value = serde_json::from_str(&fetched).expect("json");
5675+
assert_eq!(fetched_output["worker_id"], worker_id);
5676+
assert_eq!(fetched_output["status"], "spawning");
5677+
assert_eq!(fetched_output["cwd"], "/tmp/worker-get-test");
5678+
}
5679+
5680+
#[test]
5681+
fn worker_get_on_unknown_id_returns_error() {
5682+
let result = execute_tool(
5683+
"WorkerGet",
5684+
&json!({"worker_id": "worker_nonexistent_get_00000000"}),
5685+
);
5686+
assert!(
5687+
result.is_err(),
5688+
"WorkerGet on unknown id should return error"
5689+
);
5690+
assert!(
5691+
result.unwrap_err().contains("worker not found"),
5692+
"error should mention worker not found"
5693+
);
5694+
}
5695+
5696+
#[test]
5697+
fn worker_await_ready_on_spawning_worker_returns_not_ready() {
5698+
let created = execute_tool(
5699+
"WorkerCreate",
5700+
&json!({"cwd": "/tmp/worker-await-not-ready"}),
5701+
)
5702+
.expect("WorkerCreate should succeed");
5703+
let created_output: serde_json::Value = serde_json::from_str(&created).expect("json");
5704+
let worker_id = created_output["worker_id"].as_str().expect("worker_id");
5705+
5706+
// Worker is still in spawning — await_ready should return not-ready snapshot
5707+
let snapshot = execute_tool(
5708+
"WorkerAwaitReady",
5709+
&json!({"worker_id": worker_id}),
5710+
)
5711+
.expect("WorkerAwaitReady should succeed even when not ready");
5712+
let snap_output: serde_json::Value = serde_json::from_str(&snapshot).expect("json");
5713+
assert_eq!(
5714+
snap_output["ready"], false,
5715+
"WorkerAwaitReady on a spawning worker must return ready=false"
5716+
);
5717+
assert_eq!(snap_output["worker_id"], worker_id);
5718+
}
5719+
5720+
#[test]
5721+
fn worker_send_prompt_on_non_ready_worker_returns_error() {
5722+
let created = execute_tool(
5723+
"WorkerCreate",
5724+
&json!({"cwd": "/tmp/worker-send-not-ready"}),
5725+
)
5726+
.expect("WorkerCreate should succeed");
5727+
let created_output: serde_json::Value = serde_json::from_str(&created).expect("json");
5728+
let worker_id = created_output["worker_id"].as_str().expect("worker_id");
5729+
5730+
let result = execute_tool(
5731+
"WorkerSendPrompt",
5732+
&json!({"worker_id": worker_id, "prompt": "too early"}),
5733+
);
5734+
assert!(
5735+
result.is_err(),
5736+
"WorkerSendPrompt on a non-ready worker should fail"
5737+
);
5738+
}
5739+
56595740
#[test]
56605741
fn recovery_loop_state_file_reflects_transitions() {
56615742
// End-to-end proof: .claw/worker-state.json reflects every transition

0 commit comments

Comments
 (0)