update_resource unit test factors
- Operation:
updateResource - Endpoint:
PUT /resources/{resourceId}
0. Router層の暗黙処理
| Case ID | 処理 | 発生条件 | 期待観点 |
|---|---|---|---|
R001 |
FastAPI Depends(get_caller_identity) | Authorization ヘッダのBearer tokenが未指定、または署名・issuer・client・用途・期限を検証できない場合。 | HTTP 401 error response: authentication_required / invalid_token |
R002 |
FastAPI/Pydantic request validation | Path/Query/Header/Body が型または制約に一致しない場合。 | HTTP 422 error response: invalid_input |
1. 要因ごとの要素
F01 条件分岐
- 対象: 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。
- AST:
not await api_functions.has_resource_management_permission(caller)
| 要素ID | 要素 | 期待観点 |
|---|---|---|
F01-true |
成立 | HTTP 403 error response: forbidden log message_id: updateResource.caller_cannot_manage_resources log summary: 呼び出し元が管理者ではないため、資源編集を拒否した。 |
F01-false |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐
- 対象: 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。
- AST:
not await api_functions.is_current_resource_version(resource, request)
| 要素ID | 要素 | 期待観点 |
|---|---|---|
F02-true |
成立 | HTTP 409 error response: stale_version log message_id: updateResource.stale_resource_version log summary: 資源の公開版が現在値と一致しないため、資源編集を拒否した。 |
F02-false |
不成立 | 条件不成立側または後続処理を継続する。 |
F03 条件分岐
- 対象: 条件分岐: 無効化する資源に開始前の確定予約が残っている場合。
- AST:
await api_functions.has_future_reservations(resource, request, clock, session)
| 要素ID | 要素 | 期待観点 |
|---|---|---|
F03-true |
成立 | HTTP 409 error response: future_reservations_exist log message_id: updateResource.future_reservations_exist log summary: 開始前の確定予約が残っているため、資源の無効化を拒否した。 |
F03-false |
不成立 | 条件不成立側または後続処理を継続する。 |
F04 例外処理
- 対象: 例外処理: ROUTER_HANDLED_EXCEPTIONS
- AST:
ROUTER_HANDLED_EXCEPTIONS
| 要素ID | 要素 | 期待観点 |
|---|---|---|
F04-normal |
発生しない | try bodyを継続し、このexcept handlerへ遷移しない。 |
F04-raised-apifunctionerror |
ApiFunctionError | HTTP 500 error response: forced router error |
F04-raised-externalapierror |
ExternalApiError | HTTP 502 error response: external service request failed |
F04-raised-httpexception |
HTTPException | HTTP 400 error response: forced http exception |
2. 直積したテストケース一覧
| Case ID | F01 | F02 | F03 | F04 |
|---|---|---|---|---|
TC001 |
成立 |
- | - | - |
TC002 |
不成立 |
成立 |
- | - |
TC003 |
不成立 |
不成立 |
成立 |
- |
TC004 |
不成立 |
不成立 |
不成立 |
発生しない |
TC005 |
不成立 |
不成立 |
不成立 |
ApiFunctionError |
TC006 |
不成立 |
不成立 |
不成立 |
ExternalApiError |
TC007 |
不成立 |
不成立 |
不成立 |
HTTPException |
3. テスト詳細
TC001
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
成立 | HTTP 403 error response: forbidden log message_id: updateResource.caller_cannot_manage_resources log summary: 呼び出し元が管理者ではないため、資源編集を拒否した。 |
TC002
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。 |
成立 | HTTP 409 error response: stale_version log message_id: updateResource.stale_resource_version log summary: 資源の公開版が現在値と一致しないため、資源編集を拒否した。 |
TC003
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F03 条件分岐: 無効化する資源に開始前の確定予約が残っている場合。 |
成立 | HTTP 409 error response: future_reservations_exist log message_id: updateResource.future_reservations_exist log summary: 開始前の確定予約が残っているため、資源の無効化を拒否した。 |
TC004
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F03 条件分岐: 無効化する資源に開始前の確定予約が残っている場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F04 例外処理: ROUTER_HANDLED_EXCEPTIONS |
発生しない | try bodyを継続し、このexcept handlerへ遷移しない。 |
| API正常応答 | 正常 | HTTP 200 success response |
TC005
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F03 条件分岐: 無効化する資源に開始前の確定予約が残っている場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F04 例外処理: ROUTER_HANDLED_EXCEPTIONS |
ApiFunctionError | HTTP 500 error response: forced router error |
TC006
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F03 条件分岐: 無効化する資源に開始前の確定予約が残っている場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F04 例外処理: ROUTER_HANDLED_EXCEPTIONS |
ExternalApiError | HTTP 502 error response: external service request failed |
TC007
| 要因 | 要素 | 期待観点 |
|---|---|---|
F01 条件分岐: 呼び出し元が資源を管理できる管理者でない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F02 条件分岐: 編集要求の公開版が資源の現在の公開版と一致しない場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F03 条件分岐: 無効化する資源に開始前の確定予約が残っている場合。 |
不成立 | 条件不成立側または後続処理を継続する。 |
F04 例外処理: ROUTER_HANDLED_EXCEPTIONS |
HTTPException | HTTP 400 error response: forced http exception |