Files
cleveragents-core/features/context_service_new_coverage.feature
brent.edwards e801eb1ee8 feat(ci): add nox-based PR validation workflow
- Rewrite .forgejo/workflows/ci.yml to route all jobs through nox sessions
- Fix coverage_report nox session: serial behave mode replaces broken parallel
  mode (22% -> 97% accuracy), raise fail-under from 85% to 97%
- Pass posargs through format nox session for CI --check support
- Add 11 CI workflow validation scenarios (Behave) + Robot smoke test + ASV bench
- Add 108 new Behave scenarios covering 6 largest coverage gaps to reach 97%:
  yaml_template_engine, actor/config, actor/registry, message_router,
  context_analysis, context_service
- Update docs/development/ci-cd.md with nox-based CI docs and 97% threshold
- Restore implementation_plan.md verbose style, check off completed CI tasks

Verified: 1673 scenarios pass, 97% coverage, lint clean, typecheck clean
2026-02-12 22:01:51 +00:00

121 lines
4.9 KiB
Gherkin

Feature: Context service new coverage
As a developer
I want ContextService LangGraph analysis methods thoroughly tested
So that context analysis, streaming, and vector search stay stable
Scenario: _get_current_plan returns None for project without id
Given a context service with mocked dependencies
And a project without an id
When I get the current plan
Then the context result should be None
Scenario: _build_langsmith_config returns empty dict when disabled
Given a context service with mocked dependencies
And a project with id 1
When I build langsmith config with langsmith disabled
Then the config should be an empty dict
Scenario: _build_langsmith_config returns config when enabled
Given a context service with langsmith enabled
And a project with id 1
When I build langsmith config with langsmith enabled
Then the config should contain metadata and tags
Scenario: _prepare_analysis_config adds thread_id
Given a context service with mocked dependencies
And a project with id 1
When I prepare analysis config
Then the config should have a configurable thread_id
Scenario: _vector_store_available returns False when no store
Given a context service with no vector store
When I check vector store availability
Then the vector store check should return False
Scenario: _refresh_vector_index is a no-op when store unavailable
Given a context service with no vector store
When I refresh vector index for plan 1
Then no exception should be raised
Scenario: _refresh_vector_index handles ConfigurationError gracefully
Given a context service with a failing vector store
When I refresh vector index for plan 1
Then no exception should be raised
Scenario: _get_context_agent returns a ContextAnalysisAgent
Given a context service with mocked dependencies
When I get the context agent
Then the context agent should be a ContextAnalysisAgent instance
Scenario: analyze_context returns empty analysis for empty context
Given a context service with mocked dependencies
And a project that has no context files
When I analyze context
Then the result summary should indicate no files
Scenario: analyze_context runs full analysis for project with files
Given a context service with mocked dependencies
And a project with context files
When I analyze context
Then the result should have documents and summary
Scenario: get_context_summary returns summary string
Given a context service with mocked dependencies
And a project with context files
When I retrieve the context summary
Then the context summary should be a nonempty string
Scenario: get_context_dependencies returns dependencies dict
Given a context service with mocked dependencies
And a project with context files
When I get context dependencies
Then the context deps result should be a dict
Scenario: get_relevant_files filters by threshold
Given a context service with mocked dependencies
And a project with context files
When I fetch relevant files above threshold 0.5
Then the relevant files should be a list of tuples
Scenario: search_context returns empty for blank query
Given a context service with mocked dependencies
And a project with id 1
When I search context with empty query
Then the context search result should be an empty list
Scenario: search_context returns empty when no plan
Given a context service with mocked dependencies
And a project with id 1 but no current plan
When I search context with query "test"
Then the context search result should be an empty list
Scenario: search_context returns empty when vector store unavailable
Given a context service with no vector store
And a project with id 1 and a current plan
When I search context with query "test"
Then the context search result should be an empty list
Scenario: search_context delegates to vector store
Given a context service with a working vector store
And a project with id 1 and a current plan
When I search context with query "test"
Then the vector store search should be called
Scenario: search_context handles ConfigurationError from vector store
Given a context service with a vector store that raises ConfigurationError
And a project with id 1 and a current plan
When I search context with query "test"
Then the context search result should be an empty list
Scenario: analyze_context_streaming yields complete for empty context
Given a context service with mocked dependencies
And a project that has no context files
When I stream analyze context
Then the first event should indicate no files
Scenario: analyze_context_streaming yields events for project with files
Given a context service with mocked dependencies
And a project with context files
When I stream analyze context
Then at least one streaming event should be yielded