8f986c1e31
Additional BDD scenarios covering registry resolver errors, cache TTL expiry, runtime dispatch normalization, template base edge cases, validation actor coverage gaps, and YAML Jinja loader deferred rendering.
171 lines
7.6 KiB
Gherkin
171 lines
7.6 KiB
Gherkin
Feature: Template Parameter Validation and Variable Rendering
|
|
As a developer
|
|
I want template parameters to be validated across all types and template variables to render correctly in strings, dicts, lists, and conditionals
|
|
So that template definitions produce correct agent configurations with proper parameter validation
|
|
|
|
Background:
|
|
Given I have a clean test environment for templates
|
|
|
|
Scenario: Test TemplateType enum functionality
|
|
When I access all TemplateType enum values
|
|
Then all template types should be available
|
|
And enum values should have correct string representations
|
|
|
|
Scenario: Test TemplateParameter creation and validation - string type
|
|
Given I have a string template parameter with default value
|
|
When I validate different string values
|
|
Then string validation should work correctly
|
|
And default values should be used when None
|
|
|
|
Scenario: Test TemplateParameter validation - int type
|
|
Given I have an integer template parameter
|
|
When I validate integer values including conversions
|
|
Then integer validation should work correctly
|
|
And invalid integers should raise errors
|
|
|
|
Scenario: Test TemplateParameter validation - float type
|
|
Given I have a float template parameter
|
|
When I validate float values including conversions
|
|
Then float validation should work correctly
|
|
|
|
Scenario: Test TemplateParameter validation - boolean type
|
|
Given I have a boolean template parameter
|
|
When I validate boolean values including string conversions
|
|
Then boolean validation should work correctly
|
|
And string boolean values should convert properly
|
|
|
|
Scenario: Test TemplateParameter validation - enum type
|
|
Given I have an enum template parameter with allowed values
|
|
When I validate enum values
|
|
Then valid enum values should pass
|
|
And invalid enum values should raise errors
|
|
|
|
Scenario: Test TemplateParameter validation - list type
|
|
Given I have a list template parameter
|
|
When I validate list values including single value conversion
|
|
Then list validation should work correctly
|
|
And single values should convert to lists
|
|
|
|
Scenario: Test TemplateParameter validation - dict and reference types
|
|
Given I have parameters of different reference types
|
|
When I validate dict, agent_ref, and component_ref values
|
|
Then reference type validation should work correctly
|
|
|
|
Scenario: Test TemplateParameter required parameter validation
|
|
Given I have a required template parameter
|
|
When I validate with None value
|
|
Then a ValueError should be raised for missing required parameter
|
|
|
|
Scenario: Test ComponentReference creation and basic functionality
|
|
Given I have component references of different types
|
|
When I create ComponentReference instances
|
|
Then component references should be created correctly
|
|
And reference properties should be accessible
|
|
|
|
Scenario: Test InstantiationContext creation and component management
|
|
Given I have an InstantiationContext
|
|
When I add components of different types
|
|
Then components should be stored correctly
|
|
And component retrieval should work
|
|
|
|
Scenario: Test InstantiationContext with parent context
|
|
Given I have a parent InstantiationContext with components
|
|
And I have a child context
|
|
When I try to resolve references in child context
|
|
Then child context should check parent for references
|
|
|
|
Scenario: Test InstantiationContext reference resolution
|
|
Given I have an InstantiationContext with components
|
|
When I resolve component references
|
|
Then existing references should be resolved correctly
|
|
And missing references should return None
|
|
|
|
Scenario: Test InstantiationContext pending reference handling
|
|
Given I have an InstantiationContext
|
|
When I resolve references that don't exist yet
|
|
Then references should be added to pending list
|
|
And resolve_pending should handle unresolved references
|
|
|
|
Scenario: Test InstantiationContext get_all_components
|
|
Given I have an InstantiationContext with various components
|
|
When I get all components
|
|
Then a deep copy of all components should be returned
|
|
|
|
Scenario: Test BaseTemplate parameter parsing - dict format
|
|
Given I have a template definition with dict format parameters
|
|
When I create a BaseTemplate instance
|
|
Then parameters should be parsed correctly from dict format
|
|
|
|
Scenario: Test BaseTemplate parameter parsing - list format
|
|
Given I have a template definition with list format parameters
|
|
When I create a BaseTemplate instance
|
|
Then parameters should be parsed correctly from list format
|
|
|
|
Scenario: Test BaseTemplate parameter parsing - mixed formats
|
|
Given I have a template definition with mixed parameter formats
|
|
When I create a BaseTemplate instance
|
|
Then all parameter formats should be parsed correctly
|
|
|
|
Scenario: Test BaseTemplate validate_params functionality
|
|
Given I have a BaseTemplate with various parameter types
|
|
When I validate parameters with different values
|
|
Then parameter validation should work correctly
|
|
And extra parameters should be included
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - string templates
|
|
Given I have a BaseTemplate instance
|
|
When I apply template variables to string templates
|
|
Then Jinja2 templates should be rendered correctly
|
|
And boolean strings should convert to boolean values
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - JSON parsing
|
|
Given I have a BaseTemplate instance
|
|
When I apply template variables that result in JSON-like strings
|
|
Then JSON structures should be parsed correctly
|
|
And malformed JSON should fall back to string
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - number parsing
|
|
Given I have a BaseTemplate instance
|
|
When I apply template variables that result in numbers
|
|
Then integers and floats should be parsed correctly
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - dict processing
|
|
Given I have a BaseTemplate instance
|
|
When I apply template variables to dictionary structures
|
|
Then dictionary keys and values should be processed recursively
|
|
And None values should be filtered out
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - conditional blocks
|
|
Given I have a BaseTemplate instance with conditional blocks
|
|
When I apply template variables to conditional structures
|
|
Then conditional blocks should be evaluated correctly
|
|
And false conditions should return None
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - list processing
|
|
Given I have a BaseTemplate instance
|
|
When I apply template variables to list structures
|
|
Then list items should be processed recursively
|
|
And None values should be filtered from lists
|
|
|
|
Scenario: Test BaseTemplate _apply_template_vars - error handling
|
|
Given I have a BaseTemplate instance
|
|
When I apply template variables with invalid templates
|
|
Then template errors should be handled gracefully
|
|
And original values should be returned on error
|
|
|
|
Scenario: Test BaseTemplate _merge_params functionality
|
|
Given I have a BaseTemplate instance
|
|
When I merge parameter dictionaries with overrides
|
|
Then parameters should be merged correctly
|
|
And override values should be template-processed
|
|
|
|
Scenario: Test error conditions and edge cases
|
|
Given I have various edge case scenarios
|
|
When I test error conditions
|
|
Then appropriate errors should be raised
|
|
And edge cases should be handled correctly
|
|
|
|
Scenario: GenericTemplate wraps non-dict result in definition key
|
|
When I instantiate a GenericTemplate whose applied vars produce a non-dict result
|
|
Then the result should be a dict with definition key wrapping the non-dict value
|