Initial commit: Requirements to Gherkin CLI Converter
This commit is contained in:
127
tests/test_cli.py
Normal file
127
tests/test_cli.py
Normal 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
|
||||
Reference in New Issue
Block a user