Files
cleveragents-core/features/coverage_boost_extra.feature
T
Jeffrey Phillips Freeman f7d2f63ab8
CI / lint (pull_request) Successful in 15s
CI / typecheck (pull_request) Successful in 28s
CI / security (pull_request) Successful in 23s
CI / quality (pull_request) Successful in 15s
CI / integration_tests (pull_request) Successful in 5m11s
CI / build (pull_request) Successful in 16s
CI / unit_tests (pull_request) Successful in 14m31s
CI / docker (pull_request) Successful in 40s
CI / coverage (pull_request) Successful in 8m18s
CI / lint (push) Successful in 13s
CI / typecheck (push) Successful in 28s
CI / security (push) Successful in 23s
CI / quality (push) Successful in 16s
CI / integration_tests (push) Successful in 4m58s
CI / build (push) Successful in 15s
CI / unit_tests (push) Successful in 15m30s
CI / coverage (push) Has been cancelled
CI / docker (push) Has been cancelled
feat(cli): add resource commands (core)
2026-02-16 16:46:54 -05:00

173 lines
7.5 KiB
Gherkin

Feature: Coverage boost for domain models and services
As a developer
I want comprehensive tests for domain model default factories and validators
So that overall test coverage meets the 97% threshold
# ---- PlanSettings default factories (5 lines: 17, 21, 25, 29, 33) ----
Scenario: PlanSettings with minimal fields uses default factories
Given I import PlanSettings from domain models
When I create a PlanSettings with only modelPackName
Then the plan settings should have empty default lists
# ---- PlanFiles default factories (3 lines: 16, 20, 24) ----
Scenario: PlanFiles models use default factories
Given I import planfiles domain models
When I create CurrentPlanFiles with minimal fields
Then the plan files should have empty default lists
# ---- AiModels custom default factories (5 lines: 14, 18, 22, 26, 30) ----
Scenario: AiModels custom models use default factories
Given I import aimodels_custom domain models
When I create ClientModelsInput with minimal fields
Then the client models input should have empty default lists
# ---- Conversation default factories (3 lines: 16, 20, 24) ----
Scenario: Conversation models use default factories
Given I import conversation domain models
When I create a ConvoMessage with minimal fields
Then the convo message should have default flags
# ---- Actor name validation error paths (3 lines: 53, 59, 61) ----
Scenario: Actor name without slash raises ValueError
Given I import Actor from domain models
When I try to create an Actor with name "noslash"
Then a ValueError should be raised with message containing "/"
Scenario: Actor name with empty prefix raises ValueError
Given I import Actor from domain models
When I try to create an Actor with name "/suffix"
Then a ValueError should be raised with message containing "prefix"
Scenario: Actor name local with empty id raises ValueError
Given I import Actor from domain models
When I try to create an Actor with name "local/ "
Then a ValueError should be raised with message containing "local"
# ---- ChangeSet stats for MOVE and applied (3 lines: 91-92, 95) ----
Scenario: ChangeSet statistics count MOVE and applied changes
Given I import ChangeSet from domain models
When I create a ChangeSet with MOVE operations and applied changes
Then the stats should include moves and applied counts
# ---- Context model default factories and validator (lines 16, 20, 45, 120-124) ----
Scenario: Context model uses default factories
Given I import context domain models
When I create a Context with minimal fields
Then the context should have empty default collections
Scenario: ContextUpdateResult validator rejects negative token diffs
Given I import context domain models
When I try to create ContextUpdateResult with negative token diffs
Then a ValueError should be raised with message containing "non-negative"
Scenario: ContextFile validates path resolution
Given I import context domain models
When I create a ContextFile with a relative path
Then the path should be resolved to absolute
# ---- Resource CLI additional coverage for remaining lines ----
Scenario: type add with update flag re-raises non-already-exists ValidationError
Given a fresh in-memory resource registry
And a service whose register_type raises ValidationError with custom message
When I run type_add with update and the service error
Then the resource command should fail
Scenario: resource add with branch but no path
Given a fresh in-memory resource registry
And built-in types are bootstrapped
When I run resource add with branch only type "git-checkout" name "local/br-only" branch "develop"
Then the resource output should contain "local/br-only"
Scenario: resource show format yaml
Given a fresh in-memory resource registry
And built-in types are bootstrapped
And I run resource add "git-checkout" "local/yaml-show" with path "/tmp/ys"
When I run resource show "local/yaml-show" using format "yaml"
Then the resource output should contain "local/yaml-show"
Scenario: resource show format plain
Given a fresh in-memory resource registry
And built-in types are bootstrapped
And I run resource add "git-checkout" "local/plain-show" with path "/tmp/ps"
When I run resource show "local/plain-show" using format "plain"
Then the resource output should contain "local/plain-show"
Scenario: resource type add raises generic CleverAgentsError via update
Given a fresh in-memory resource registry
And a valid custom resource type YAML file
And a service whose register_type raises CleverAgentsError
When I run type_add with the stored config and update false
Then the resource command should fail
And the resource output should contain "Error"
# ---- Action domain model coverage (lines 260-261, 621, 628, 630, 632, 652, 654, 659) ----
Scenario: Action to_dict includes all optional fields
Given I import Action from domain models
When I create an Action with all optional fields populated
Then the to_dict result should include all optional keys
Scenario: ActionArgument coerce to float raises ValueError
Given I import ActionArgument from domain models
When I try to coerce "not_a_float" to float for an argument
Then a ValueError should be raised with message containing "float"
# ---- NamespacedProject validation (line 397) ----
Scenario: NamespacedProject rejects invalid namespace
Given I import NamespacedProject from domain models
When I try to create a NamespacedProject with invalid namespace "123bad"
Then a ValueError should be raised with message containing "invalid"
# ---- NamespacedProject linked resource lookup (lines 514, 530, 532-534) ----
Scenario: NamespacedProject linked resource lookup by id
Given I import NamespacedProject from domain models
When I create a NamespacedProject with linked resources
And I look up a linked resource by id "01HXYZ1234567890ABCDEFGHKJ"
Then the linked resource should be found
Scenario: NamespacedProject linked resource lookup by empty id
Given I import NamespacedProject from domain models
When I try to look up a linked resource by empty id
Then a ValueError should be raised with message containing "empty"
Scenario: NamespacedProject linked resource lookup by alias
Given I import NamespacedProject from domain models
When I create a NamespacedProject with linked resources
And I look up a linked resource by alias "my-alias"
Then the linked resource should be found
Scenario: NamespacedProject linked resource lookup by empty alias
Given I import NamespacedProject from domain models
When I try to look up a linked resource by empty alias
Then a ValueError should be raised with message containing "empty"
Scenario: NamespacedProject linked resource not found by alias
Given I import NamespacedProject from domain models
When I create a NamespacedProject with linked resources
And I look up a linked resource by alias "nonexistent"
Then the linked resource should not be found
# ---- Additional database model repr coverage ----
Scenario: Database model repr methods
Given I import database models
When I create database model instances
Then their repr methods should return strings
# ---- Plan lifecycle service edge cases ----
Scenario: Plan lifecycle service uncovered branches
Given I import plan lifecycle service helpers
When I test plan lifecycle service edge paths
Then no errors should occur