diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..a344617 --- /dev/null +++ b/tests/test_cli.py @@ -0,0 +1,79 @@ +"""Tests for CLI commands.""" + +from click.testing import CliRunner +import pytest + +from i18n_guardian.cli import main + + +@pytest.fixture +def runner(): + """Create a Click CLI runner.""" + return CliRunner() + + +class TestCLIBasic: + """Basic CLI tests.""" + + def test_version(self, runner): + """Test --version option.""" + result = runner.invoke(main, ["--version"]) + assert result.exit_code == 0 + assert "i18n-guardian" in result.output.lower() + + def test_help(self, runner): + """Test --help option.""" + result = runner.invoke(main, ["--help"]) + assert result.exit_code == 0 + assert "scan" in result.output.lower() + assert "fix" in result.output.lower() + assert "init" in result.output.lower() + assert "check" in result.output.lower() + + +class TestScanCommand: + """Tests for scan command.""" + + def test_scan_no_path(self, runner): + """Test scan without path.""" + result = runner.invoke(main, ["scan"]) + assert result.exit_code == 0 + + def test_scan_with_verbose(self, runner, temp_dir): + """Test scan with verbose flag.""" + result = runner.invoke(main, ["--verbose", "--path", str(temp_dir), "scan"]) + assert result.exit_code == 0 + + def test_scan_output_format(self, runner, temp_dir): + """Test scan with different output formats.""" + for fmt in ["text", "json"]: + result = runner.invoke(main, ["--path", str(temp_dir), "scan", "--output", fmt]) + assert result.exit_code == 0 + + +class TestFixCommand: + """Tests for fix command.""" + + def test_fix_dry_run(self, runner, temp_dir): + """Test fix with dry-run flag.""" + result = runner.invoke(main, ["--path", str(temp_dir), "fix", "--dry-run"]) + assert result.exit_code == 0 + + +class TestInitCommand: + """Tests for init command.""" + + def test_init_output(self, runner, temp_dir): + """Test init command output.""" + output_path = str(temp_dir / ".i18n-guardian.yaml") + result = runner.invoke(main, ["init", "--output", output_path]) + assert result.exit_code == 0 + + +class TestCheckCommand: + """Tests for check command.""" + + def test_check_ci_output(self, runner, temp_dir): + """Test check command with CI options.""" + result = runner.invoke(main, ["--path", str(temp_dir), "check", "--output", "json"]) + assert result.exit_code == 0