gitorii 0.1.8

A human-first Git client with simplified commands, snapshots, multi-platform mirrors and built-in secret scanning
# Torii Testing Guide

## Test Suite Overview

Torii includes comprehensive unit and integration tests to ensure all features work correctly.

## Running Tests

```bash
# Run all tests
cargo test --release

# Run specific test suite
cargo test --release --test integration_test

# Run specific test
cargo test --release test_snapshot_create_and_list

# Run with output
cargo test --release -- --nocapture
```

## Test Coverage

### Unit Tests (in source files)

#### Duration Parser (`src/duration.rs`)
- ✅ Simple formats: `10m`, `2h`, `1d`
- ✅ Combined formats: `1h30m`, `2d6h30m`
- ✅ With spaces: `1h 30m`
- ✅ Duration formatting: converts minutes to human-readable format

#### SSH Helper (`src/ssh.rs`)
- ✅ SSH directory detection
- ✅ Protocol recommendation based on SSH key availability

#### CI/CD Parser (`src/ci/parser.rs`)
- ✅ Parse simple `.torii-ci.yml` configuration
- ✅ Validate missing job dependencies

### Integration Tests (`tests/integration_test.rs`)

#### Snapshot Management
- **test_snapshot_create_and_list**: Create snapshot and verify it appears in list
-**test_snapshot_restore**: Create snapshot, make changes, restore to previous state
-**test_snapshot_delete**: Create and delete snapshot

#### CI/CD Superlanguage
- **test_ci_validate**: Validate `.torii-ci.yml` configuration
-**test_ci_generate_github**: Generate GitHub Actions workflow
-**test_ci_generate_gitlab**: Generate GitLab CI configuration

#### Mirror Management
- **test_mirror_config**: Add mirror and verify configuration

#### SSH
- **test_ssh_check**: Verify SSH check command runs

## Test Results

```
Running unittests src/main.rs
running 6 tests
test ci::parser::tests::test_parse_simple_config ... ok
test ci::parser::tests::test_validate_missing_dependency ... ok
test duration::tests::test_format_duration ... ok
test duration::tests::test_parse_duration ... ok
test ssh::tests::test_recommend_protocol ... ok
test ssh::tests::test_ssh_dir ... ok

test result: ok. 6 passed; 0 failed

Running tests/integration_test.rs
running 8 tests
test test_ci_generate_github ... ok
test test_ci_generate_gitlab ... ok
test test_ci_validate ... ok
test test_mirror_config ... ok
test test_snapshot_create_and_list ... ok
test test_snapshot_delete ... ok
test test_snapshot_restore ... ok
test test_ssh_check ... ok

test result: ok. 8 passed; 0 failed
```

**Total: 14 tests, 100% passing** ✅

## Test Architecture

### Unit Tests
Located in the same file as the code they test, using `#[cfg(test)]` modules.

**Example:**
```rust
#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_parse_duration() {
        assert_eq!(parse_duration("10m").unwrap(), 10);
        assert_eq!(parse_duration("1h30m").unwrap(), 90);
    }
}
```

### Integration Tests
Located in `tests/` directory, test the CLI as a black box.

**Key helper functions:**
- `create_test_repo()`: Creates a temporary git repository for testing
- `torii_bin()`: Returns path to compiled torii binary

## Adding New Tests

### Unit Test
Add to the relevant source file:

```rust
#[test]
fn test_new_feature() {
    // Test code here
}
```

### Integration Test
Add to `tests/integration_test.rs`:

```rust
#[test]
fn test_new_cli_feature() {
    let (_temp_dir, repo_path) = create_test_repo();
    
    let output = Command::new(torii_bin())
        .args(&["your", "command"])
        .current_dir(&repo_path)
        .output()
        .unwrap();
    
    assert!(output.status.success());
}
```

## Continuous Integration

Tests are designed to run in CI environments:
- No external dependencies required
- Uses temporary directories
- Cleans up after itself
- Fast execution (< 1 second total)

## Test Coverage by Feature

| Feature | Unit Tests | Integration Tests | Status |
|---------|-----------|-------------------|--------|
| Duration Parser || - | 100% |
| SSH Detection ||| 100% |
| Snapshots | - || 100% |
| CI/CD Parser ||| 100% |
| CI/CD Transpiler | - || 100% |
| Mirrors | - || Partial |
| Core Git Ops | - | - | Manual |

## Known Limitations

1. **Mirror sync tests**: Require actual git remotes, tested manually
2. **Autofetch tests**: Time-based, tested manually
3. **SSH authentication**: Requires real SSH keys, tested manually

## Manual Testing Checklist

For features that can't be fully automated:

- [ ] Mirror sync to real GitHub/GitLab repositories
- [ ] SSH authentication with real keys
- [ ] Autofetch with real intervals
- [ ] Large repository performance
- [ ] Error handling with invalid inputs

## Debugging Failed Tests

```bash
# Run with backtrace
RUST_BACKTRACE=1 cargo test --release

# Run specific test with output
cargo test --release test_name -- --nocapture

# Check test binary directly
./target/release/deps/integration_test-* --list
```

## Performance

All tests complete in under 1 second:
- Unit tests: ~0.01s
- Integration tests: ~0.05s
- Total: ~0.06s

## Future Test Additions

- [ ] Performance benchmarks
- [ ] Stress tests with large repositories
- [ ] Concurrent operation tests
- [ ] Network failure simulation
- [ ] Cross-platform tests (Windows, macOS, Linux)