Files

78 lines
2.5 KiB
Python

"""Step definitions for main module feature tests."""
import importlib
from unittest.mock import patch
from behave import given, then, when
@given("the CLI main function will return {code:d}")
def step_mock_main_return(context, code):
"""Mock the CLI main function to return a specific code."""
context.mock_main_return = code
@when("I call the run function")
def step_call_run_function(context):
"""Call the run function."""
with patch("cleveragents.__main__.main") as mock_main:
mock_main.return_value = context.mock_main_return
from cleveragents.__main__ import run
context.run_result = run()
@then("the run function should return {code:d}")
def step_check_run_return(context, code):
"""Check the run function return value."""
assert context.run_result == code
@given("the CLI main function will raise an exception")
def step_mock_main_exception(context):
"""Mock the CLI main function to raise an exception."""
context.mock_main_exception = Exception("Test error")
@when("I call the run function expecting an exception")
def step_call_run_with_exception(context):
"""Call the run function expecting an exception."""
context.exception_raised = False
with patch("cleveragents.__main__.main") as mock_main:
mock_main.side_effect = context.mock_main_exception
from cleveragents.__main__ import run
try:
run()
except Exception as e:
context.exception_raised = True
context.raised_exception = e
@then("an exception should be raised")
def step_check_exception_raised(context):
"""Check that an exception was raised."""
assert context.exception_raised, "Expected exception was not raised"
assert str(context.raised_exception) == "Test error"
@when("I import the __main__ module")
def step_import_main_module(context):
"""Import the __main__ module."""
context.main_module = importlib.import_module("cleveragents.__main__")
@then('the module should have a "{attribute}" attribute')
def step_check_module_attribute(context, attribute):
"""Check that the module has a specific attribute."""
assert hasattr(context.main_module, attribute), (
f"Module missing {attribute} attribute"
)
@then('the "{attribute}" attribute should be callable')
def step_check_attribute_callable(context, attribute):
"""Check that an attribute is callable."""
attr = getattr(context.main_module, attribute)
assert callable(attr), f"{attribute} is not callable"