Files
dev-env-sync/tests/test_cli.py
7000pctAUTO 042265dfe0
Some checks failed
CI / test (push) Has been cancelled
Add tests and example configuration
2026-01-30 04:12:46 +00:00

111 lines
3.6 KiB
Python

"""Unit tests for CLI interface."""
import os
import tempfile
from pathlib import Path
from unittest.mock import patch, MagicMock
import pytest
from click.testing import CliRunner
from dev_env_sync.cli.main import cli, get_default_config_path, load_config
from dev_env_sync import __version__
class TestCLI:
"""Tests for CLI interface."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
def test_version_command(self, runner):
"""Test version command."""
result = runner.invoke(cli, ["version"])
assert result.exit_code == 0
assert __version__ in result.output
def test_platforms_command(self, runner):
"""Test platforms command."""
result = runner.invoke(cli, ["platforms"])
assert result.exit_code == 0
assert "Current Platform" in result.output
assert "Supported Platforms" in result.output
assert "Linux" in result.output
assert "macOS" in result.output
assert "WSL" in result.output
def test_status_command_no_config(self, runner):
"""Test status command without configuration."""
result = runner.invoke(cli, ["status"])
assert result.exit_code == 0
assert "Platform:" in result.output
def test_sync_command_no_config(self, runner):
"""Test sync command without configuration."""
result = runner.invoke(cli, ["sync"])
assert result.exit_code != 0
assert "No configuration file found" in result.output
def test_init_command(self, runner, temp_dir):
"""Test init command."""
output_file = temp_dir / "test-config.yml"
result = runner.invoke(cli, ["init", "-o", str(output_file)])
assert result.exit_code == 0
assert "Sample configuration written to" in result.output
assert output_file.exists()
def test_verbose_flag(self, runner):
"""Test verbose flag."""
result = runner.invoke(cli, ["--verbose", "version"])
assert result.exit_code == 0
def test_dry_run_flag(self, runner, temp_dir):
"""Test dry-run flag with config."""
config_file = temp_dir / ".dev-env-sync.yml"
config_file.write_text('version: "1.0"\nname: "Test"')
with patch('dev_env_sync.cli.main.get_default_config_path', return_value=str(config_file)):
result = runner.invoke(cli, ["--dry-run", "status"])
assert result.exit_code == 0
assert "DRY-RUN MODE" in result.output
class TestConfigPathResolution:
"""Tests for configuration path resolution."""
def test_get_default_config_path_env(self, temp_dir, monkeypatch):
"""Test getting config path from environment variable."""
config_file = temp_dir / "test-config.yml"
config_file.write_text("version: '1.0'")
monkeypatch.setenv("DEV_ENV_SYNC_CONFIG", str(config_file))
path = get_default_config_path()
assert path == str(config_file)
def test_load_config_success(self, sample_config_yaml, temp_dir):
"""Test loading configuration successfully."""
config_file = temp_dir / "config.yml"
config_file.write_text(sample_config_yaml)
config = load_config(str(config_file))
assert config is not None
assert config.version == "1.0"
def test_load_config_nonexistent(self):
"""Test loading nonexistent configuration."""
with pytest.raises(Exception):
load_config("/nonexistent/config.yml")