51 lines
1.4 KiB
Markdown
51 lines
1.4 KiB
Markdown
|
|
# T703 — compatibility fixtures not-ready guards
|
|||
|
|
|
|||
|
|
> Status: `done`
|
|||
|
|
> Milestone: `M0` · Phase A
|
|||
|
|
> Kind: `test` · Est. change: `~150 lines`
|
|||
|
|
|
|||
|
|
## Goal
|
|||
|
|
|
|||
|
|
以跨層 fixture 鎖定舊 watch/opportunity 相容讀法,並證明所有新增 API 在尚未完成時誠實失敗。
|
|||
|
|
|
|||
|
|
## Depends on
|
|||
|
|
|
|||
|
|
- T700、T701、T702
|
|||
|
|
|
|||
|
|
## Inputs
|
|||
|
|
|
|||
|
|
- `../spec.md` §4.6、§5.3、驗收 #10、#13
|
|||
|
|
- 舊 RadarWatchPublic/OpportunityPublic JSON shape
|
|||
|
|
|
|||
|
|
## Outputs
|
|||
|
|
|
|||
|
|
| 路徑 | 動作 | 說明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `apps/backend/internal/logic/radar/product_contract_test.go` | add | JWT、not-ready、成對 ID、跨 owner 契約測試 |
|
|||
|
|
| `apps/web/src/data/fixtures/radarLegacy.ts` | add | 缺新欄位的舊 response fixture |
|
|||
|
|
| `apps/web/src/data/live/radarRepos.test.ts` | edit | 舊 watch→generic、舊商機→未指定產品 |
|
|||
|
|
|
|||
|
|
## Behavior
|
|||
|
|
|
|||
|
|
- 缺 `context_mode` 不報錯、不猜產品。
|
|||
|
|
- 只帶一個 ID 或跨 owner ID 明確失敗且不洩漏名稱。
|
|||
|
|
- 新 endpoint 不得回 `code=102000`+空 data。
|
|||
|
|
|
|||
|
|
## Out of scope
|
|||
|
|
|
|||
|
|
- 真正 product CRUD 與 persistence
|
|||
|
|
- UX fixture(T720)
|
|||
|
|
|
|||
|
|
## Acceptance
|
|||
|
|
|
|||
|
|
- [x] spec #10、#13 有具名測試。
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
cd apps/backend && go test ./internal/logic/radar/ -count=1
|
|||
|
|
cd apps/web && npm run test -- radarRepos
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Implementation result (2026-08-10): added legacy watch/opportunity fixtures,
|
|||
|
|
mapper compatibility assertions, and kept the generated product routes on the
|
|||
|
|
explicit 501010/not-ready path. Backend and frontend contract tests pass.
|