40642f0279
- Add ScopeChainResolverExtension protocol to extension_protocols.py - Register scope.chain_resolver as 31st extension point in extension_catalog.py - Implement BDD tests for scope chain resolver registration and invocation - Update extension point count from 30 to 31 - Support custom entity name resolution through pluggable scope resolvers Closes #5705
61 lines
2.3 KiB
Gherkin
61 lines
2.3 KiB
Gherkin
Feature: Scope chain resolver extension registration and invocation
|
|
As a plugin developer
|
|
I want to register custom scope chain resolvers
|
|
So that I can extend entity name resolution with custom logic
|
|
|
|
Background:
|
|
Given the plugin manager is initialized
|
|
And the extension catalog is loaded
|
|
|
|
Scenario: ScopeChainResolverExtension protocol is defined
|
|
When I check the extension protocols
|
|
Then ScopeChainResolverExtension protocol should exist
|
|
And it should have a resolver_name property
|
|
And it should have a can_resolve method
|
|
And it should have a resolve method
|
|
|
|
Scenario: Scope chain resolver extension point is registered
|
|
When I get all extension point definitions
|
|
Then the extension point "scope.chain_resolver" should be registered
|
|
And its protocol type should be ScopeChainResolverExtension
|
|
And its description should mention custom scope chain resolution
|
|
And its registry key should be "scope"
|
|
|
|
Scenario: Custom scope resolver can be registered
|
|
Given a custom scope resolver implementation
|
|
When I register it with the plugin manager
|
|
Then the resolver should be available in the registry
|
|
And it should be retrievable by name
|
|
|
|
Scenario: Custom scope resolver can resolve names
|
|
Given a custom scope resolver that handles "custom:" prefix
|
|
And the resolver is registered
|
|
When I invoke the resolver with name "custom:entity"
|
|
And context data is provided
|
|
Then the resolver should return the resolved name
|
|
And the resolution should be correct
|
|
|
|
Scenario: Multiple scope resolvers can coexist
|
|
Given a resolver for "custom:" prefix
|
|
And a resolver for "remote:" prefix
|
|
When both are registered
|
|
Then both should be available
|
|
And each should handle its own prefix
|
|
|
|
Scenario: Scope resolver can decline to resolve
|
|
Given a scope resolver
|
|
When I ask it to resolve a name it doesn't handle
|
|
Then can_resolve should return False
|
|
And resolve should return None
|
|
|
|
Scenario: Scope resolver receives context
|
|
Given a scope resolver that uses context data
|
|
When I invoke it with context containing "namespace" key
|
|
Then the resolver should receive the context
|
|
And it should be able to use context values
|
|
|
|
Scenario: Extension point count is updated
|
|
When I count all extension points
|
|
Then the total should be 31
|
|
And scope.chain_resolver should be included
|