Sha256: c2c3f9431b01faf0dad8d3978c905d5cc7557ac2361bbbf961c63b12a71ee8b7

Contents?: true

Size: 1.8 KB

Versions: 12

Compression:

Stored size: 1.8 KB

Contents

module ARTest
  module SQLServer
    module QueryAssertions
      def assert_queries_count(count = nil, include_schema: false, &block)
        ActiveRecord::Base.lease_connection.materialize_transactions

        counter = ActiveRecord::Assertions::QueryAssertions::SQLCounter.new
        ActiveSupport::Notifications.subscribed(counter, "sql.active_record") do
          result = _assert_nothing_raised_or_warn("assert_queries_count", &block)
          queries = include_schema ? counter.log_all : counter.log

          # Start of monkey-patch
          queries = include_release_savepoint_placeholder_queries(queries)
          # End of monkey-patch

          if count
            assert_equal count, queries.size, "#{queries.size} instead of #{count} queries were executed. Queries: #{queries.join("\n\n")}"
          else
            assert_operator queries.size, :>=, 1, "1 or more queries expected, but none were executed.#{queries.empty? ? '' : "\nQueries:\n#{queries.join("\n")}"}"
          end
          result
        end
      end

      private

      # Rails tests expect a save-point to be created and released. SQL Server does not release
      # save-points and so the number of queries will be off. This monkey patch adds a placeholder queries
      # to replace the missing save-point releases.
      def include_release_savepoint_placeholder_queries(queries)
        grouped_queries = [[]]

        queries.each do |query|
          if query =~ /SAVE TRANSACTION \S+/
            grouped_queries << [query]
          else
            grouped_queries.last << query
          end
        end

        grouped_queries.each do |group|
          group.append "/* release savepoint placeholder for testing */" if group.first =~ /SAVE TRANSACTION \S+/
        end

        grouped_queries.flatten
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
activerecord-sqlserver-adapter-8.0.5 test/support/query_assertions.rb
activerecord-sqlserver-adapter-8.0.4 test/support/query_assertions.rb
activerecord-sqlserver-adapter-7.2.5 test/support/query_assertions.rb
activerecord-sqlserver-adapter-8.0.3 test/support/query_assertions.rb
activerecord-sqlserver-adapter-7.2.4 test/support/query_assertions.rb
activerecord-sqlserver-adapter-8.0.2 test/support/query_assertions.rb
activerecord-sqlserver-adapter-7.2.3 test/support/query_assertions.rb
activerecord-sqlserver-adapter-8.0.1 test/support/query_assertions.rb
activerecord-sqlserver-adapter-8.0.0 test/support/query_assertions.rb
activerecord-sqlserver-adapter-7.2.2 test/support/query_assertions.rb
activerecord-sqlserver-adapter-7.2.1 test/support/query_assertions.rb
activerecord-sqlserver-adapter-7.2.0 test/support/query_assertions.rb