Initial commit: Requirements to Gherkin CLI Converter

This commit is contained in:
Bot
2026-02-02 12:15:36 +00:00
commit ec3ea3da33
29 changed files with 2803 additions and 0 deletions

127
tests/test_cli.py Normal file
View File

@@ -0,0 +1,127 @@
"""Tests for the CLI module."""
import pytest
from click.testing import CliRunner
from nl2gherkin.cli.commands import cli, convert, validate
class TestCLI:
"""Test cases for CLI commands."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
def test_cli_help(self, runner):
"""Test CLI help command."""
result = runner.invoke(cli, ["--help"])
assert result.exit_code == 0
assert "convert" in result.output
assert "interactive" in result.output
assert "validate" in result.output
def test_convert_help(self, runner):
"""Test convert command help."""
result = runner.invoke(convert, ["--help"])
assert result.exit_code == 0
assert "INPUT_FILE" in result.output
assert "--output" in result.output
assert "--framework" in result.output
assert "--validate" in result.output
def test_convert_requires_input_file(self, runner):
"""Test that convert requires an input file."""
result = runner.invoke(convert, [])
assert result.exit_code != 0
assert "INPUT_FILE" in result.output or "Missing argument" in result.output
def test_validate_help(self, runner):
"""Test validate command help."""
result = runner.invoke(validate, ["--help"])
assert result.exit_code == 0
assert "GHERKIN_FILE" in result.output
def test_convert_with_sample_requirement(self, runner, tmp_path):
"""Test converting a sample requirement file."""
req_file = tmp_path / "requirements.txt"
req_file.write_text("As a user, I want to login so that I can access my account")
result = runner.invoke(convert, [str(req_file), "--no-validate"])
assert result.exit_code == 0
assert "Feature:" in result.output
assert "Given" in result.output
assert "When" in result.output
assert "Then" in result.output
def test_convert_with_output_file(self, runner, tmp_path):
"""Test converting with output file option."""
req_file = tmp_path / "requirements.txt"
req_file.write_text("As a user, I want to search for products")
output_file = tmp_path / "output.feature"
result = runner.invoke(convert, [
str(req_file),
"--output", str(output_file),
"--no-validate",
])
assert result.exit_code == 0
assert output_file.exists()
content = output_file.read_text()
assert "Feature:" in content
def test_convert_with_different_frameworks(self, runner, tmp_path):
"""Test converting with different BDD frameworks."""
req_file = tmp_path / "requirements.txt"
req_file.write_text("As a user, I want to login")
for framework in ["cucumber", "behave", "pytest-bdd"]:
result = runner.invoke(convert, [
str(req_file),
"--framework", framework,
"--no-validate",
])
assert result.exit_code == 0, f"Failed for framework: {framework}"
def test_validate_valid_gherkin(self, runner, tmp_path):
"""Test validating a valid Gherkin file."""
gherkin_file = tmp_path / "test.feature"
gherkin_file.write_text("""Feature: Test
Scenario: A test scenario
Given a setup
When an action occurs
Then an expected result
""")
result = runner.invoke(validate, [str(gherkin_file)])
assert result.exit_code == 0
def test_ambiguity_check_flag(self, runner, tmp_path):
"""Test that ambiguity check flag produces warnings."""
req_file = tmp_path / "requirements.txt"
req_file.write_text("As a user, I want to do something with some data")
result = runner.invoke(convert, [
str(req_file),
"--ambiguity-check",
"--no-validate",
])
assert result.exit_code == 0
def test_interactive_command_exists(self, runner):
"""Test that interactive command exists."""
result = runner.invoke(cli, ["interactive", "--help"])
assert result.exit_code == 0
assert "--framework" in result.output