Skip to content

CI で order scenario テストが期待した箇所で落ちることを確認する - #9

Merged
krrrr38 merged 2 commits into
mainfrom
ci/expect-order-scenario-failure
Aug 30, 2026
Merged

CI で order scenario テストが期待した箇所で落ちることを確認する#9
krrrr38 merged 2 commits into
mainfrom
ci/expect-order-scenario-failure

Conversation

@krrrr38

@krrrr38 krrrr38 commented Aug 30, 2026

Copy link
Copy Markdown
Member

Summary

  • 各言語実装に存在する order scenario テストは、リバランス後に Toyopa の保有額が 19,000 円ではなく 20,000 円になる(残高が落ちる)状態を意図的に残している。この「落ちること」自体を CI で検証するようにした
  • 共通スクリプト .github/scripts/expect-order-scenario-failure.sh を追加
    • テストが成功してしまった場合は CI を失敗させる
    • テストが失敗しても、EXPECTED_FAILURE で指定した文字列が出力に含まれない(=別の場所で落ちている)場合は CI を失敗させる
    • テスト出力は ::group:: で折りたたみ、意図的な失敗ログでログが読みにくくならないようにしている
  • .github/workflows/test-*.yml すべて(go / java8 / java17 / php / python / ruby / scala / typescript)に、既存の portfolio scenario テストのに order scenario テストの確認ステップを追加
  • 併せて各ワークフローの paths フィルタに共通スクリプトを追加し、スクリプト変更時にも各言語の CI が動くようにした

各言語で照合する期待メッセージ:

言語 EXPECTED_FAILURE
Go asset3 Toyopa amount: got 20000, want 19000
Java 8 / 17 expected 19000 but was 20000
PHP Failed asserting that two strings are identical. / '19000' / '20000'
Python assert Decimal('20000') == Decimal('19000')
Ruby expect(BigDecimal(asset3_toyopa.amount_jpy)).to eq(BigDecimal("19000"))
Scala Expected 19000, but got 20000
TypeScript asset3: リバランス注文が正しく機能する

Test plan

ローカルで実行し、スクリプトが exit 0(=期待どおりの失敗)になることを確認済み:

  • Go — go test ./test/... -run TestOrderScenario
  • Java 17 — ./mvnw test -q -Dtest=OrderScenarioTest
  • Java 8 — ./mvnw test -q -Dtest=OrderScenarioTest
  • Python — python -m pytest tests/test_order_scenario.py
  • Scala — sbt "testOnly folio.codinginterview.OrderScenario"
  • TypeScript — npx vitest run tests/orderScenario.test.ts
  • PHP — ローカルに php が無いため未検証。期待メッセージは PHPUnit の assertSame 失敗出力に基づく(CI の結果で確認)
  • Ruby — ローカルに対象バージョンの Ruby/bundler が無いため未検証。期待メッセージは RSpec の失敗時ソース表示に基づく(CI の結果で確認)
  • 異常系: テストが通ってしまうケース(portfolio scenario テストを渡す)でスクリプトが失敗することを確認
  • 異常系: 期待メッセージが一致しないケースでスクリプトが失敗することを確認
  • actionlint / ghalint run / shellcheck がすべてパス

🤖 Generated with Claude Code

https://claude.ai/code/session_0163pSJYyqmQcJhji7qc69Nm

@github-actions github-actions Bot added the ci label Aug 30, 2026
Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: krrrr38 <k.kaizu38@gmail.com>
@krrrr38
krrrr38 force-pushed the ci/expect-order-scenario-failure branch from 12ec240 to 2fdd1b4 Compare August 30, 2026 20:32
TypeScript の order scenario だけ 4 つの独立した it に分割され、
ケースごとに userId を作り直して注文をやり直していたため、
他言語と同様に「新規注文 → 追加注文 → リバランス」を順に辿る
単一シナリオへ統合する。

併せて金額比較を expectAmount ヘルパーへ切り出し、失敗時に実測値が
メッセージへ出るようにした。これにより CI の EXPECTED_FAILURE を
シナリオ名ではなく他言語と同じ
`asset3 Toyopa amount: got 20000, want 19000` で照合できる。

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: krrrr38 <k.kaizu38@gmail.com>
@krrrr38
krrrr38 merged commit 4c21070 into main Aug 30, 2026
19 checks passed
@krrrr38
krrrr38 deleted the ci/expect-order-scenario-failure branch August 30, 2026 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant