Sha256: 9cb774a4aa648292e825eb9d47d99490e71b1cb24c7863cd427da78f6a423879

Contents?: true

Size: 1.71 KB

Versions: 67

Compression:

Stored size: 1.71 KB

Contents

# :nocov:
module PgEngine
  module Matchers
    module PgLogger
      class Base < RSpec::Rails::Matchers::BaseMatcher
        def initialize(text, level)
          super()
          @text = text
          @level = level
        end
      end

      class PgHaveLogged < Base
        def matches?(proc)
          msg = 'have_logged only support block expectations'
          raise ArgumentError, msg unless proc.is_a?(Proc)

          original_messages = Set.new(PgEngine::PgLogger.test_logged_messages)
          proc.call
          logged_messages = Set.new(PgEngine::PgLogger.test_logged_messages)

          @new_messages = logged_messages - original_messages
          @new_messages.any? do |level, message|
            if @text.present? && @level.present?
              level == @level && message.include?(@text)
            elsif @text.present?
              message.include? @text
            elsif @level.present?
              level == @level
            else
              true
            end
          end
        end

        def failure_message
          msg = "expected to #{@level || log}"
          msg << "with text: #{@text}" if @text.present?
          return msg unless @new_messages.any?

          msg << "\nLogged messages:"
          @new_messages.each do |level, message|
            msg << "\n  #{level}: #{message[0..200]}"
          end
          msg
        end

        def supports_block_expectations?
          true
        end
      end
    end

    def have_errored(text = nil) # rubocop:disable Naming/PredicateName
      PgLogger::PgHaveLogged.new(text, :error)
    end

    def have_warned(text = nil) # rubocop:disable Naming/PredicateName
      PgLogger::PgHaveLogged.new(text, :warn)
    end
  end
end
# :nocov:

Version data entries

67 entries across 67 versions & 1 rubygems

Version Path
pg_rails-7.5.3 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.5.2 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.5.1 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.5.0 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.4.3 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.4.2 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.4.1 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.4.0 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.3.5 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.3.4 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.3.3 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.3.2 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.3.1 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.3.0 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.2.3 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.2.2 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.2.1 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.2.0 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.1.16 pg_rails/lib/pg_rails/rspec_logger_matchers.rb
pg_rails-7.1.15 pg_rails/lib/pg_rails/rspec_logger_matchers.rb