active: true
derived: false
groups:
- STORE
header: |
  ストレージポリシーテスト
level: 2.11
links:
- SPEC011: 7raaz_MvYxmXF_R2AGQQz1EG3y_RvUyTBdtEfBzz2iA=
normative: true
ref: ''
references:
- path: tests/unit/test_storage_policy.py
  type: file
reviewed: Oph_0fW-qrMCXYLSTmIp06uQgUeLZZpx5MwNxqv8Enw=
text: |
  ## 目的

  ストレージポリシーは「データをDB直接保存するか、Blobストレージに分離するか」を決定する戦略レイヤーである。閾値判定の誤りはDBの肥大化（性能劣化）や不要なBlob分離（オーバーヘッド増加）を招く。3種のポリシー実装がそれぞれの契約を正しく満たすことを検証する。

  ## 検証観点

  - **ThresholdStoragePolicy**: 閾値未満のデータで `False`、閾値以上のデータで `True` を返すこと。境界値（ちょうど閾値サイズ）での挙動が明確であること
  - **WarningOnlyPolicy**: 常に `False` を返しDB直接保存を選択すること。ただし閾値超過時に WARNING レベルのログが出力されること
  - **AlwaysBlobPolicy**: データサイズに関係なく常に `True` を返すこと
  - **Spot 統合**: `@spot.mark(save_blob=True/False)` の明示指定がポリシー判定より優先されること。`save_blob=None`（デフォルト）時にポリシーの `should_save_as_blob()` が呼ばれること
