- Remove session-ses_2f27.md (161KB raw session log) - Remove 49 ROOT_* duplicate files across REFERENCE/ - Remove 14 duplicate files between REFERENCE/ root and history/ - Remove asr_legacy.rs (dead code, replaced by asr.rs) - Remove src/core/worker/ (duplicate JobWorker) - Remove src/core/layers/ (empty directory) - Remove 4 .bak files in src/ - Remove 7 dead private methods in worker/processor.rs - Remove backup directory from git tracking
205 lines
6.0 KiB
Rust
205 lines
6.0 KiB
Rust
use chrono::NaiveDateTime;
|
|
use momentry_core::core::config;
|
|
use momentry_core::core::db::redis_client::ProcessorStatus;
|
|
use momentry_core::core::db::{JobErrorMessage, MonitorJobRedis, ProgressData, ProgressMessage};
|
|
use momentry_core::core::db::{MonitorJob, MonitorJobStats, MonitorJobStatus};
|
|
|
|
#[test]
|
|
fn test_config_database_url() {
|
|
let url = config::DATABASE_URL.as_str();
|
|
assert!(url.starts_with("postgres://"));
|
|
assert!(url.contains("localhost"));
|
|
assert!(url.contains("momentry"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_config_redis_url() {
|
|
let url = config::REDIS_URL.as_str();
|
|
assert!(url.starts_with("redis://"));
|
|
assert!(url.contains("localhost"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_config_output_dir() {
|
|
let dir = config::OUTPUT_DIR.as_str();
|
|
assert!(dir.contains("momentry"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_config_python_path() {
|
|
let path = config::PYTHON_PATH.as_str();
|
|
assert!(path.contains("python"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_config_processor_timeouts() {
|
|
assert!(*config::processor::ASR_TIMEOUT_SECS >= 60);
|
|
assert!(*config::processor::CUT_TIMEOUT_SECS >= 60);
|
|
assert!(*config::processor::DEFAULT_TIMEOUT_SECS >= 60);
|
|
}
|
|
|
|
#[test]
|
|
fn test_monitor_job_redis_serialization() {
|
|
let job = MonitorJobRedis {
|
|
uuid: "test-uuid-123".to_string(),
|
|
status: "running".to_string(),
|
|
current_processor: "asr".to_string(),
|
|
progress_total: 100,
|
|
progress_current: 50,
|
|
error_count: 0,
|
|
started_at: "2024-01-01T10:00:00Z".to_string(),
|
|
updated_at: "2024-01-01T10:05:00Z".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&job).unwrap();
|
|
assert!(json.contains("test-uuid-123"));
|
|
assert!(json.contains("running"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_monitor_job_redis_deserialization() {
|
|
let json = r#"{
|
|
"uuid": "abc123",
|
|
"status": "completed",
|
|
"current_processor": "yolo",
|
|
"progress_total": 100,
|
|
"progress_current": 100,
|
|
"error_count": 2,
|
|
"started_at": "2024-01-01T10:00:00Z",
|
|
"updated_at": "2024-01-01T10:30:00Z"
|
|
}"#;
|
|
|
|
let job: MonitorJobRedis = serde_json::from_str(json).unwrap();
|
|
assert_eq!(job.uuid, "abc123");
|
|
assert_eq!(job.status, "completed");
|
|
assert_eq!(job.current_processor, "yolo");
|
|
}
|
|
|
|
#[test]
|
|
fn test_job_error_message_serialization() {
|
|
let error = JobErrorMessage {
|
|
uuid: "xyz789".to_string(),
|
|
error: "Processing failed: invalid input".to_string(),
|
|
timestamp: 1704067200,
|
|
};
|
|
|
|
let json = serde_json::to_string(&error).unwrap();
|
|
assert!(json.contains("xyz789"));
|
|
assert!(json.contains("Processing failed"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_progress_message_serialization() {
|
|
let progress = ProgressMessage {
|
|
msg_type: "progress".to_string(),
|
|
processor: "asr".to_string(),
|
|
uuid: "test-uuid".to_string(),
|
|
timestamp: 1704067200,
|
|
data: ProgressData {
|
|
message: Some("Processing segment 5".to_string()),
|
|
current: Some(5),
|
|
total: Some(100),
|
|
},
|
|
};
|
|
|
|
let json = serde_json::to_string(&progress).unwrap();
|
|
assert!(json.contains("progress"));
|
|
assert!(json.contains("asr"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_processor_status_serialization() {
|
|
let status = ProcessorStatus {
|
|
status: "running".to_string(),
|
|
progress: 50,
|
|
current: 50,
|
|
total: 100,
|
|
started_at: "2024-01-01T10:00:00Z".to_string(),
|
|
updated_at: "2024-01-01T10:05:00Z".to_string(),
|
|
message: "Processing".to_string(),
|
|
};
|
|
|
|
let json = serde_json::to_string(&status).unwrap();
|
|
assert!(json.contains("running"));
|
|
assert!(json.contains("50"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_monitor_job_stats_serialization() {
|
|
let stats = MonitorJobStats {
|
|
pending: 5,
|
|
running: 2,
|
|
completed: 100,
|
|
failed: 3,
|
|
};
|
|
|
|
let json = serde_json::to_string(&stats).unwrap();
|
|
assert!(json.contains("\"pending\":5"));
|
|
assert!(json.contains("\"completed\":100"));
|
|
}
|
|
|
|
#[test]
|
|
fn test_monitor_job_status_all_variants() {
|
|
let statuses = vec![
|
|
(MonitorJobStatus::Pending, "pending"),
|
|
(MonitorJobStatus::Running, "running"),
|
|
(MonitorJobStatus::Completed, "completed"),
|
|
(MonitorJobStatus::Failed, "failed"),
|
|
(MonitorJobStatus::Cancelled, "cancelled"),
|
|
];
|
|
|
|
for (status, expected_str) in statuses {
|
|
assert_eq!(status.as_str(), expected_str);
|
|
assert_eq!(MonitorJobStatus::from_db_str(expected_str), Some(status));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_monitor_job_status_roundtrip() {
|
|
let original = MonitorJobStatus::Running;
|
|
let json = serde_json::to_string(&original).unwrap();
|
|
let parsed: MonitorJobStatus = serde_json::from_str(&json).unwrap();
|
|
assert_eq!(original, parsed);
|
|
}
|
|
|
|
#[test]
|
|
fn test_monitor_job_full_roundtrip() {
|
|
let original = MonitorJob {
|
|
id: 42,
|
|
uuid: "full-test-123".to_string(),
|
|
video_path: Some("/path/to/video.mp4".to_string()),
|
|
status: MonitorJobStatus::Running,
|
|
current_processor: Some("ocr".to_string()),
|
|
progress_total: 200,
|
|
progress_current: 150,
|
|
error_count: 1,
|
|
last_error: Some("Minor warning".to_string()),
|
|
started_at: Some(
|
|
chrono::DateTime::parse_from_rfc3339("2024-01-01T10:00:00Z")
|
|
.unwrap()
|
|
.into(),
|
|
),
|
|
updated_at: Some(
|
|
chrono::DateTime::parse_from_rfc3339("2024-01-01T10:30:00Z")
|
|
.unwrap()
|
|
.into(),
|
|
),
|
|
created_at: chrono::DateTime::parse_from_rfc3339("2024-01-01T09:55:00Z")
|
|
.unwrap()
|
|
.into(),
|
|
processors: vec![],
|
|
completed_processors: vec![],
|
|
failed_processors: vec![],
|
|
video_id: None,
|
|
};
|
|
|
|
let json = serde_json::to_string(&original).unwrap();
|
|
let parsed: MonitorJob = serde_json::from_str(&json).unwrap();
|
|
|
|
assert_eq!(parsed.id, original.id);
|
|
assert_eq!(parsed.uuid, original.uuid);
|
|
assert_eq!(parsed.status, original.status);
|
|
assert_eq!(parsed.progress_current, original.progress_current);
|
|
assert_eq!(parsed.error_count, original.error_count);
|
|
}
|