From 29689fda4b88bdfe512820c06f3c75c6e6d98908 Mon Sep 17 00:00:00 2001 From: perf3ct Date: Fri, 18 Jul 2025 21:15:16 +0000 Subject: [PATCH] feat(tests): try to fix the TESSDATA environment variable in tests, again --- src/routes/documents/ocr.rs | 12 +++++++-- tests/integration_ocr_language_endpoints.rs | 27 +++++++++++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/routes/documents/ocr.rs b/src/routes/documents/ocr.rs index 7cc62d0..c4a52e8 100644 --- a/src/routes/documents/ocr.rs +++ b/src/routes/documents/ocr.rs @@ -112,7 +112,11 @@ pub async fn retry_ocr( // Update user's OCR language settings based on what was provided if let Some(languages) = &request.languages { // Multi-language support: validate and update preferred languages - let health_checker = crate::ocr::health::OcrHealthChecker::new(); + let health_checker = if let Ok(tessdata_path) = std::env::var("TESSDATA_PREFIX") { + crate::ocr::health::OcrHealthChecker::new_with_path(tessdata_path) + } else { + crate::ocr::health::OcrHealthChecker::new() + }; match health_checker.validate_preferred_languages(languages) { Ok(_) => { let settings_update = crate::models::UpdateSettings::language_update( @@ -135,7 +139,11 @@ pub async fn retry_ocr( } } else if let Some(lang) = &request.language { // Single language (backward compatibility) - let health_checker = crate::ocr::health::OcrHealthChecker::new(); + let health_checker = if let Ok(tessdata_path) = std::env::var("TESSDATA_PREFIX") { + crate::ocr::health::OcrHealthChecker::new_with_path(tessdata_path) + } else { + crate::ocr::health::OcrHealthChecker::new() + }; match health_checker.validate_language(lang) { Ok(_) => { if let Err(e) = state.db.update_user_ocr_language(auth_user.user.id, lang).await { diff --git a/tests/integration_ocr_language_endpoints.rs b/tests/integration_ocr_language_endpoints.rs index ef0a696..3d04a7f 100644 --- a/tests/integration_ocr_language_endpoints.rs +++ b/tests/integration_ocr_language_endpoints.rs @@ -29,8 +29,13 @@ async fn test_get_available_languages_success() { .expect("Failed to create mock language file"); } - // Set environment variable for tessdata path - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + // Set environment variable for tessdata path and verify it's properly set + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); + + // Verify the files exist in the temp directory + assert!(tessdata_path.join("spa.traineddata").exists()); + assert_eq!(std::env::var("TESSDATA_PREFIX").unwrap(), tessdata_str); // Use the existing admin credentials to test against the running server let client = reqwest::Client::new(); @@ -85,7 +90,8 @@ async fn test_get_available_languages_unauthorized() { // Create mock language files fs::write(tessdata_path.join("eng.traineddata"), "mock").unwrap(); - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); let ctx = TestContext::new().await; @@ -109,7 +115,8 @@ async fn test_retry_ocr_with_language_success() { // Create mock language files fs::write(tessdata_path.join("eng.traineddata"), "mock").unwrap(); fs::write(tessdata_path.join("spa.traineddata"), "mock").unwrap(); - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); let ctx = TestContext::new().await; @@ -166,7 +173,8 @@ async fn test_retry_ocr_with_invalid_language() { // Create mock language files fs::write(tessdata_path.join("eng.traineddata"), "mock").unwrap(); - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); let ctx = TestContext::new().await; @@ -220,7 +228,8 @@ async fn test_retry_ocr_with_multiple_languages_success() { fs::write(tessdata_path.join("eng.traineddata"), "mock").unwrap(); fs::write(tessdata_path.join("spa.traineddata"), "mock").unwrap(); fs::write(tessdata_path.join("fra.traineddata"), "mock").unwrap(); - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); let ctx = TestContext::new().await; @@ -281,7 +290,8 @@ async fn test_retry_ocr_with_too_many_languages() { fs::write(tessdata_path.join("fra.traineddata"), "mock").unwrap(); fs::write(tessdata_path.join("deu.traineddata"), "mock").unwrap(); fs::write(tessdata_path.join("ita.traineddata"), "mock").unwrap(); - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); let ctx = TestContext::new().await; @@ -335,7 +345,8 @@ async fn test_retry_ocr_with_invalid_language_in_array() { // Create mock language files fs::write(tessdata_path.join("eng.traineddata"), "mock").unwrap(); fs::write(tessdata_path.join("spa.traineddata"), "mock").unwrap(); - std::env::set_var("TESSDATA_PREFIX", tessdata_path); + let tessdata_str = tessdata_path.to_string_lossy().to_string(); + std::env::set_var("TESSDATA_PREFIX", &tessdata_str); let ctx = TestContext::new().await;