@a2a Feature: A2A local facade wiring to live services As a client of the A2A local facade I want operations to route to real application services So that the facade delegates to live implementations # --------------------------------------------------------------- # Session wiring # --------------------------------------------------------------- Scenario: session.create delegates to SessionService Given a wired A2aLocalFacade with a mock SessionService When I dispatch wired operation "session.create" with params {"actor_name": "local/test-actor"} Then the wired response status should be "ok" And wired response data key "session_id" equals "MOCK-SESSION-001" And wired response data key "status" equals "created" Scenario: session.create with existing session_id is idempotent Given a wired A2aLocalFacade with a mock SessionService When I dispatch wired operation "session.create" with params {"session_id": "EXISTING-SESSION-999"} Then the wired response status should be "ok" And wired response data key "session_id" equals "EXISTING-SESSION-999" And wired response data key "status" equals "created" And the mock SessionService create should not have been called Scenario: session.close delegates to SessionService Given a wired A2aLocalFacade with a mock SessionService When I dispatch wired operation "session.close" with params {"session_id": "MOCK-SESSION-001"} Then the wired response status should be "ok" And wired response data key "status" equals "closed" Scenario: session.close without session_id returns error Given a wired A2aLocalFacade with a mock SessionService When I dispatch wired operation "session.close" with params {} Then the wired response status should be "error" # --------------------------------------------------------------- # Validate session_id at entry — no service scenario (PR #9250) # --------------------------------------------------------------- Scenario: session.close without session_id and no service returns error Given a wired A2aLocalFacade with no services When I dispatch wired operation "session.close" with params {"session_id": ""} Then the wired response status should be "error" # --------------------------------------------------------------- # Plan lifecycle wiring # --------------------------------------------------------------- Scenario: plan.create delegates to PlanLifecycleService Given a wired A2aLocalFacade with a mock PlanLifecycleService When I dispatch wired operation "plan.create" with params {"action_name": "local/test-action"} Then the wired response status should be "ok" And wired response data key "plan_id" equals "MOCK-PLAN-001" And wired response data key "status" equals "created" Scenario: plan.create without action_name returns error Given a wired A2aLocalFacade with a mock PlanLifecycleService When I dispatch wired operation "plan.create" with params {} Then the wired response status should be "error" Scenario: plan.execute delegates to PlanLifecycleService Given a wired A2aLocalFacade with a mock PlanLifecycleService When I dispatch wired operation "plan.execute" with params {"plan_id": "MOCK-PLAN-001"} Then the wired response status should be "ok" And wired response data key "plan_id" equals "MOCK-PLAN-001" Scenario: plan.status delegates to PlanLifecycleService Given a wired A2aLocalFacade with a mock PlanLifecycleService When I dispatch wired operation "plan.status" with params {"plan_id": "MOCK-PLAN-001"} Then the wired response status should be "ok" And wired response data key "plan_id" equals "MOCK-PLAN-001" And wired response data key "phase" equals "strategize" Scenario: plan.diff delegates to PlanLifecycleService Given a wired A2aLocalFacade with a mock PlanLifecycleService When I dispatch wired operation "plan.diff" with params {"plan_id": "MOCK-PLAN-001"} Then the wired response status should be "ok" And wired response data key "plan_id" equals "MOCK-PLAN-001" Scenario: plan.apply delegates to PlanLifecycleService Given a wired A2aLocalFacade with a mock PlanLifecycleService When I dispatch wired operation "plan.apply" with params {"plan_id": "MOCK-PLAN-001"} Then the wired response status should be "ok" And wired response data key "plan_id" equals "MOCK-PLAN-001" # --------------------------------------------------------------- # Registry wiring # --------------------------------------------------------------- Scenario: registry.list_tools delegates to ToolRegistry Given a wired A2aLocalFacade with a mock ToolRegistry When I dispatch wired operation "registry.list_tools" with params {} Then the wired response status should be "ok" And wired response data should contain tools list with 2 items Scenario: registry.list_resources delegates to ResourceRegistryService Given a wired A2aLocalFacade with a mock ResourceRegistryService When I dispatch wired operation "registry.list_resources" with params {} Then the wired response status should be "ok" And wired response data should contain resources list with 1 items # --------------------------------------------------------------- # Context stub # --------------------------------------------------------------- Scenario: context.get returns stub pending ACMS pipeline Given a wired A2aLocalFacade with no services When I dispatch wired operation "context.get" with params {} Then the wired response status should be "ok" And wired response data key "stub" equals "True" # --------------------------------------------------------------- # Event wiring # --------------------------------------------------------------- Scenario: event.subscribe delegates to A2aEventQueue Given a wired A2aLocalFacade with a mock A2aEventQueue When I dispatch wired operation "event.subscribe" with params {} Then the wired response status should be "ok" And wired response data key "status" equals "subscribed" And wired response data key "subscription_id" should not be empty # --------------------------------------------------------------- # Error mapping # --------------------------------------------------------------- Scenario: NOT_FOUND error code for missing resources Given a wired A2aLocalFacade with a raising SessionService for not-found When I dispatch wired operation "session.close" with params {"session_id": "nonexistent"} Then the wired response status should be "error" And wired response error code should be "NOT_FOUND" Scenario: VALIDATION_ERROR code for validation failures Given a wired A2aLocalFacade with a raising service for validation-error When I dispatch wired operation "plan.create" with params {"action_name": "bad"} Then the wired response status should be "error" And wired response error code should be "VALIDATION_ERROR" Scenario: PLAN_ERROR code for plan failures Given a wired A2aLocalFacade with a raising service for plan-error When I dispatch wired operation "plan.execute" with params {"plan_id": "P1"} Then the wired response status should be "error" And wired response error code should be "PLAN_ERROR" Scenario: INVALID_STATE code for business rule violations Given a wired A2aLocalFacade with a raising service for invalid-state When I dispatch wired operation "plan.apply" with params {"plan_id": "P1"} Then the wired response status should be "error" And wired response error code should be "INVALID_STATE" # --------------------------------------------------------------- # Fallback stubs when no service is wired # --------------------------------------------------------------- Scenario: session.create stub when no service wired Given a wired A2aLocalFacade with no services When I dispatch wired operation "session.create" with params {} Then the wired response status should be "ok" And wired response data key "status" equals "created" Scenario: plan.create stub when no service wired Given a wired A2aLocalFacade with no services When I dispatch wired operation "plan.create" with params {} Then the wired response status should be "ok" And wired response data key "status" equals "created" Scenario: registry.list_tools stub when no service wired Given a wired A2aLocalFacade with no services When I dispatch wired operation "registry.list_tools" with params {} Then the wired response status should be "ok" Scenario: event.subscribe stub when no service wired Given a wired A2aLocalFacade with no services When I dispatch wired operation "event.subscribe" with params {} Then the wired response status should be "ok" And wired response data key "status" equals "subscribed"