MCP v2 - テストケース設計
このページは I/O 定義 とテストケースの対応を定義する。目標契約の条項に対応するテストケースがない場合、それは実装ギャップとして扱う。
テスト ID は MCPV2-<layer>-<NN> 形式を使う。
| Layer | Scope | Tooling |
|---|---|---|
Unit (U) |
schema validation、key parsing、scrypt verification、scope checks、backend request mapping、response mapping | Vitest、ネットワークなし |
Handler (C) |
PostgreSQL auth と backend internal API を mock した MCP tool handlers | vi.mock を使った Vitest |
E2E (E) |
CloudFront/API Gateway、MCP v2、PostgreSQL auth、backend internal API、SQS、guinness-ai-v2、S3 artifact、backend webhook、DocumentDB design/code reads を通す dev smoke path | 手動または CI smoke |
flowchart LR
U["Unit tests<br/>schemas/auth/mappers"] --> C["Handler tests<br/>MCP + mocked backend"]
C --> E["E2E smoke<br/>MCP -> backend -> AI"]
E --> Result["project-scoped<br/>design/code/des2code flow"]
カバレッジマトリックス
| 契約領域 | 正常系 | 異常系 | 冪等性 |
|---|---|---|---|
| CloudFront token auth | MCPV2-U-01 | MCPV2-U-02 | - |
| PostgreSQL API-key auth | MCPV2-U-03 | MCPV2-U-04, MCPV2-U-05, MCPV2-U-06 | - |
| project/user scope | MCPV2-U-07 | MCPV2-U-08 | - |
| tool input schemas | MCPV2-U-09 | MCPV2-U-10 | - |
| backend internal API delegation | MCPV2-U-11, MCPV2-C-01, MCPV2-C-03, MCPV2-C-05 | MCPV2-C-02, MCPV2-C-04, MCPV2-C-06, MCPV2-C-08 | MCPV2-C-09 |
| backend producer payloads | MCPV2-U-12 | MCPV2-U-13 | - |
| backend downstream SQS / AI-v2 | MCPV2-E-02 | MCPV2-E-04 | MCPV2-E-03 |
| per-request MCP server | MCPV2-C-09 | - | MCPV2-C-09 |
last_used_at update |
MCPV2-C-10 | MCPV2-C-11 | - |
| deployed integration | MCPV2-E-01, MCPV2-E-02 | MCPV2-E-04 | MCPV2-E-03 |
ユニットテスト
MCPV2-U-01 - 有効な CloudFront token を通過させる
- Given
X-MCP-TokenがCLOUDFRONT_SECRET_HEADERと一致する。 - When edge-token validation を実行する。
- Then validation が通過する。
MCPV2-U-02 - 不正な CloudFront token を拒否する
- Given
ENVIRONMENT=local以外でX-MCP-Tokenが missing または mismatch。 - When edge-token validation を実行する。
- Then request は HTTP 401 で拒否される。
MCPV2-U-03 - 有効な PostgreSQL API key を通過させる
- Given PostgreSQL
mcp_api_keysが既知のkey_hashとsaltを持つ active row を返す。 - When
guinness_<prefix>_<secret>を parse して検証する。 - Then auth context に
id,user_id,project_id,permission,key_prefixが含まれる。
MCPV2-U-04 - 未知の key prefix を失敗させる
- Given parsed prefix に一致する PostgreSQL row がない。
- Then authentication は失敗し、hash verification は実行されない。
MCPV2-U-05 - revoke/expire/delete 済み key を失敗させる
revoked_at, pastexpires_at,deleted_atを parameterize する。- Then tool execution より前に authentication が失敗する。
MCPV2-U-06 - MySQL model import が存在しない
- Given 移行後の実装。
- Then
apps/mcp-v2は@guinness-backend/models/mysqlまたはmysql2を import しない。
MCPV2-U-07 - 許可された project scope を通過させる
- Given auth context が
project_id = 42に scope されている。 - When
project_id = 42で tool を呼び出す。 - Then scope validation が通過する。
MCPV2-U-08 - cross-project scope を backend I/O 前に拒否する
- Given auth context が
project_id = 42に scope されている。 - When
project_id = 43で tool を呼び出す。 - Then response は
isError: trueになる。 - And backend internal API call は実行されない。
MCPV2-U-09 - tool schema が有効な input を受け付ける
trigger-des2code,get-des2code,list-designs,list-code,get-design-detail,get-code-detailを cover する。- Then
limit = 20とoffset = 0の default が適用される。
MCPV2-U-10 - tool schema が不正な input を拒否する
- empty IDs、255 文字超 ID、invalid ID characters、
project_id <= 0、organization_id <= 0、limit > 100、offset < 0を parameterize する。 - Then field-level validation errors が返る。
MCPV2-U-11 - backend internal request mapping が正しい
- Given 有効な tool arguments と authenticated project scope。
- Then MCP v2 は expected backend internal route、method、query/body、
X-API-Key、X-MCP-Project-IDを組み立てる。 - And MCP v2 は SQS、DocumentDB、AI-v2 client を直接 import / call しない。
MCPV2-U-12 - backend producer payload が MCP v2 の ID を共有する
- Given backend design/code/des2code API の request data。
- When
design-import,code-import,des2code用の producer payload を組み立てる。 - Then
design_id,code_id,project_id,organization_idが access control に使う PostgreSQL row と一致する。
MCPV2-U-13 - design producer が figma_url を含めない
- Given backend が Figma URL を parse 済みの design-create request。
- Then
design-importpayload はorganization_id,project_id,file_id,node_id,design_idを含む。 - And payload は
figma_urlを含まない。
Handler テスト
MCPV2-C-01 - trigger tool が backend に委譲する
- Given 有効な auth と有効な trigger input。
- When
trigger-des2codeを実行する。 - Then MCP は
BACKEND_INTERNAL_URLのPOST /internal/des2codeを呼び出す。 - And MCP response は
structuredContent.success = trueを持つ。
MCPV2-C-02 - backend trigger failure を MCP error として返す
- Given backend internal
POST /internal/des2codeが 5xx または validation error を返す。 - Then MCP response は
isError: trueを持つ。 - And error text は mapped backend message を含む。
MCPV2-C-03 - get des2code が backend success を map する
- Given backend internal API が des2code summary を返す。
- Then MCP response は
matched_code_count,matched_codes,artifact,processed_atを含む。
MCPV2-C-04 - get des2code が not found を map する
- Given backend internal API が not-found response を返す。
- Then MCP response は
isError: trueを持ち、成功 result payload は含まれない。
MCPV2-C-05 - list designs/code が pagination を map する
- Given backend internal API が
total_count,returned_count,limit,offset, source items を返す。 - Then MCP structured content は pagination fields を保持する。
MCPV2-C-06 - limit が 100 を超える list request を backend HTTP 前に失敗させる
- Given
limit = 101。 - Then validation が失敗し、backend internal API は呼び出されない。
MCPV2-C-07 - detail tools が embedding なし source detail を返す
- Given backend internal API が design または code source detail を返す。
- Then MCP response は
visual.vector_embedding,semantics.vector_embedding,structural.vector_embeddingを含まない。
MCPV2-C-08 - backend internal API 到達不能を service error に map する
- Given backend internal API が timeout する、または 5xx を返す。
- Then MCP response は service-unavailable text 付きの
isError: trueになる。
MCPV2-C-09 - request ごとに server を分離する
- Given 2 つの concurrent JSON-RPC requests。
- When 両方の request を実行する。
- Then それぞれが新しい MCP server と transport を作成する。
- And response ID/content は request 間で漏れない。
MCPV2-C-10 - last_used_at update が非同期に成功する
- Given 有効な authentication。
- Then verification 成功後に
last_used_atupdate が schedule される。
MCPV2-C-11 - last_used_at update failure は非ブロッキング
- Given auth は成功するが update が throw する。
- Then tool execution は継続し、failure は log される。
E2E スモークテスト
MCPV2-E-01 - デプロイ済み tool list
- Given dev CloudFront/API Gateway endpoint と有効な PostgreSQL-backed MCP API key。
- When
tools/listを呼び出す。 - Then 6 つすべての MCP v2 tools が返る。
MCPV2-E-02 - trigger から backend、SQS、des2code、webhook まで到達する
- Given 同じ organization/project に属する imported design と code sources。
- When
trigger-des2codeを呼び出す。 - Then MCP v2 は backend internal
POST /internal/des2codeを呼び出す。 - And backend は SQS message を
guinness-ai-v2/apps/des2codeに送る。 - And
guinness-ai-v2/apps/des2codeは timestamp 付き S3 result artifact を書き込む。 - And
guinness-ai-v2/apps/des2codeは artifact metadata 付きでPOST /v1/webhooks/ai-statusを送る。 - And backend は最新の
des2coderesult/status と artifact reference を PostgreSQL に保存する。
MCPV2-E-03 - 再 trigger が latest result を置き換える
- Given design に PostgreSQL-backed
des2coderesult と artifact reference がすでに存在する。 - When 同じ design を再度 trigger する。
- Then その
design_idの latest result と artifact reference が置き換わる。 - And MCP read tool は backend internal API 経由で latest result を返す。
MCPV2-E-04 - cross-project access を拒否する
- Given project A に scope された MCP API key。
- When project B に対して tool を呼び出す。
- Then backend internal API、SQS、AI-v2 read I/O より前に call が失敗する。