🏄
rspec実行時にリクエストパラメーターがOpenAPIに定義されているかをチェックする方法
前置き、前提
- committee前提です
- 色々と端折って書いています(特にoperation_objectの部分)。すみません
本題
OpenAPIではtype: object
のadditionalProperties
は定義可能ですが、parameters
にはadditionalParameters
のような項目が用意されていません。
これにより、例えばスキーマ定義されていないパラメーターをrspec実行時にリクエストしても、エラーにならず(エラーにする方法が無く)、スキーマ定義漏れが起きる可能性があると感じていました。
そこで、rspec実行時に「スキーマ定義されているparametersと、rspecのリクエストされたパラメーターを比較し、スキーマ定義されていなければエラーにする」コードを書いてみました。
schema_path_item = operation_object.instance_variable_get(:@request_operation).instance_variable_get(:@path_item)
schema_parameter_keys = schema_path_item.send('get').parameters.map(&:name)
req_parameter_keys = request.query_parameters.keys
diffs = req_parameter_keys - schema_parameter_keys
raise Committee::InvalidRequest, "#{diffs.join(', ')は未定義です} if diffs.present?
参考になれば幸いです。
Discussion