dotstate 0.3.3

A modern, secure, and user-friendly dotfile manager built with Rust
Documentation
//! Stress tests for sync validation
//!
//! This module contains property-based tests and fuzzing to find edge cases
//! that could lead to data loss.
//!
//! Note: These are integration tests that test the validation logic indirectly
//! through the public API. For unit tests of validation functions, see
//! `src/utils/sync_validation.rs`

/// Generate path combinations to test edge cases
fn generate_path_combinations() -> Vec<(String, Vec<String>)> {
    vec![
        // Test case 1: Original bug scenario
        (".nvim/init.lua".to_string(), vec![".nvim".to_string()]),
        // Test case 2: Reverse (file then directory)
        (".nvim".to_string(), vec![".nvim/init.lua".to_string()]),
        // Test case 3: Multiple nested files
        (
            ".config/nvim".to_string(),
            vec![
                ".config/nvim/init.lua".to_string(),
                ".config/nvim/lua/config.lua".to_string(),
            ],
        ),
        // Test case 4: Deep nesting
        (
            ".config/nvim/lua/plugins/init.lua".to_string(),
            vec![".config/nvim".to_string()],
        ),
        // Test case 5: Sibling files (should be OK)
        (
            ".nvim/config.lua".to_string(),
            vec![".nvim/init.lua".to_string()],
        ),
        // Test case 6: Path variations
        ("./nvim/init.lua".to_string(), vec![".nvim".to_string()]),
        ("nvim/init.lua".to_string(), vec![".nvim".to_string()]),
        // Test case 7: Multiple synced directories
        (
            ".config/nvim/init.lua".to_string(),
            vec![".config".to_string(), ".local".to_string()],
        ),
    ]
}

/// Test path combination scenarios
///
/// This documents the edge cases we're testing for
#[test]
fn test_path_combination_scenarios() {
    // This test documents the scenarios we test in unit tests
    // Integration tests would verify these through the CLI/TUI API

    let combinations = generate_path_combinations();
    assert!(!combinations.is_empty(), "Should have test combinations");

    // Verify we're testing the critical bug scenario
    let has_bug_scenario = combinations.iter().any(|(path, synced)| {
        path.contains("nvim/init.lua") && synced.iter().any(|s| s.contains("nvim"))
    });
    assert!(has_bug_scenario, "Should test the original bug scenario");
}