From 7cfeae1f890900e1b018c77d20cb0923b6717c3b Mon Sep 17 00:00:00 2001 From: MUTOgen Date: Sun, 18 Aug 2024 16:56:43 +0200 Subject: [PATCH] Update VCR logic --- lib/cypress_on_rails/vcr/base_middleware.rb | 6 +++- .../vcr/use_cassette_middleware.rb | 10 ++++++- .../vcr/use_cassette_middleware_spec.rb | 28 +++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/cypress_on_rails/vcr/base_middleware.rb b/lib/cypress_on_rails/vcr/base_middleware.rb index 92b82e2..5d2d082 100644 --- a/lib/cypress_on_rails/vcr/base_middleware.rb +++ b/lib/cypress_on_rails/vcr/base_middleware.rb @@ -25,11 +25,15 @@ def vcr def configure_vcr require 'vcr' VCR.configure do |config| - config.cassette_library_dir = "#{configuration.install_folder}/fixtures/vcr_cassettes" + config.cassette_library_dir = cassette_library_dir end VCR end + def cassette_library_dir + "#{configuration.install_folder}/fixtures/vcr_cassettes" + end + def raise_not_implemented raise NotImplementedError, 'BaseMiddleware can not be initialized directly, use InsertEjectMiddleware or UseCassetteMiddleware' diff --git a/lib/cypress_on_rails/vcr/use_cassette_middleware.rb b/lib/cypress_on_rails/vcr/use_cassette_middleware.rb index ccc9fb3..dca75b0 100644 --- a/lib/cypress_on_rails/vcr/use_cassette_middleware.rb +++ b/lib/cypress_on_rails/vcr/use_cassette_middleware.rb @@ -1,4 +1,3 @@ -require 'cypress_on_rails/configuration' require_relative 'base_middleware' module CypressOnRails @@ -11,6 +10,11 @@ def initialize(app, vcr = nil) end def call(env) + vcr_initialized = vcr_defined? && + VCR.configuration.cassette_library_dir.present? && + VCR.configuration.cassette_library_dir != cassette_library_dir + return @app.call(env) if vcr_initialized + WebMock.enable! if defined?(WebMock) vcr.turn_on! request = Rack::Request.new(env) @@ -23,6 +27,10 @@ def call(env) private + def vcr_defined? + defined?(VCR) != nil + end + def fetch_request_cassette(request) if request.path.start_with?('/graphql') && request.params.key?('operation') "#{request.path}/#{request.params['operation']}" diff --git a/spec/cypress_on_rails/vcr/use_cassette_middleware_spec.rb b/spec/cypress_on_rails/vcr/use_cassette_middleware_spec.rb index 2b48686..8688333 100644 --- a/spec/cypress_on_rails/vcr/use_cassette_middleware_spec.rb +++ b/spec/cypress_on_rails/vcr/use_cassette_middleware_spec.rb @@ -39,6 +39,34 @@ def rack_input(json_value) expect(vcr).to have_received(:use_cassette) .with('/test/path', hash_including(record: :once)) end + + context 'when VCR cassette library directory does not match' do + before do + allow(VCR.configuration).to receive(:cassette_library_dir).and_return('/different/path') + end + + it 'returns the application response without using VCR' do + env['PATH_INFO'] = '/test/path' + + expect(response).to eq([200, {}, ['app did /test/path']]) + expect(vcr).not_to have_received(:use_cassette) + end + end + + context 'when VCR is not defined' do + before do + allow(subject).to receive(:vcr_defined?).and_return(false) + end + + it 'returns the application response without error' do + env['PATH_INFO'] = '/graphql' + env['QUERY_STRING'] = 'operation=test' + + expect(response).to eq([200, {}, ['app did /graphql']]) + expect(vcr).to have_received(:use_cassette) + .with('/graphql/test', hash_including(record: :new_episodes)) + end + end end end end