Closed smly closed 8 months ago
この問題は、立直宣言牌候補に赤と黒の5が両方あるとき、APIには赤の方しか含まれていないために発生するという認識でよいですか?
はい、そうです。
testsディレクトリ直下にもinit.pyが必要ではありませんか?
tests ディレクトリ直下にテストコードがないため不要と判断しました。
基本的に __init__.py
は不要です。test_presentation ディレクトリに __init__.py
が配置されているのは、このディレクトリにテストコードがあり、ruff の implicit-namespace-package (INP001) を回避するためのものです。test_match.py に ruff: noqa: INP001
を追加することも選択肢ですが、将来的にテスト用の共通コード(複雑な Mock を作成する場合など)を配置する際、これを import させたい場合に必要になります。そのため test_presentation ディレクトリには __init__.py
を配置させておく選択をしました。
以下のコードでテストを実行できることを確認しています。
❯ poetry run pytest --no-summary --no-header
================================== test session starts ===================================
collected 1 item
tests/test_presentation/test_match.py . [100%]
=================================== 1 passed in 0.98s ====================================
❯ file tests/test_presentation/__init__.py
tests/test_presentation/__init__.py: empty
❯ file tests/__init__.py
tests/__init__.py: cannot open `tests/__init__.py' (No such file or directory)
夜に用事があるため深夜あるいは明日以降に差分追加と返信をします。
立直時のエラーを解消するためのPRです。
エラー発生条件
赤ドラと対応する5の数牌が手牌にあり、かつこれらが立直時の打牌候補であるときに
InvalidOperation
例外が発生します。 例外の発生場所はMatchPresentation
の_operate_liqi()
内のcandidate_dapai_list
に対するバリデーション処理です。具体例として、以下の状態で例外が発生します。
これは LiqiOperation インスタンスを作成するときに与えられるデータに赤ドラの
0s
のみがdata["combinations"]: list[str]
として受け取り、5s
が含まれていないために発生します。実装
_common.py に赤ドラを対応する5の数牌に変換する関数
deaka()
を定義し、これに適用したあとでcandidate_dapai_list
に対するバリデーション処理を実行するよう修正しました。テストの追加
勝手ながら
_operate_liqi()
に対する単体テストを追加しましたがどうでしょうか? 今後単体テストを追加するしない、テストフレームワークやテスト方法など方針がありましたら指摘ください。