Skip to content

test: TransactionManager nested cases + DataModelBase schema-driven behavior (#407)#415

Merged
hideyukiMORI merged 1 commit into
mainfrom
test/407-data-model-and-tx-coverage
May 22, 2026
Merged

test: TransactionManager nested cases + DataModelBase schema-driven behavior (#407)#415
hideyukiMORI merged 1 commit into
mainfrom
test/407-data-model-and-tx-coverage

Conversation

@hideyukiMORI
Copy link
Copy Markdown
Owner

評価レポート #401 § 3 Testing 指摘の test coverage gap を補強。

TransactionManager: 3 nested 新 cases

既存の commit / throw rollback / outer-preserved 系に加えて nested run() 経路を追加:

  1. `testNestedRunCommitsOuterTransactionOnlyOnce` (begin/commit ぴったり 1 回ずつ)
  2. `testNestedRunInnerExceptionRollsBackOuter` (内 throw → outer rollback + re-throw)
  3. `testRollbackSkipsWhenTransactionAlreadyEnded` (callback が自己 commit 後 throw → double-rollback しない)

DataModelBase: 12 新 cases (fixture model 経由)

eval report が「Phan baseline 5 件残存 + テスト薄」を指摘した `DataModelBase` の schema-driven magic を pin。`DataModelBaseTestFixtureModel` (parent::__construct skip して Log / ErrorCode / RouteContext 依存を回避) で schema-only 振る舞いを isolate:

  • BOOLEAN / INTEGER / DOUBLE / STRING type cast (4)
  • 同型値 no-cast (1)
  • `__set` unknown throw (1) / `__get` unknown throw (1) / declared-but-unset → null (1)
  • `__isset` (1) / `toArray` (1) / `fromArray` (1) / `getSchema` (1)

DataMapperBase

scope 外 (PDO 依存が大きく future PR)。

Test plan

  • composer test 128/128 (113 → 128、+15 新)
  • composer test:http 24/24 (1 expected skip)
  • composer analyze (Phan) exit 0 (baseline 5 件依然残るが新規追加なし)
  • composer format:check exit 0

Closes #407.

…ehavior (#407)

評価レポート (#401 § 3 Testing) 指摘の test coverage gap を補強。

### TransactionManager 追加 3 cases

既存テスト (commit / rollback on throw / outer transaction preserved)
に対して、nested run 系の missing scenarios を追加:

1. testNestedRunCommitsOuterTransactionOnlyOnce
   - 外 run() + 内 run() の両方 commit、内側は no-op に
   - boundary が 1 つに集約されることを assert
2. testNestedRunInnerExceptionRollsBackOuter
   - 内 run() 内 throw が outer まで bubble、外で rollback 1 回 + re-throw
3. testRollbackSkipsWhenTransactionAlreadyEnded
   - callback が pdo->commit() 自己発火 → throw した場合、manager の catch
     が double-rollback しないこと

### DataModelBase 新規 12 cases

eval report が Phan baseline 5 件残存 + テストカバレッジ薄を指摘した
DataModelBase の schema-driven magic を pin。fixture model
(DataModelBaseTestFixtureModel) で constructor の Log/ErrorCode/RouteContext
依存を bypass し、schema-only 振る舞いに集中:

- BOOLEAN / INTEGER / DOUBLE / STRING 各型の cast (4 cases)
- 同型値の no-cast (1 case)
- unknown property __set throw (1 case)
- unknown property __get throw (1 case)
- known but unset → null get (1 case)
- __isset semantics (1 case)
- toArray (1 case)
- fromArray (1 case)
- getSchema (1 case)

### DataMapperBase

scope 外。PDO 依存が大きく、TestDouble の組み立てが今回の trial 範疇を
超えるため future PR で別途。

### Verification

- composer test 128/128 (113 → 128、+15 新)
- composer test:http 24/24 (1 expected skip)
- composer analyze (Phan) exit 0
- composer format:check exit 0

Closes #407.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@hideyukiMORI hideyukiMORI merged commit 7bf5eb0 into main May 22, 2026
2 checks passed
@hideyukiMORI hideyukiMORI deleted the test/407-data-model-and-tx-coverage branch May 22, 2026 16:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test: DataModelBase / DataMapperBase / TransactionManager のカバレッジ補強 (eval report PR #401)

1 participant