From ed1f83ffb485cfdf5552e92ad635620c6d4506b4 Mon Sep 17 00:00:00 2001 From: Andy Pfister Date: Wed, 26 Jul 2023 14:25:49 +0200 Subject: [PATCH] Prepend `openapi!` in any case If you run tests with Minitest at themoment, but without the environment variable `OPENAPI`, you are greeted with an error message. `undefined method `openapi!' for Api::V0::SomeControllerTest:Class (NoMethodError)` This is because the current code adds the `openapi!` method only if `OPENAPI` environment variable is set. This commit modifies the loading logic, always requiring the `minitest` hooks class to be loaded if `Minitest` constant is defined, to avoid issues with RSpec. Then, the `openapi?` and `openapi!` methods are always prepended to `Minitest::Test`, while the modified `run` method and the `after_run` hook are only activated when `OPENAPI` environment variable is set. --- lib/rspec/openapi.rb | 6 ++---- lib/rspec/openapi/minitest_hooks.rb | 20 ++++++++++++-------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/rspec/openapi.rb b/lib/rspec/openapi.rb index a6c4a9c6..c91b054e 100644 --- a/lib/rspec/openapi.rb +++ b/lib/rspec/openapi.rb @@ -10,10 +10,8 @@ require 'rspec/openapi/schema_merger' require 'rspec/openapi/schema_cleaner' -if ENV['OPENAPI'] - require 'rspec/openapi/minitest_hooks' - require 'rspec/openapi/rspec_hooks' -end +require 'rspec/openapi/minitest_hooks' if Object.const_defined?('Minitest') +require 'rspec/openapi/rspec_hooks' if ENV['OPENAPI'] && Object.const_defined?('RSpec') module RSpec::OpenAPI @path = 'doc/openapi.yaml' diff --git a/lib/rspec/openapi/minitest_hooks.rb b/lib/rspec/openapi/minitest_hooks.rb index 30ce3aa0..73dda985 100644 --- a/lib/rspec/openapi/minitest_hooks.rb +++ b/lib/rspec/openapi/minitest_hooks.rb @@ -5,11 +5,7 @@ module RSpec::OpenAPI::Minitest Example = Struct.new(:context, :description, :metadata, :file_path) - module TestPatch - def self.prepended(base) - base.extend(ClassMethods) - end - + module RunPatch def run(*args) result = super if ENV['OPENAPI'] && self.class.openapi? @@ -22,6 +18,12 @@ def run(*args) end result end + end + + module ActivateOpenApiClassMethods + def self.prepended(base) + base.extend(ClassMethods) + end module ClassMethods def openapi? @@ -35,10 +37,12 @@ def openapi! end end -Minitest::Test.prepend RSpec::OpenAPI::Minitest::TestPatch +Minitest::Test.prepend RSpec::OpenAPI::Minitest::ActivateOpenApiClassMethods + +if ENV['OPENAPI'] + Minitest::Test.prepend RSpec::OpenAPI::Minitest::RunPatch -Minitest.after_run do - if ENV['OPENAPI'] + Minitest.after_run do result_recorder = RSpec::OpenAPI::ResultRecorder.new(RSpec::OpenAPI.path_records) result_recorder.record_results! puts result_record.error_message if result_recorder.errors?