We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kpeacocke/souschef'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
"""Unit tests for migration configuration public API functions."""
import json
import pytest
from souschef.assessment import calculate_activity_breakdown
from souschef.migration_config import (
DeploymentTarget,
MigrationConfig,
MigrationStandard,
ValidationTool,
)
@pytest.fixture
def sample_migration_config():
"""Create a sample migration configuration."""
return MigrationConfig(
deployment_target=DeploymentTarget.AWX,
migration_standard=MigrationStandard.STANDARD,
inventory_source="hosts.ini",
validation_tools=[ValidationTool.ANSIBLE_LINT, ValidationTool.MOLECULE],
target_python_version="3.10",
target_ansible_version="2.15+",
)
def test_migration_config_export_to_json(sample_migration_config):
"""Test that migration config can be exported to valid JSON."""
config_dict = sample_migration_config.to_dict()
json_str = json.dumps(config_dict, indent=2)
# Verify JSON is valid
parsed = json.loads(json_str)
assert parsed["deployment_target"] == "awx"
assert parsed["target_python_version"] == "3.10"
assert len(parsed["validation_tools"]) == 2
def test_migration_config_all_fields(sample_migration_config):
"""Test that all configuration fields are accessible."""
assert sample_migration_config.deployment_target == DeploymentTarget.AWX
assert sample_migration_config.migration_standard == MigrationStandard.STANDARD
assert sample_migration_config.inventory_source == "hosts.ini"
assert ValidationTool.ANSIBLE_LINT in sample_migration_config.validation_tools
assert sample_migration_config.target_python_version == "3.10"
assert sample_migration_config.target_ansible_version == "2.15+"
def test_calculate_activity_breakdown_with_valid_cookbook(tmp_path):
"""Test activity breakdown calculation with a valid cookbook."""
# Create a minimal cookbook structure
cookbook_dir = tmp_path / "test_cookbook"
cookbook_dir.mkdir()
# Create metadata.rb
metadata_file = cookbook_dir / "metadata.rb"
metadata_file.write_text("""name 'test_cookbook'
version '1.0.0'
maintainer 'Test'
""")
# Create a recipes directory with a recipe
recipes_dir = cookbook_dir / "recipes"
recipes_dir.mkdir()
recipe_file = recipes_dir / "default.rb"
recipe_file.write_text("""package 'nginx' do
action :install
end
""")
# Call the function
result = calculate_activity_breakdown(str(cookbook_dir), "phased")
# Verify structure
assert "summary" in result
assert "activities" in result
assert "total_manual_hours" in result["summary"]
assert "total_ai_assisted_hours" in result["summary"]
if result["activities"]:
activity = result["activities"][0]
assert "count" in activity
assert "description" in activity
def test_calculate_activity_breakdown_with_invalid_path():
"""Test activity breakdown with invalid cookbook path."""
result = calculate_activity_breakdown("/nonexistent/path", "phased")
# Should return error
assert "error" in result
def test_migration_config_json_structure():
"""Test that exported JSON has all required fields."""
config = MigrationConfig(
deployment_target=DeploymentTarget.NATIVE,
migration_standard=MigrationStandard.FLAT,
inventory_source="inventory.yml",
validation_tools=[ValidationTool.ANSIBLE_LINT],
target_python_version="3.11",
target_ansible_version="2.16+",
)
config_dict = config.to_dict()
# Verify all fields present
assert "deployment_target" in config_dict
assert "migration_standard" in config_dict
assert "inventory_source" in config_dict
assert "validation_tools" in config_dict
assert "target_python_version" in config_dict
assert "target_ansible_version" in config_dict
assert config_dict["deployment_target"] == "native"
assert config_dict["migration_standard"] == "flat"
assert isinstance(config_dict["validation_tools"], list)