小さなお店 docs/screenshots/casebook_demo.yaml
価格の計算・在庫の確認・注文の明細を、CLI と Python の関数から確かめる
期待出力ファイルの置き場所: golden/casebook_demo/
期待出力の中の <…> は、実行ごとに変わる値の置き換えです
13 件 成功 10 スキップ 1 想定どおり失敗 1 失敗 1
| 大項目 | 件数 | 結果 |
|---|---|---|
| 価格計算 | 5 | 成功 5 |
| 在庫 | 3 | 成功 3 |
| 注文 | 5 | 成功 2 スキップ 1 想定どおり失敗 1 失敗 1 |
確認が必要なケース
| 大項目 | 中項目 | 小項目 | ケース | 確認内容 | 前提条件 | 期待結果 | 結果 | 時間 |
|---|---|---|---|---|---|---|---|---|
価格計算 会員割引とまとめ買い割引 | 通常の購入 | CLI | price_one store price りんご 1 | 1個だけなら割引はない | — | 成功 | 1 ms | |
期待出力(price_one.txt)# exit_code: 0 ----- stdout ----- りんご x 1 = 150 円(割引 0 円) | ||||||||
price_member store price りんご 3 --member | 会員は1割引きになる | — | 成功 | 1 ms | ||||
期待出力(price_member.txt)# exit_code: 0 ----- stdout ----- りんご x 3 = 405 円(割引 45 円) | ||||||||
関数 | quote_bulk store:quote | 5個以上で50円引きになる | — | return = {"discount": 50, "total": 450} | 成功 | 0 ms | ||
入力の誤り | price_unknown_item store price ぶどう 1 | 存在しない商品はエラーになる | — | exit_code = 1 stderr が「商品がありません」を含む | 成功 | 1 ms | ||
quote_zero store:quote | 個数0は ValueError になる | — | raises = "ValueError" | 成功 | 0 ms | |||
在庫 | 通常時 | stock_available store stock りんご | 在庫があれば個数を表示する | — | 成功 | 1 ms | ||
期待出力(stock_available.txt)# exit_code: 0 ----- stdout ----- りんご: 10 個 | ||||||||
stock_empty store stock バナナ | 在庫0の商品は在庫切れと表示し、終了コード3を返す | — | exit_code = 3 stdout が「在庫切れ」を含む | 成功 | 1 ms | |||
売り切れ時 | stock_sold_out store:stock | 売り切れの状態では available が false になる | 状態: sold_out | return = {"available": false} | 成功 | 0 ms | ||
注文 | 明細 | receipt_small store receipt りんご=2 バナナ=1 | 3,000円未満は送料500円がかかる | — | 成功 | 1 ms | ||
期待出力(receipt_small.txt)# exit_code: 0 ----- stdout ----- りんご x 2: 300 円 バナナ x 1: 100 円 小計: 400 円 送料: 500 円 合計: 900 円 | ||||||||
receipt_free_shipping store receipt メロン=2 りんご=4 | ちょうど3,000円なら送料は無料になる | — | 失敗 | 1 ms | ||||
失敗の詳細[receipt_free_shipping](81 行目) 注文 > 明細 ちょうど3,000円なら送料は無料になる 出力が期待と異なります。意図した変更なら `--casebook-update` で更新してください。 --- golden/casebook_demo/receipt_free_shipping.txt(期待) +++ 実際の出力 @@ -3,5 +3,5 @@ メロン x 2: 2400 円 りんご x 4: 600 円 小計: 3000 円 -送料: 0 円 -合計: 3000 円 +送料: 500 円 +合計: 3500 円 期待出力(receipt_free_shipping.txt)# exit_code: 0 ----- stdout ----- メロン x 2: 2400 円 りんご x 4: 600 円 小計: 3000 円 送料: 0 円 合計: 3000 円 | ||||||||
引き当て | reserve_short store:reserve | 在庫が足りなければ OutOfStock になる | stock: {"メロン": 1} | raises = "OutOfStock" | 成功 | 0 ms | ||
ポイント | points_round_down store:points | 100円未満の端数はポイントにならない | — | return = 4 | 想定どおり失敗 不具合 #12: 端数を切り上げている | 0 ms | ||
クーポン | coupon_percent store:coupon | 10% 引きのクーポンを使える | — | return = 900 | スキップ 仕様が決まるまで止める | 0 ms | ||