use std::env; use video_processing::VideoProcessingConfig; fn clear_all_env_vars() { let env_vars = [ "FFMPEG_BINARY", "VIDEO_CODEC", "HW_ACCEL", "HW_DEVICE", "FFMPEG_PRESET", "VIDEO_BITRATE", "MAX_BITRATE", "BUFFER_SIZE", "AUDIO_CODEC", "AUDIO_BITRATE", "STABILITY_CHECK_INTERVAL", "STABILITY_REQUIRED_CHECKS", "MAX_STABILITY_WAIT_HOURS", "CREATE_YEAR_MONTH_DIRS", "PRESERVE_ORIGINAL_FILES", "SHOW_TITLE", "CREATE_NFO_FILES" ]; for var in &env_vars { env::remove_var(var); } } #[test] fn test_default_config_values() { clear_all_env_vars(); let config = VideoProcessingConfig::from_env(); // Test default values assert_eq!(config.ffmpeg_binary, "ffmpeg"); assert_eq!(config.video_codec, "av1_qsv"); assert_eq!(config.hw_accel, "qsv"); assert_eq!(config.hw_device, "qsv=hw"); assert_eq!(config.preset, "4"); assert_eq!(config.video_bitrate, "6M"); assert_eq!(config.max_bitrate, "12M"); assert_eq!(config.buffer_size, "24M"); assert_eq!(config.audio_codec, "copy"); assert_eq!(config.audio_bitrate, "192k"); assert_eq!(config.stability_check_interval_secs, 2); assert_eq!(config.stability_required_checks, 15); assert_eq!(config.max_stability_wait_hours, 4); assert!(config.create_year_month_dirs); assert!(config.preserve_original_files); assert_eq!(config.show_title, "Videos"); assert!(config.create_nfo_files); } #[test] fn test_custom_config_values() { clear_all_env_vars(); // Set custom env vars env::set_var("FFMPEG_BINARY", "custom_ffmpeg"); env::set_var("VIDEO_CODEC", "h264"); env::set_var("HW_ACCEL", "nvenc"); env::set_var("HW_DEVICE", "cuda"); env::set_var("FFMPEG_PRESET", "slow"); env::set_var("VIDEO_BITRATE", "10M"); env::set_var("MAX_BITRATE", "20M"); env::set_var("BUFFER_SIZE", "40M"); env::set_var("AUDIO_CODEC", "aac"); env::set_var("AUDIO_BITRATE", "256k"); env::set_var("STABILITY_CHECK_INTERVAL", "5"); env::set_var("STABILITY_REQUIRED_CHECKS", "10"); env::set_var("MAX_STABILITY_WAIT_HOURS", "2"); env::set_var("CREATE_YEAR_MONTH_DIRS", "false"); env::set_var("PRESERVE_ORIGINAL_FILES", "false"); env::set_var("SHOW_TITLE", "Custom Show"); env::set_var("CREATE_NFO_FILES", "false"); let config = VideoProcessingConfig::from_env(); // Test custom values assert_eq!(config.ffmpeg_binary, "custom_ffmpeg"); assert_eq!(config.video_codec, "h264"); assert_eq!(config.hw_accel, "nvenc"); assert_eq!(config.hw_device, "cuda"); assert_eq!(config.preset, "slow"); assert_eq!(config.video_bitrate, "10M"); assert_eq!(config.max_bitrate, "20M"); assert_eq!(config.buffer_size, "40M"); assert_eq!(config.audio_codec, "aac"); assert_eq!(config.audio_bitrate, "256k"); assert_eq!(config.stability_check_interval_secs, 5); assert_eq!(config.stability_required_checks, 10); assert_eq!(config.max_stability_wait_hours, 2); assert!(!config.create_year_month_dirs); assert!(!config.preserve_original_files); assert_eq!(config.show_title, "Custom Show"); assert!(!config.create_nfo_files); // Clean up clear_all_env_vars(); } #[test] fn test_invalid_numeric_values_use_defaults() { clear_all_env_vars(); env::set_var("STABILITY_CHECK_INTERVAL", "invalid"); env::set_var("STABILITY_REQUIRED_CHECKS", "not_a_number"); env::set_var("MAX_STABILITY_WAIT_HOURS", "bad_value"); let config = VideoProcessingConfig::from_env(); // Should fallback to defaults when parsing fails assert_eq!(config.stability_check_interval_secs, 2); assert_eq!(config.stability_required_checks, 15); assert_eq!(config.max_stability_wait_hours, 4); // Clean up clear_all_env_vars(); } #[test] fn test_invalid_boolean_values_use_defaults() { clear_all_env_vars(); env::set_var("CREATE_YEAR_MONTH_DIRS", "maybe"); env::set_var("PRESERVE_ORIGINAL_FILES", "sometimes"); env::set_var("CREATE_NFO_FILES", "invalid"); let config = VideoProcessingConfig::from_env(); // Should fallback to defaults when parsing fails assert!(config.create_year_month_dirs); assert!(config.preserve_original_files); assert!(config.create_nfo_files); // Clean up clear_all_env_vars(); }