This change removes the legacy logs/ directory and consolidates all session data, error logs, and discovery files under the .g3/ directory. New directory structure: - .g3/sessions/<session_id>/session.json - session logs - .g3/errors/ - error logs (was logs/errors/) - .g3/background_processes/ - background process logs - .g3/discovery/ - planner discovery files (was workspace/logs/) Changes: - paths.rs: Remove get_logs_dir()/logs_dir(), add get_errors_dir(), get_background_processes_dir(), get_discovery_dir() - session.rs: Anonymous sessions now use .g3/sessions/anonymous_<ts>/ - error_handling.rs: Errors now saved to .g3/errors/ - project.rs: Remove logs_dir() and ensure_logs_dir() methods - feedback_extraction.rs: Remove logs_dir field and fallback logic - planner: Use .g3/ for workspace data and .g3/discovery/ for reports - flock.rs: Look for session metrics in .g3/sessions/ - coach_feedback.rs: Remove fallback to logs/ path - Update all tests to use new paths - Update README.md and .gitignore
63 lines
2.3 KiB
Rust
63 lines
2.3 KiB
Rust
//! Integration tests for logging functionality
|
|
|
|
use std::fs;
|
|
use std::path::Path;
|
|
|
|
#[test]
|
|
fn test_log_files_created() {
|
|
// This test verifies that the logging functions work correctly
|
|
// by checking that files can be created in the discovery directory
|
|
|
|
// Clean up any existing test discovery dir
|
|
let _ = fs::remove_dir_all(".g3/discovery");
|
|
|
|
// Create discovery directory
|
|
fs::create_dir_all(".g3/discovery").expect("Failed to create discovery directory");
|
|
|
|
// Verify directory exists
|
|
assert!(Path::new(".g3/discovery").exists());
|
|
assert!(Path::new(".g3/discovery").is_dir());
|
|
|
|
// Test writing a code report
|
|
let test_report = "Test codebase report\nLine 2\nLine 3";
|
|
let timestamp = chrono::Local::now().format("%Y%m%d_%H%M%S").to_string();
|
|
let report_filename = format!(".g3/discovery/code_report_{}.log", timestamp);
|
|
|
|
fs::write(&report_filename, test_report).expect("Failed to write code report");
|
|
assert!(Path::new(&report_filename).exists());
|
|
|
|
let content = fs::read_to_string(&report_filename).expect("Failed to read code report");
|
|
assert_eq!(content, test_report);
|
|
|
|
// Test writing discovery commands
|
|
let commands_filename = format!(".g3/discovery/discovery_commands_{}.log", timestamp);
|
|
let test_commands =
|
|
"# Discovery Commands\n# Generated by g3-planner\n\nls -la\ncat README.md\n";
|
|
|
|
fs::write(&commands_filename, test_commands).expect("Failed to write discovery commands");
|
|
assert!(Path::new(&commands_filename).exists());
|
|
|
|
let content =
|
|
fs::read_to_string(&commands_filename).expect("Failed to read discovery commands");
|
|
assert_eq!(content, test_commands);
|
|
|
|
// Clean up
|
|
let _ = fs::remove_file(&report_filename);
|
|
let _ = fs::remove_file(&commands_filename);
|
|
}
|
|
|
|
#[test]
|
|
fn test_filename_format() {
|
|
// Verify the filename format matches the tool_calls log format
|
|
let timestamp = chrono::Local::now().format("%Y%m%d_%H%M%S").to_string();
|
|
|
|
// Check format: YYYYMMDD_HHMMSS
|
|
assert_eq!(timestamp.len(), 15); // 8 digits + underscore + 6 digits
|
|
assert!(timestamp.contains('_'));
|
|
|
|
let parts: Vec<&str> = timestamp.split('_').collect();
|
|
assert_eq!(parts.len(), 2);
|
|
assert_eq!(parts[0].len(), 8); // YYYYMMDD
|
|
assert_eq!(parts[1].len(), 6); // HHMMSS
|
|
}
|