Files
cleveragents-core/features/actor_config_coverage.feature
brent.edwards 17fe46d925 test(behave): fix behave tests
There had been over 100 behave tests failing. There should be none failing now.
2026-02-12 04:47:02 +00:00

197 lines
8.0 KiB
Gherkin

Feature: Actor configuration uncovered lines coverage
As a developer maintaining actor configuration parsing
I want robust coverage for actor config edge cases
So that failures and overrides are validated
# TODO: Uncomment when step definitions are implemented
# Background:
# Given an isolated actor config workspace
#
# Scenario: Missing config file surfaces helpful error
# When I load the actor config blob from "missing.json"
# Then a ValueError should be raised containing "Config file not found"
#
# Scenario: YAML dependency absence surfaces requirement
# Given PyYAML parsing is unavailable for actor config
# And an actor config file "missing.yaml" with content:
# """
# provider: openai
# """
# When I load the actor config blob from "missing.yaml"
# Then a ValueError should be raised containing "PyYAML is required for YAML actor configs"
#
# Scenario: Invalid YAML raises parsing failure error
# Given an actor config file "invalid.yaml" with content:
# """
# provider: [unclosed
# """
# When I load the actor config blob from "invalid.yaml"
# Then a ValueError should be raised containing "Failed to parse config"
#
# Scenario: Empty YAML returns empty object
# Given an actor config file "empty.yaml" with content:
# """
# """
# When I load the actor config blob from "empty.yaml"
# Then the loaded actor config blob should equal {}
#
# Scenario: Non-object config raises validation error
# Given an actor config file "list.yaml" with content:
# """
# - provider: openai
# """
# When I load the actor config blob from "list.yaml"
# Then a ValueError should be raised containing "Config must be a JSON or YAML object"
#
# Scenario: from_file applies overrides and unsafe flag
# Given an actor config file "valid.json" with content:
# """
# {"provider": "file-provider", "model": "file-model", "options": {"k": "v"}, "graph_descriptor": {"node": true}}
# """
# When I parse the actor configuration from file "valid.json" with overrides:
# """
# {"name": "cli-name", "graph_descriptor": {"node": "override"}, "unsafe": true}
# """
# Then the actor configuration should have provider "file-provider" and model "file-model"
# And the actor configuration name should be "cli-name"
# And the actor configuration graph descriptor should equal {"node": "override"}
# And the actor configuration options should equal {"k": "v"}
# And the actor configuration unsafe flag should be true
#
# Scenario: from_blob rejects missing model values
# When I build an actor configuration from blob {"provider": "only-provider"}
# Then a ValueError should be raised containing "model is required"
#
# Scenario: v2 YAML actor config infers provider and model
# Given an actor config file "v2.yaml" with content:
# """
# cleveragents:
# default_router: main_router
# agents:
# paper_writer:
# type: llm
# config:
# provider: openai
# model: gpt-4
# unsafe: true
# options:
# temperature: 0.5
# routes:
# main_router:
# type: stream
# operators:
# - type: map
# params:
# agent: paper_writer
# publications:
# - __output__
# """
# When I parse the actor configuration from file "v2.yaml" with overrides:
# """
# {}
# """
# Then the actor configuration should have provider "openai" and model "gpt-4"
# And the actor configuration unsafe flag should be true
# And the actor configuration graph descriptor should include key "routes"
# And the actor configuration graph descriptor should include key "agents"
# And the actor configuration options should equal {"temperature": 0.5}
#
# Scenario: JSON null config becomes empty mapping
# Given an actor config file "null.json" with content:
# """
# null
# """
# When I load the actor config blob from "null.json"
# Then the loaded actor config blob should equal {}
#
# Scenario: JSON list config raises validation error
# Given an actor config file "list.json" with content:
# """
# [1, 2, 3]
# """
# When I load the actor config blob from "list.json"
# Then a ValueError should be raised containing "Config must be a JSON or YAML object"
#
# Scenario: Templated YAML preserves placeholders
# Given an actor config file "templated.yaml" with content:
# """
# provider: openai
# model: gpt-4
# system_prompt: "Use {{ context.paper_details.topic }} to write."
# messages:
# - role: system
# content: "{% if context.brainstorming_summary %}summary{% endif %}"
# """
# When I load the actor config blob from "templated.yaml"
# Then the loaded actor config value at "system_prompt" should equal "Use {{ context.paper_details.topic }} to write."
# And the loaded actor config value at "messages.0.content" should equal "<<<BLOCK_START>>> if context.brainstorming_summary <<<BLOCK_END>>>summary<<<BLOCK_START>>> endif <<<BLOCK_END>>>"
#
# Scenario: Environment placeholders use defaults and conversions
# Given an actor config file "envs.yaml" with content:
# """
# provider: openai
# model: gpt-4
# options:
# truthy: "${MISSING_BOOL:true}"
# count: "${MISSING_INT:7}"
# ratio: "${MISSING_FLOAT:2.5}"
# greeting: "${MISSING_TEXT:hello}"
# """
# And the actor config environment variable "MISSING_BOOL" is unset
# And the actor config environment variable "MISSING_INT" is unset
# And the actor config environment variable "MISSING_FLOAT" is unset
# And the actor config environment variable "MISSING_TEXT" is unset
# When I load the actor config blob from "envs.yaml"
# Then the loaded actor config value at "options.truthy" should equal True
# And the loaded actor config value at "options.count" should equal 7
# And the loaded actor config value at "options.ratio" should equal 2.5
# And the loaded actor config value at "options.greeting" should equal "hello"
#
# Scenario: Missing required environment variable raises an error
# Given an actor config file "required_env.yaml" with content:
# """
# provider: openai
# model: gpt-4
# secret: "${REQUIRED_SECRET}"
# """
# And the actor config environment variable "REQUIRED_SECRET" is unset
# When I load the actor config blob from "required_env.yaml"
# Then a ValueError should be raised containing "Environment variable 'REQUIRED_SECRET' is not set"
#
# Scenario: from_blob merges default, v2 and override options
# When I build an actor configuration from structured blob with defaults and overrides:
# """
# {
# "blob": {
# "provider": "cli-provider",
# "model": "cli-model",
# "options": {"user": "blob"},
# "agents": {
# "writer": {
# "config": {
# "options": {"v2": "v2-option"}
# }
# }
# }
# },
# "default_options": {"base": "default"},
# "option_overrides": {"user": "override", "extra": "added"}
# }
# """
# Then the actor configuration should have provider "cli-provider" and model "cli-model"
# And the actor configuration options should equal {"base": "default", "v2": "v2-option", "user": "override", "extra": "added"}
#
# Scenario: v2 extraction skips non-dict agent entries
# Given an actor config file "invalid_v2.yaml" with content:
# """
# provider: fallback-provider
# model: fallback-model
# agents:
# first: not-a-dict
# """
# When I parse the actor configuration from file "invalid_v2.yaml" with overrides:
# """
# {}
# """
# Then the actor configuration should have provider "fallback-provider" and model "fallback-model"