ContentDisposition.format のテスト追加でカバレッジ向上
ActionDispatch の ContentDisposition.format メソッドは HTTP ヘッダー文字列を生成する公開 API ですが、従前のテストではインスタンス化して #to_s を呼び出す形しか検証されていませんでした。本 PR はそのクラスメソッド自体を直接呼び出すテストを追加し、実装の動作確認を網羅しています。
背景
ContentDisposition.format はデータストリーミングや ActiveStorage でヘッダー文字列を組み立てるために利用される重要なユーティリティです。これまでのテストスイートでは、ContentDisposition.new(...).to_s を使って期待値を生成し、インスタンスメソッドの結果だけを比較していました。その結果、クラスメソッド自体が正しく動作するかは検証されていませんでした。今回の変更は、実際に使用される public shortcut の挙動を直接テスト対象に加えることで、テストの盲点を埋めることを目的としています。
技術的な変更
テストファイル actionpack/test/dispatch/content_disposition_test.rb に二つのテストケースが追加されました。最初のケースは filename がある場合に、Http::ContentDisposition.format が Http::ContentDisposition.new(...).to_s と同一文字列を返すことを検証します。二つ目のケースは filename: nil の状況で、メソッドが単にディスポジション名だけを返すことを確認します。
test ".format builds the header string" do
expected = Http::ContentDisposition.new(disposition: :inline, filename: "racecar.jpg").to_s
assert_equal expected, Http::ContentDisposition.format(disposition: :inline, filename: "racecar.jpg")
end
test ".format without filename" do
assert_equal "inline", Http::ContentDisposition.format(disposition: :inline, filename: nil)
end
この追加はテストコードのみであり、プロダクションロジックや既存の API 挙動に変更は加えていません。したがってアプリケーションの実行時挙動に影響はありませんが、テストカバレッジが確実に向上します。
設計判断
PR のディスカッションでは、実装自体の修正は不要と判断されました。format メソッドはすでにインスタンス生成+to_s 呼び出しというシンプルな実装で、機能的な問題は報告されていないため、コード改変よりもテスト充実が優先されました。テスト追加のみで十分なリスク低減が期待でき、将来的なリファクタリングやバグ修正時の安全網として機能します。
まとめ
本 PR は ContentDisposition.format の直接呼び出しをテストに組み込み、既存テストの盲点を解消しました。実装に変更はなく、テストカバレッジの向上と将来的な保守性の強化という効果が得られます。