Adapters テストヘルパーの不具合修正
この PR はテストヘルパーの誤動作を解消し、Passbolt アダプターのテスト失敗を根本的に修正します。stub_ticks_with が意図した通りにスタブを適用できるようになり、テストの信頼性が向上します。
背景
stub_ticks_with が正しくチェーンされた期待値を登録できず、テストが誤ったスタブに依存していた という問題が Issue #1857 で報告されました。元の実装では stub_ticks が ` メソッドの全体スタブを生成し、stub_ticks_with がそれに対して .with を付与した上で別のスタブを返すため、チェーンした .returns が無視されていました。
この不具合は Passbolt アダプターのテストで顕在化し、passbolt verify コマンドのスタブが期待したリダイレクト付き呼び出しと一致せず、unexpected invocation エラーが発生していました。また、テストコード側で stub_ticks.with を使用していた点も succeed パラメータが無視される原因となっていました。
技術的な変更
テストヘルパーから余計な全体スタブ生成行を削除 しました。test/test_helper.rb の stub_ticks_with メソッド内で最後に呼び出されていた Kamal::Secrets::Adapters::Base.any_instance.stubs(:)を除去し、stub_ticks` が生成したスタブだけを利用できるようにしています。
@@ -134,6 +134,5 @@ def stub_ticks
def stub_ticks_with(command, succeed: true)
# Sneakily run `false`/`true` after a match to set $? to 1/0
stub_ticks.with { |c| c == command && (succeed ? `true` : `false`) }
- Kamal::Secrets::Adapters::Base.any_instance.stubs(:`)
end
end
Passbolt アダプターのテストで stub_ticks.with を stub_ticks_with に置換 し、コマンド引数からリダイレクト部分を除去しました。これにより、passbolt verify の呼び出しが期待通りにスタブされ、succeed パラメータが正しく適用されます。
@@ -9,7 +9,7 @@ class PassboltAdapterTest < SecretAdapterTestCase
test "fetch" do
stub_ticks_with("passbolt --version 2> /dev/null", succeed: true)
- stub_ticks.with("passbolt verify 2> /dev/null", succeed: true)
+ stub_ticks_with("passbolt verify", succeed: true)
同様の置換がテストファイル全体に適用され、stub_ticks_with が一貫して使用されるようになりました。結果として、テストは期待したスタブ挙動で実行され、unexpected invocation エラーは解消されます。
設計判断
既存のヘルパーメソッド stub_ticks_with を残しつつ、内部実装だけを修正 する判断が取られました。新たなヘルパーを追加すると既存テストコードとの互換性が損なわれるリスクがあるため、最小限の変更で問題を解決する方針が採用されています。
また、リダイレクト付きコマンド文字列をテスト側で除外 した点は、実装側が passbolt verify のみを呼び出すことを前提としているため、テストが実装と正しく対応するように整合性を取った結果です。これにより、テストが実装に忠実に振る舞い、将来的なコマンド変更にも柔軟に対応できます。
まとめ
この PR はテストヘルパーの不具合を根本的に修正し、Passbolt アダプターのテストが期待通りに動作するようにしました。スタブ生成ロジックの簡素化と stub_ticks_with の統一使用により、テストの可読性と信頼性が向上し、今後のアダプター追加や変更にも安定したテスト基盤が提供されます。