From 7d3609e9a85de4fec19f59a1eca53ca0ce8d8af7 Mon Sep 17 00:00:00 2001 From: Alexey Dubovskoy Date: Sun, 2 Jun 2019 14:43:21 +0100 Subject: [PATCH] add real test agains active record --- .gitignore | 1 + Appraisals | 77 +++++++++++++++++++++++++ gemfiles/activerecord_4.0.gemfile | 11 ++++ gemfiles/activerecord_4.1.gemfile | 11 ++++ gemfiles/activerecord_4.2.gemfile | 11 ++++ gemfiles/activerecord_5.0.gemfile | 11 ++++ gemfiles/activerecord_5.1.gemfile | 11 ++++ gemfiles/activerecord_5.2.gemfile | 11 ++++ gemfiles/activerecord_6.0rc1.gemfile | 11 ++++ spec/active_record_intergration_spec.rb | 33 +++++++++++ spec/spec_helper.rb | 6 ++ spec/support/sql_helpers.rb | 39 +++++++++++++ 12 files changed, 233 insertions(+) create mode 100644 spec/active_record_intergration_spec.rb create mode 100644 spec/support/sql_helpers.rb diff --git a/.gitignore b/.gitignore index d7fcd1d..931a31d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ # rspec failure tracking .rspec_status *.gemfile.lock +.DS_Store diff --git a/Appraisals b/Appraisals index 10c0c93..c255d9a 100644 --- a/Appraisals +++ b/Appraisals @@ -1,28 +1,105 @@ appraise "activerecord-6.0rc1" do gem "activerecord", "~>6.0.0.rc1", require: "active_record" + + platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + platforms :ruby, :mswin, :mingw do + gem "pg", "~> 1.1.4" + gem "sqlite3", "~> 1.4.0" + end end appraise "activerecord-5.2" do gem "activerecord", "~>5.2", require: "active_record" + + gemfile.platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + gemfile.platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" + end end appraise "activerecord-5.1" do gem "activerecord", "~>5.1", require: "active_record" + + gemfile.platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + gemfile.platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" + end end appraise "activerecord-5.0" do gem "activerecord", "~>5.0", require: "active_record" + + gemfile.platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + gemfile.platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" + end end appraise "activerecord-4.2" do gem "activerecord", "~>4.2", require: "active_record" + + gemfile.platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + gemfile.platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" + end end appraise "activerecord-4.1" do gem "activerecord", "~>4.1", require: "active_record" + + gemfile.platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + gemfile.platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" + end end appraise "activerecord-4.0" do gem "activerecord", "~>4.0", require: "active_record" + + gemfile.platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" + end + + gemfile.platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" + end end diff --git a/gemfiles/activerecord_4.0.gemfile b/gemfiles/activerecord_4.0.gemfile index db402f3..c16aa78 100644 --- a/gemfiles/activerecord_4.0.gemfile +++ b/gemfiles/activerecord_4.0.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>4.0", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" +end + gemspec path: "../" diff --git a/gemfiles/activerecord_4.1.gemfile b/gemfiles/activerecord_4.1.gemfile index 46c4258..0c37f90 100644 --- a/gemfiles/activerecord_4.1.gemfile +++ b/gemfiles/activerecord_4.1.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>4.1", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" +end + gemspec path: "../" diff --git a/gemfiles/activerecord_4.2.gemfile b/gemfiles/activerecord_4.2.gemfile index ecabeb8..4a29b40 100644 --- a/gemfiles/activerecord_4.2.gemfile +++ b/gemfiles/activerecord_4.2.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>4.2", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" +end + gemspec path: "../" diff --git a/gemfiles/activerecord_5.0.gemfile b/gemfiles/activerecord_5.0.gemfile index 347ad10..d84b79a 100644 --- a/gemfiles/activerecord_5.0.gemfile +++ b/gemfiles/activerecord_5.0.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>5.0", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" +end + gemspec path: "../" diff --git a/gemfiles/activerecord_5.1.gemfile b/gemfiles/activerecord_5.1.gemfile index 9a980fd..e8b6957 100644 --- a/gemfiles/activerecord_5.1.gemfile +++ b/gemfiles/activerecord_5.1.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>5.1", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" +end + gemspec path: "../" diff --git a/gemfiles/activerecord_5.2.gemfile b/gemfiles/activerecord_5.2.gemfile index a903db8..2ff69b6 100644 --- a/gemfiles/activerecord_5.2.gemfile +++ b/gemfiles/activerecord_5.2.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>5.2", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "sqlite3", "~> 1.3.0" + gem "pg", "~> 0.21" +end + gemspec path: "../" diff --git a/gemfiles/activerecord_6.0rc1.gemfile b/gemfiles/activerecord_6.0rc1.gemfile index 539922d..78fbc92 100644 --- a/gemfiles/activerecord_6.0rc1.gemfile +++ b/gemfiles/activerecord_6.0rc1.gemfile @@ -4,4 +4,15 @@ source "https://rubygems.org" gem "activerecord", "~>6.0.0.rc1", require: "active_record" +platforms :jruby do + gem "activerecord-jdbcsqlite3-adapter" + gem "jdbc-sqlite3" + gem "jdbc-postgres" +end + +platforms :ruby, :mswin, :mingw do + gem "pg", "~> 1.1.4" + gem "sqlite3", "~> 1.4.0" +end + gemspec path: "../" diff --git a/spec/active_record_intergration_spec.rb b/spec/active_record_intergration_spec.rb new file mode 100644 index 0000000..56bcf2f --- /dev/null +++ b/spec/active_record_intergration_spec.rb @@ -0,0 +1,33 @@ +RSpec.describe "Integration with ActiveRecord" do + before :each do + define_db_schema do + create_table(:parents) do |t| + t.string :status + t.timestamps null: false + end + + create_table(:children) do |t| + t.integer :parent_id + t.timestamps null: false + end + end + + class Parent < ActiveRecord::Base + has_many :children, -> { order(id: :desc) } + end + + class Child < ActiveRecord::Base + belongs_to :parent + end + end + + it "filters parents" do + class MyFilter < ActionFilter::Base + field :status + end + + filter = MyFilter.new(status: "pending") + + expect(Parent.all.merge(filter).to_sql).to eq("SELECT \"parents\".* FROM \"parents\" WHERE \"parents\".\"status\" = 'pending'") + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index eda3cdd..9994207 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,6 +6,10 @@ Bundler.require +# Add support to load paths +$LOAD_PATH.unshift File.expand_path("support", __dir__) +Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } + RSpec.configure do |config| # Enable flags like --only-failures and --next-failure config.example_status_persistence_file_path = ".rspec_status" @@ -16,4 +20,6 @@ config.expect_with :rspec do |c| c.syntax = :expect end + + config.include SQLHelpers end diff --git a/spec/support/sql_helpers.rb b/spec/support/sql_helpers.rb new file mode 100644 index 0000000..bece89e --- /dev/null +++ b/spec/support/sql_helpers.rb @@ -0,0 +1,39 @@ +module SQLHelpers + + def connect_db + # ActiveRecord::Base.logger = Logger.new(STDOUT) + ActiveRecord::Base.logger = nil + + if ENV["DB"] == "sqlite" + connect_sqlite + elsif ENV["DB"] == "postgres" + connect_postgres + else + raise StandardError, "database not supported, provide it in ENV['DB']. Supported versions are: 'sqlite' and 'postgres'." + end + end + + def define_db_schema(&block) + connect_db + ActiveRecord::Migration.verbose = false + ActiveRecord::Schema.define(&block) + end + + private + + def connect_sqlite + ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") + end + + def connect_postgres + ActiveRecord::Base.establish_connection(adapter: "postgresql", host: "localhost", + database: "postgres", schema_search_path: "public") + + ActiveRecord::Base.connection.drop_database("action_filter_postgresql_spec") + ActiveRecord::Base.connection.create_database("action_filter_postgresql_spec", + encoding: "utf-8", adapter: "postgresql") + + ActiveRecord::Base.establish_connection(adapter: "postgresql", host: "localhost", + database: "action_filter_postgresql_spec") + end +end