batch_mode_process_response/
handle_failed_json_repair.rs

1// ---------------- [ File: batch-mode-process-response/src/handle_failed_json_repair.rs ]
2crate::ix!();
3
4pub async fn handle_failed_json_repair(
5    failed_id:       &str,
6    message_content: &BatchMessageContent,
7    workspace:       &dyn BatchWorkspaceInterface,
8
9) -> Result<(), BatchSuccessResponseHandlingError> {
10
11    warn!("handing failed json repair");
12
13    let mut failed_repair_log = workspace.failed_json_repairs_dir().to_path_buf();
14
15    failed_repair_log.push(failed_id);
16
17    let failed_str = message_content.get_sanitized_json_str();
18
19    write_to_file(&failed_repair_log,failed_str).await?;
20
21    Ok(())
22}
23
24#[cfg(test)]
25mod handle_failed_json_repair_tests {
26    use super::*;
27    use futures::executor::block_on;
28    use std::fs;
29
30    #[traced_test]
31    async fn test_handle_failed_json_repair_writes_file() {
32        // We rely on MockBatchWorkspace's ephemeral sandbox to avoid leaving test files around.
33        // We no longer override the `failed_json_repairs_dir`; we want the default ephemeral dir.
34        trace!("===== BEGIN TEST: test_handle_failed_json_repair_writes_file =====");
35        // 1) Create the ephemeral workspace
36        let workspace = BatchWorkspace::new_temp().await.unwrap();
37        info!("Created ephemeral workspace: {:?}", workspace);
38
39        // 2) Clear out the ephemeral `failed_json_repairs_dir()` if it exists
40        let repairs_dir = workspace.failed_json_repairs_dir();
41
42        // 3) Prepare data
43        let failed_id = "failed_request_123";
44        let message_content = BatchMessageContentBuilder::default()
45            .content::<String>("some broken json stuff".into())
46            .build()
47            .unwrap();
48
49        // 4) Invoke the function
50        let result = handle_failed_json_repair(failed_id, &message_content, workspace.as_ref()).await;
51        assert!(result.is_ok(), "handle_failed_json_repair should succeed");
52
53        // 5) Verify the file was actually written into the ephemeral repairs dir
54        let path = repairs_dir.join(failed_id);
55        trace!("Asserting that repair file path exists: {:?}", path);
56        assert!(path.exists(), "Repaired JSON file must exist in ephemeral dir");
57
58        // 6) Verify contents match
59        let written = fs::read_to_string(&path).unwrap();
60        assert_eq!(written, message_content.get_sanitized_json_str());
61
62        trace!("===== END TEST: test_handle_failed_json_repair_writes_file =====");
63    }
64}