# `TMCP032` test_plan_coverage partitions requirements into coverage buckets Call test_plan_coverage with no filter and verify requirements are correctly partitioned :::{dropdown} Is a test for :open: :icon: check-circle-fill :color: primary [`MCP010` Get test plan coverage for requirements](/requirements/MCP010) ::: :::{dropdown} Automated in :open: :icon: check-circle-fill :color: success {fab}`python` [`test_test_plan_coverage`](https://github.com/agagniere/speky/blob/master/tests/test_mcp_server.py#L608) ::: :::{dropdown} Source :icon: file-code :color: info __Source file__: [`specs/mcp/test_10.yaml`](https://github.com/agagniere/speky/blob/master/specs/mcp/test_10.yaml) __Loaded from__: [`speky_mcp`](https://github.com/agagniere/speky/blob/master/specs/mcp/mcp.toml) ::: ## Initial state The expected state is the final state of [`TMCP003` Initialize the MCP server](/tests/TMCP003) ## Procedure ### Step 1 The client calls `test_plan_coverage` with no arguments ```json { "id": 2, "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "test_plan_coverage", "arguments": {} } } ``` ### Step 2 Verify the response partitions requirements into four groups: - RF04 has no tests: `no_test_plan` - RF01 and RF02 have only manual tests: `manual_test_plan` - RF03 has one automated test (T04) and one manual test (T03): `partially_manual_test_plan` - `automated_test_plan` is empty ```json { "id": 2, "jsonrpc": "2.0", "result": { "structuredContent": { "no_test_plan": [ {"category": "non-functional", "id": "RF04"} ], "manual_test_plan": [ {"category": "functional", "id": "RF01"}, {"category": "functional", "id": "RF02"} ], "partially_manual_test_plan": [ {"category": "non-functional", "id": "RF03", "short": "Number 3", "tags": ["foo", "bar:baz"]} ], "automated_test_plan": [] } } } ```