Sha256: 6f1f919248904a89ff86b073d850345800111175cd433ffab6b72314126d47fd

Contents?: true

Size: 1.99 KB

Versions: 12

Compression:

Stored size: 1.99 KB

Contents

require 'rails_spec_helper'

describe 'SQL events' do
  include_context 'Rails app pg database', 'spec/fixtures/rails6_users_app' do
    def self.check_queries(cases)
      cases.each do |test_case, query|
        context "in #{test_case}" do
          let(:test_case) { test_case }
          it "captures #{query}" do
            expect(sql_events).to include sql_query query
          end
        end
      end
    end

    context 'with Sequel' do
      before(:context) { run_specs 'sequel' }

      check_queries(
        'Api_UsersController_POST_api_users_with_required_parameters_creates_a_user' =>
          %(INSERT INTO "users" ("login") VALUES ('alice') RETURNING *),
        'Api_UsersController_GET_api_users_lists_the_users' => %(SELECT * FROM "users")
      )
    end

    context 'with ActiveRecord' do
      before(:context) { run_specs 'activerecord' }

      check_queries(
        'Api_UsersController_POST_api_users_with_required_parameters_creates_a_user' =>
          %(INSERT INTO "users" ("login") VALUES ($1) RETURNING "id"),
        'Api_UsersController_GET_api_users_lists_the_users' => %(SELECT "users".* FROM "users")
      )
    end

    def run_specs(orm_module)
      @app.prepare_db
      @app.run_cmd \
        './bin/rspec spec/controllers/users_controller_api_spec.rb:8 spec/controllers/users_controller_api_spec.rb:29',
        'ORM_MODULE' => orm_module,
        'RAILS_ENV' => 'test',
        'APPMAP' => 'true'
    end

    let(:appmap_json) { File.join tmpdir, "appmap/rspec/#{test_case}.appmap.json" }
    let(:appmap) { JSON.parse(File.read(appmap_json)) }
    let(:tmpdir) { app.tmpdir }
    let(:sql_events) { appmap['events'].select { |ev| ev.include? 'sql_query' } }

    RSpec::Matchers.define_negated_matcher :not_include, :include
    def sql_query(query)
      (include('sql_query' => (include 'sql' => query)))
        .and(not_include('defined_class'))
        .and(not_include('method_id'))
        .and(not_include('path'))
        .and(not_include('lineno'))
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
appmap-0.83.4 spec/record_sql_rails_pg_spec.rb
appmap-0.83.3 spec/record_sql_rails_pg_spec.rb
appmap-0.83.2 spec/record_sql_rails_pg_spec.rb
appmap-0.83.1 spec/record_sql_rails_pg_spec.rb
appmap-0.83.0 spec/record_sql_rails_pg_spec.rb
appmap-0.82.0 spec/record_sql_rails_pg_spec.rb
appmap-0.81.1 spec/record_sql_rails_pg_spec.rb
appmap-0.81.0 spec/record_sql_rails_pg_spec.rb
appmap-0.80.2 spec/record_sql_rails_pg_spec.rb
appmap-0.80.1 spec/record_sql_rails_pg_spec.rb
appmap-0.80.0 spec/record_sql_rails_pg_spec.rb
appmap-0.79.0 spec/record_sql_rails_pg_spec.rb