dir-odt-to-pdf/tests/test_log_level_changes.rs
Jesús Pérex 852df37ffc refactor(tests): improve test logging setup and organization
- Create unit test and integration tests for logs in separate tests
- Centralize temporary log file creation in common.rs
- Remove redundant logging initialization code from common.rs
- Update all test files to handle their own logging initialization
- Add detailed debug logging throughout test execution
- Add log file content display for better test debugging
- Standardize error handling across test files

Changes:
- Create setup_test_log_file() helper in common.rs
- Remove setup_test_logging() and setup_temp_log() functions
- Update test files to use common setup_test_log_file():
  - test_log_detail_macro.rs
  - test_log_timed_macro.rs
  - test_different_log_levels.rs
  - test_init_logging_with_file.rs
  - test_init_logging_append_mode.rs

This change improves test maintainability by:
1. Reducing code duplication
2. Making test behavior more explicit
3. Improving test output for debugging
4. Following single responsibility principle
2025-05-27 00:59:44 +01:00

82 lines
2.6 KiB
Rust

use dir_odt_to_pdf::error::{LogError, ProcessError, Result};
use dir_odt_to_pdf::logging::{LogConfig, init_logging};
use log::{LevelFilter, debug, info};
use std::fs;
#[test]
fn test_log_level_changes() -> Result<()> {
// Create a temporary file for logging
let temp_dir = tempfile::TempDir::new().unwrap();
let log_path = temp_dir.path().join("test.log");
// Initialize logging with Info level first
let config = LogConfig {
log_file: Some(log_path.clone()),
log_level: LevelFilter::Info,
append_log: false,
};
// Initialize logging
init_logging(config)?;
// Write some messages at different levels
debug!("First debug message"); // Should not appear (we're at Info level)
info!("First info message"); // Should appear
// Read the log file
let content = fs::read_to_string(&log_path).map_err(ProcessError::Io)?;
println!("=== Initial Log Contents ===");
println!("{}", content);
println!("=======================");
// Verify initial messages
assert!(
!content.contains("First debug message"),
"Debug message should not appear at Info level"
);
assert!(
content.contains("First info message"),
"Info message should appear"
);
// Try to change log level - this should fail with AlreadyInitialized
let config = LogConfig {
log_file: Some(log_path.clone()),
log_level: LevelFilter::Debug,
append_log: true,
};
match init_logging(config) {
Err(ProcessError::Log(LogError::AlreadyInitialized)) => {
// Expected error
info!("Got expected AlreadyInitialized error");
// Write more messages
debug!("Second debug message"); // Still won't appear (still at Info level)
info!("Second info message"); // Will appear
// Check final log contents
let content = fs::read_to_string(&log_path).map_err(ProcessError::Io)?;
println!("\n=== Final Log Contents ===");
println!("{}", content);
println!("=======================");
// Verify final state
assert!(
!content.contains("Second debug message"),
"Debug messages should still not appear"
);
assert!(
content.contains("Second info message"),
"Info messages should still appear"
);
Ok(())
}
Ok(_) => {
panic!("Expected AlreadyInitialized error, but logger was reinitialized")
}
Err(e) => Err(e),
}
}