"""Tests for initial prompt data validation.""" import json from pathlib import Path from kg_services.ontology import MCPPrompt def test_initial_prompts_data_structure(): """Test that initial_prompts.json has valid structure.""" prompts_file = Path("data/initial_prompts.json") assert prompts_file.exists(), "initial_prompts.json file should exist" with prompts_file.open() as f: prompts_data = json.load(f) assert isinstance(prompts_data, list), "Prompts data should be a list" assert len(prompts_data) >= 6, "Should have at least 6 diverse prompts" # Check each prompt has required fields required_fields = [ "prompt_id", "name", "description", "target_tool_id", "template_string", "tags", "input_variables", "use_case", "difficulty_level", "example_inputs", ] for prompt_data in prompts_data: for field in required_fields: assert field in prompt_data, f"Prompt missing required field: {field}" # Validate data types assert isinstance(prompt_data["prompt_id"], str) assert isinstance(prompt_data["name"], str) assert isinstance(prompt_data["description"], str) assert isinstance(prompt_data["target_tool_id"], str) assert isinstance(prompt_data["template_string"], str) assert isinstance(prompt_data["tags"], list) assert isinstance(prompt_data["input_variables"], list) assert isinstance(prompt_data["use_case"], str) assert isinstance(prompt_data["difficulty_level"], str) assert isinstance(prompt_data["example_inputs"], dict) def test_initial_prompts_create_mcp_prompt_objects(): """Test that initial prompts data can create valid MCPPrompt objects.""" prompts_file = Path("data/initial_prompts.json") with prompts_file.open() as f: prompts_data = json.load(f) created_prompts = [] for prompt_data in prompts_data: # Should not raise any validation errors prompt = MCPPrompt(**prompt_data) created_prompts.append(prompt) # Verify the object was created correctly assert prompt.prompt_id == prompt_data["prompt_id"] assert prompt.name == prompt_data["name"] assert prompt.description == prompt_data["description"] assert prompt.target_tool_id == prompt_data["target_tool_id"] assert prompt.template_string == prompt_data["template_string"] assert len(created_prompts) == len(prompts_data) def test_initial_prompts_cover_all_tools(): """Test that initial prompts cover all available tools.""" # Load tools data tools_file = Path("data/initial_tools.json") with tools_file.open() as f: tools_data = json.load(f) # Load prompts data prompts_file = Path("data/initial_prompts.json") with prompts_file.open() as f: prompts_data = json.load(f) # Extract tool IDs and target tool IDs tool_ids = {tool["tool_id"] for tool in tools_data} target_tool_ids = {prompt["target_tool_id"] for prompt in prompts_data} # Verify all tools have at least one prompt for tool_id in tool_ids: assert ( tool_id in target_tool_ids ), f"Tool {tool_id} should have at least one prompt" def test_initial_prompts_template_variables(): """Test that prompt templates have valid variable syntax.""" prompts_file = Path("data/initial_prompts.json") with prompts_file.open() as f: prompts_data = json.load(f) for prompt_data in prompts_data: template = prompt_data["template_string"] input_variables = prompt_data["input_variables"] # Check that variables in template match input_variables list import re template_vars = re.findall(r"\{\{(\w+)\}\}", template) for var in template_vars: assert ( var in input_variables ), f"Template variable '{var}' not in input_variables list for prompt {prompt_data['prompt_id']}" # Check that example_inputs cover all input_variables example_inputs = prompt_data["example_inputs"] for var in input_variables: assert ( var in example_inputs ), f"Input variable '{var}' missing from example_inputs for prompt {prompt_data['prompt_id']}" def test_initial_prompts_difficulty_levels(): """Test that prompts have valid difficulty levels.""" prompts_file = Path("data/initial_prompts.json") with prompts_file.open() as f: prompts_data = json.load(f) valid_levels = {"beginner", "intermediate", "advanced"} difficulty_distribution = {"beginner": 0, "intermediate": 0, "advanced": 0} for prompt_data in prompts_data: level = prompt_data["difficulty_level"] assert level in valid_levels, f"Invalid difficulty level: {level}" difficulty_distribution[level] += 1 # Should have prompts at different difficulty levels assert difficulty_distribution["beginner"] > 0, "Should have beginner prompts" assert ( difficulty_distribution["intermediate"] > 0 ), "Should have intermediate prompts" assert difficulty_distribution["advanced"] > 0, "Should have advanced prompts" def test_initial_prompts_unique_ids(): """Test that all prompt IDs are unique.""" prompts_file = Path("data/initial_prompts.json") with prompts_file.open() as f: prompts_data = json.load(f) prompt_ids = [prompt["prompt_id"] for prompt in prompts_data] unique_ids = set(prompt_ids) assert len(prompt_ids) == len(unique_ids), "All prompt IDs should be unique"