From 94b93066479ca5b9932582699d5a61700ed927fd Mon Sep 17 00:00:00 2001 From: Jared Beck Date: Sat, 10 Jun 2017 01:28:48 -0400 Subject: [PATCH] Finish the conversion to RSpec - Convert serializers/mixin_json_test.rb to rspec - Convert functional/thread_safety_test.rb to rspec - Convert functional/controller_test.rb to rspec - Move the dummy app from test to spec, delete test dir --- .github/CONTRIBUTING.md | 44 +++++---- .gitignore | 8 +- .rubocop.yml | 4 +- Rakefile | 5 +- lib/paper_trail/version_concern.rb | 2 +- paper_trail.gemspec | 3 +- spec/controllers/widgets_controller_spec.rb | 85 ++++++++++++++++++ {test/dummy => spec/dummy_app}/Rakefile | 0 .../app/controllers/application_controller.rb | 0 .../app/controllers/articles_controller.rb | 0 .../app/controllers/test_controller.rb | 0 .../app/controllers/widgets_controller.rb | 0 .../dummy_app}/app/models/animal.rb | 0 .../dummy_app}/app/models/article.rb | 0 .../dummy_app}/app/models/authorship.rb | 0 .../dummy_app}/app/models/bar_habtm.rb | 0 .../dummy_app}/app/models/book.rb | 0 .../dummy_app}/app/models/boolit.rb | 0 .../app/models/callback_modifier.rb | 0 .../dummy_app}/app/models/car.rb | 0 .../dummy_app}/app/models/cat.rb | 0 .../dummy_app}/app/models/chapter.rb | 0 .../dummy_app}/app/models/citation.rb | 0 .../app/models/custom_primary_key_record.rb | 0 .../dummy_app}/app/models/customer.rb | 0 .../dummy_app}/app/models/document.rb | 0 .../dummy_app}/app/models/dog.rb | 0 .../dummy_app}/app/models/editor.rb | 0 .../dummy_app}/app/models/editorship.rb | 0 .../dummy_app}/app/models/elephant.rb | 0 .../dummy_app}/app/models/fluxor.rb | 0 .../dummy_app}/app/models/foo_habtm.rb | 0 .../dummy_app}/app/models/foo_widget.rb | 0 .../dummy_app}/app/models/fruit.rb | 0 .../dummy_app}/app/models/gadget.rb | 0 .../dummy_app}/app/models/kitchen/banana.rb | 0 .../dummy_app}/app/models/legacy_widget.rb | 0 .../dummy_app}/app/models/line_item.rb | 0 .../dummy_app}/app/models/not_on_update.rb | 0 .../dummy_app}/app/models/on/create.rb | 0 .../dummy_app}/app/models/on/destroy.rb | 0 .../dummy_app}/app/models/on/empty_array.rb | 0 .../dummy_app}/app/models/on/update.rb | 0 .../dummy_app}/app/models/order.rb | 0 .../dummy_app}/app/models/paragraph.rb | 0 .../dummy_app}/app/models/person.rb | 0 .../dummy_app}/app/models/post.rb | 0 .../dummy_app}/app/models/post_with_status.rb | 0 .../dummy_app}/app/models/quotation.rb | 0 .../dummy_app}/app/models/section.rb | 0 .../dummy_app}/app/models/skipper.rb | 0 .../dummy_app}/app/models/song.rb | 0 .../dummy_app}/app/models/thing.rb | 0 .../dummy_app}/app/models/translation.rb | 0 .../dummy_app}/app/models/truck.rb | 0 .../dummy_app}/app/models/vehicle.rb | 0 .../dummy_app}/app/models/whatchamajigger.rb | 0 .../dummy_app}/app/models/widget.rb | 0 .../dummy_app}/app/models/wotsit.rb | 0 .../custom_primary_key_record_version.rb | 0 .../dummy_app}/app/versions/joined_version.rb | 0 .../dummy_app}/app/versions/json_version.rb | 0 .../app/versions/kitchen/banana_version.rb | 0 .../dummy_app}/app/versions/post_version.rb | 0 {test/dummy => spec/dummy_app}/config.ru | 0 .../dummy_app}/config/application.rb | 0 {test/dummy => spec/dummy_app}/config/boot.rb | 0 .../dummy_app}/config/database.mysql.yml | 0 .../dummy_app}/config/database.postgres.yml | 0 .../dummy_app}/config/database.sqlite.yml | 0 .../dummy_app}/config/environment.rb | 0 .../config/environments/development.rb | 0 .../config/environments/production.rb | 0 .../dummy_app}/config/environments/test.rb | 0 .../initializers/backtrace_silencers.rb | 0 .../config/initializers/inflections.rb | 0 .../config/initializers/mime_types.rb | 0 .../config/initializers/paper_trail.rb | 0 .../config/initializers/secret_token.rb | 0 .../config/initializers/session_store.rb | 0 .../dummy_app}/config/locales/en.yml | 0 .../dummy => spec/dummy_app}/config/routes.rb | 0 .../20110208155312_set_up_test_tables.rb | 0 {test/dummy => spec/dummy_app}/db/schema.rb | 0 .../custom_json_serializer_spec.rb | 18 ++++ spec/paper_trail/thread_safety_spec.rb | 44 +++++++++ spec/spec_helper.rb | 16 ++-- test/functional/controller_test.rb | 90 ------------------- test/functional/thread_safety_test.rb | 46 ---------- test/test_helper.rb | 68 -------------- test/unit/serializers/mixin_json_test.rb | 39 -------- 91 files changed, 185 insertions(+), 287 deletions(-) create mode 100644 spec/controllers/widgets_controller_spec.rb rename {test/dummy => spec/dummy_app}/Rakefile (100%) rename {test/dummy => spec/dummy_app}/app/controllers/application_controller.rb (100%) rename {test/dummy => spec/dummy_app}/app/controllers/articles_controller.rb (100%) rename {test/dummy => spec/dummy_app}/app/controllers/test_controller.rb (100%) rename {test/dummy => spec/dummy_app}/app/controllers/widgets_controller.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/animal.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/article.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/authorship.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/bar_habtm.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/book.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/boolit.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/callback_modifier.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/car.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/cat.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/chapter.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/citation.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/custom_primary_key_record.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/customer.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/document.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/dog.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/editor.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/editorship.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/elephant.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/fluxor.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/foo_habtm.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/foo_widget.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/fruit.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/gadget.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/kitchen/banana.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/legacy_widget.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/line_item.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/not_on_update.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/on/create.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/on/destroy.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/on/empty_array.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/on/update.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/order.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/paragraph.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/person.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/post.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/post_with_status.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/quotation.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/section.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/skipper.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/song.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/thing.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/translation.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/truck.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/vehicle.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/whatchamajigger.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/widget.rb (100%) rename {test/dummy => spec/dummy_app}/app/models/wotsit.rb (100%) rename {test/dummy => spec/dummy_app}/app/versions/custom_primary_key_record_version.rb (100%) rename {test/dummy => spec/dummy_app}/app/versions/joined_version.rb (100%) rename {test/dummy => spec/dummy_app}/app/versions/json_version.rb (100%) rename {test/dummy => spec/dummy_app}/app/versions/kitchen/banana_version.rb (100%) rename {test/dummy => spec/dummy_app}/app/versions/post_version.rb (100%) rename {test/dummy => spec/dummy_app}/config.ru (100%) rename {test/dummy => spec/dummy_app}/config/application.rb (100%) rename {test/dummy => spec/dummy_app}/config/boot.rb (100%) rename {test/dummy => spec/dummy_app}/config/database.mysql.yml (100%) rename {test/dummy => spec/dummy_app}/config/database.postgres.yml (100%) rename {test/dummy => spec/dummy_app}/config/database.sqlite.yml (100%) rename {test/dummy => spec/dummy_app}/config/environment.rb (100%) rename {test/dummy => spec/dummy_app}/config/environments/development.rb (100%) rename {test/dummy => spec/dummy_app}/config/environments/production.rb (100%) rename {test/dummy => spec/dummy_app}/config/environments/test.rb (100%) rename {test/dummy => spec/dummy_app}/config/initializers/backtrace_silencers.rb (100%) rename {test/dummy => spec/dummy_app}/config/initializers/inflections.rb (100%) rename {test/dummy => spec/dummy_app}/config/initializers/mime_types.rb (100%) rename {test/dummy => spec/dummy_app}/config/initializers/paper_trail.rb (100%) rename {test/dummy => spec/dummy_app}/config/initializers/secret_token.rb (100%) rename {test/dummy => spec/dummy_app}/config/initializers/session_store.rb (100%) rename {test/dummy => spec/dummy_app}/config/locales/en.yml (100%) rename {test/dummy => spec/dummy_app}/config/routes.rb (100%) rename {test/dummy => spec/dummy_app}/db/migrate/20110208155312_set_up_test_tables.rb (100%) rename {test/dummy => spec/dummy_app}/db/schema.rb (100%) create mode 100644 spec/paper_trail/serializers/custom_json_serializer_spec.rb create mode 100644 spec/paper_trail/thread_safety_spec.rb delete mode 100644 test/functional/controller_test.rb delete mode 100644 test/functional/thread_safety_test.rb delete mode 100644 test/test_helper.rb delete mode 100644 test/unit/serializers/mixin_json_test.rb diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index b7fc909b..f9c7cf71 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -7,10 +7,7 @@ https://stackoverflow.com/tags/paper-trail-gem **Please do not use github issues to ask usage questions.** -On github, we appreciate bug reports, feature -suggestions, and especially pull requests. - -Thanks, and happy (paper) trails :) +On github, we appreciate bug reports, feature suggestions, and pull requests. ## Reporting Bugs @@ -32,13 +29,13 @@ Testing is a little awkward because the test suite: ``` # Create the appropriate database config. file -rm test/dummy/config/database.yml +rm spec/dummy_app/config/database.yml DB=sqlite bundle exec rake prepare # If this is the first test run ever, create databases. -# We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`. -# See test/dummy/config/boot.rb for a complete explanation. -cd test/dummy +# We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`. +# See spec/dummy_app/config/boot.rb for a complete explanation. +cd spec/dummy_app export BUNDLE_GEMFILE=../../gemfiles/ar_4.2.gemfile RAILS_ENV=test bundle exec rake db:setup RAILS_ENV=foo bundle exec rake db:setup @@ -49,8 +46,7 @@ cd ../.. # Run tests DB=sqlite bundle exec appraisal ar-4.2 rake -# Run a single test file -DB=sqlite bundle exec appraisal ar-4.2 ruby -I test test/unit/associations_test.rb +# Run a single test DB=sqlite bundle exec appraisal ar-4.2 rspec spec/paper_trail/serializers/json_spec.rb ``` @@ -58,13 +54,13 @@ DB=sqlite bundle exec appraisal ar-4.2 rspec spec/paper_trail/serializers/json_s ``` # Create the appropriate database config. file -rm test/dummy/config/database.yml +rm spec/dummy_app/config/database.yml DB=sqlite bundle exec rake prepare # If this is the first test run ever, create databases. -# We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`. -# See test/dummy/config/boot.rb for a complete explanation. -cd test/dummy +# We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`. +# See spec/dummy_app/config/boot.rb for a complete explanation. +cd spec/dummy_app export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile RAILS_ENV=test bundle exec rake db:environment:set db:setup RAILS_ENV=foo bundle exec rake db:environment:set db:setup @@ -80,13 +76,13 @@ DB=sqlite bundle exec appraisal ar-5.0 rake ``` # Create the appropriate database config. file -rm test/dummy/config/database.yml +rm spec/dummy_app/config/database.yml DB=mysql bundle exec rake prepare # If this is the first test run ever, create databases. -# We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`. -# See test/dummy/config/boot.rb for a complete explanation. -cd test/dummy +# We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`. +# See spec/dummy_app/config/boot.rb for a complete explanation. +cd spec/dummy_app export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile RAILS_ENV=test bundle exec rake db:environment:set db:setup RAILS_ENV=foo bundle exec rake db:environment:set db:setup @@ -102,14 +98,14 @@ DB=mysql bundle exec appraisal ar-5.0 rake ``` # Create the appropriate database config. file -rm test/dummy/config/database.yml +rm spec/dummy_app/config/database.yml DB=postgres bundle exec rake prepare # If this is the first test run ever, create databases. # Unlike mysql, use create/migrate instead of setup. -# We can't use `appraisal` inside the test dummy, so we must set `BUNDLE_GEMFILE`. -# See test/dummy/config/boot.rb for a complete explanation. -cd test/dummy +# We can't use `appraisal` inside the dummy app, so we must set `BUNDLE_GEMFILE`. +# See spec/dummy_app/config/boot.rb for a complete explanation. +cd spec/dummy_app export BUNDLE_GEMFILE=../../gemfiles/ar_5.0.gemfile DB=postgres RAILS_ENV=test bundle exec rake db:drop db:create db:migrate DB=postgres RAILS_ENV=foo bundle exec rake db:drop db:create db:migrate @@ -124,10 +120,10 @@ DB=postgres bundle exec appraisal ar-5.0 rake ## Editing the migration -After editing `test/dummy/db/migrate/20110208155312_set_up_test_tables.rb` .. +After editing `spec/dummy_app/db/migrate/20110208155312_set_up_test_tables.rb` .. ``` -cd test/dummy +cd spec/dummy_app export BUNDLE_GEMFILE=../../gemfiles/ar_5.1.gemfile RAILS_ENV=test bundle exec rake db:environment:set db:drop db:create db:migrate RAILS_ENV=foo bundle exec rake db:environment:set db:drop db:create db:migrate diff --git a/.gitignore b/.gitignore index 17ef9ac2..ce94e7c4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,10 +2,10 @@ gemfiles/*.lock NOTES test/debug.log test/paper_trail_plugin.sqlite3.db -test/dummy/config/database.yml -test/dummy/db/*.sqlite3 -test/dummy/log/* -test/dummy/tmp/* +spec/dummy_app/config/database.yml +spec/dummy_app/db/*.sqlite3 +spec/dummy_app/log/* +spec/dummy_app/tmp/* spec/dummy/ coverage pkg/* diff --git a/.rubocop.yml b/.rubocop.yml index 7760f7f0..5d28d745 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -12,7 +12,7 @@ inherit_from: .rubocop_todo.yml AllCops: Exclude: - gemfiles/vendor/bundle/**/* # This dir only shows up on travis ¯\_(ツ)_/¯ - - test/dummy/db/schema.rb # Generated, out of our control + - spec/dummy_app/db/schema.rb # Generated, out of our control # Set to lowest supported version TargetRubyVersion: 2.1 @@ -21,7 +21,7 @@ AllCops: # from these is of questionable value. Metrics/AbcSize: Exclude: - - 'test/dummy/db/migrate/*' + - 'spec/dummy_app/db/migrate/*' # Not a useful metric compared to, e.g. `AbcSize`. Metrics/BlockLength: diff --git a/Rakefile b/Rakefile index 39e75cb3..236eeb2e 100644 --- a/Rakefile +++ b/Rakefile @@ -4,7 +4,10 @@ Bundler::GemHelper.install_tasks desc "Set a relevant database.yml for testing" task :prepare do ENV["DB"] ||= "sqlite" - FileUtils.cp "test/dummy/config/database.#{ENV['DB']}.yml", "test/dummy/config/database.yml" + FileUtils.cp( + "spec/dummy_app/config/database.#{ENV['DB']}.yml", + "spec/dummy_app/config/database.yml" + ) end require "rake/testtask" diff --git a/lib/paper_trail/version_concern.rb b/lib/paper_trail/version_concern.rb index 31751ec4..f744d7e7 100644 --- a/lib/paper_trail/version_concern.rb +++ b/lib/paper_trail/version_concern.rb @@ -17,7 +17,7 @@ module PaperTrail # Since the test suite has test coverage for this, we want to declare # the association when the test suite is running. This makes it pass when # DB is not initialized prior to test runs such as when we run on Travis - # CI (there won't be a db in `test/dummy/db/`). + # CI (there won't be a db in `spec/dummy_app/db/`). if PaperTrail.config.track_associations? has_many :version_associations, dependent: :destroy end diff --git a/paper_trail.gemspec b/paper_trail.gemspec index edac1661..e95a59f6 100644 --- a/paper_trail.gemspec +++ b/paper_trail.gemspec @@ -30,10 +30,9 @@ has been destroyed. s.add_development_dependency "appraisal", "~> 2.1" s.add_development_dependency "rake", "~> 12.0" - s.add_development_dependency "shoulda", "~> 3.5" s.add_development_dependency "ffaker", "~> 2.5" - # Why `railties`? Possibly used by `test/dummy` boot up? + # Why `railties`? Possibly used by `spec/dummy_app` boot up? s.add_development_dependency "railties", [">= 4.0", "< 5.2"] s.add_development_dependency "rack-test", "~> 0.6.3" diff --git a/spec/controllers/widgets_controller_spec.rb b/spec/controllers/widgets_controller_spec.rb new file mode 100644 index 00000000..da1edd23 --- /dev/null +++ b/spec/controllers/widgets_controller_spec.rb @@ -0,0 +1,85 @@ +require "spec_helper" + +RSpec.describe WidgetsController, type: :controller, versioning: true do + before { request.env["REMOTE_ADDR"] = "127.0.0.1" } + after { RequestStore.store[:paper_trail] = nil } + + describe "#create" do + context "PT enabled" do + it "stores information like IP address in version" do + post(:create, params_wrapper(widget: { name: "Flugel" })) + widget = assigns(:widget) + expect(widget.versions.length).to(eq(1)) + expect(widget.versions.last.whodunnit.to_i).to(eq(153)) + expect(widget.versions.last.ip).to(eq("127.0.0.1")) + expect(widget.versions.last.user_agent).to(eq("Rails Testing")) + end + + it "controller metadata methods should get evaluated" do + request.env["HTTP_USER_AGENT"] = "User-Agent" + post :create, params_wrapper(widget: { name: "Flugel" }) + expect(PaperTrail.enabled_for_controller?).to(eq(true)) + expect(PaperTrail.whodunnit).to(eq(153)) + expect(PaperTrail.controller_info.present?).to(eq(true)) + expect(PaperTrail.controller_info.keys.include?(:ip)).to(eq(true)) + expect(PaperTrail.controller_info.keys.include?(:user_agent)).to(eq(true)) + end + end + + context "PT disabled" do + it "does not save a version, and metadata is not set" do + request.env["HTTP_USER_AGENT"] = "Disable User-Agent" + post :create, params_wrapper(widget: { name: "Flugel" }) + expect(assigns(:widget).versions.length).to(eq(0)) + expect(PaperTrail).not_to be_enabled_for_controller + expect(PaperTrail.whodunnit).to be_nil + expect(PaperTrail.controller_info).to eq({}) + end + end + end + + describe "#destroy" do + it "can be disabled" do + request.env["HTTP_USER_AGENT"] = "Disable User-Agent" + post(:create, params_wrapper(widget: { name: "Flugel" })) + w = assigns(:widget) + expect(w.versions.length).to(eq(0)) + delete(:destroy, params_wrapper(id: w.id)) + expect(PaperTrail::Version.with_item_keys("Widget", w.id).size).to(eq(0)) + end + + it "stores information like IP address in version" do + w = Widget.create(name: "Roundel") + expect(w.versions.length).to(eq(1)) + delete(:destroy, params_wrapper(id: w.id)) + widget = assigns(:widget) + expect(widget.versions.length).to(eq(2)) + expect(widget.versions.last.ip).to(eq("127.0.0.1")) + expect(widget.versions.last.user_agent).to(eq("Rails Testing")) + expect(widget.versions.last.whodunnit.to_i).to(eq(153)) + end + end + + describe "#update" do + it "stores information like IP address in version" do + w = Widget.create(name: "Duvel") + expect(w.versions.length).to(eq(1)) + put(:update, params_wrapper(id: w.id, widget: { name: "Bugle" })) + widget = assigns(:widget) + expect(widget.versions.length).to(eq(2)) + expect(widget.versions.last.whodunnit.to_i).to(eq(153)) + expect(widget.versions.last.ip).to(eq("127.0.0.1")) + expect(widget.versions.last.user_agent).to(eq("Rails Testing")) + end + + it "can be disabled" do + request.env["HTTP_USER_AGENT"] = "Disable User-Agent" + post(:create, params_wrapper(widget: { name: "Flugel" })) + w = assigns(:widget) + expect(w.versions.length).to(eq(0)) + put(:update, params_wrapper(id: w.id, widget: { name: "Bugle" })) + widget = assigns(:widget) + expect(widget.versions.length).to(eq(0)) + end + end +end diff --git a/test/dummy/Rakefile b/spec/dummy_app/Rakefile similarity index 100% rename from test/dummy/Rakefile rename to spec/dummy_app/Rakefile diff --git a/test/dummy/app/controllers/application_controller.rb b/spec/dummy_app/app/controllers/application_controller.rb similarity index 100% rename from test/dummy/app/controllers/application_controller.rb rename to spec/dummy_app/app/controllers/application_controller.rb diff --git a/test/dummy/app/controllers/articles_controller.rb b/spec/dummy_app/app/controllers/articles_controller.rb similarity index 100% rename from test/dummy/app/controllers/articles_controller.rb rename to spec/dummy_app/app/controllers/articles_controller.rb diff --git a/test/dummy/app/controllers/test_controller.rb b/spec/dummy_app/app/controllers/test_controller.rb similarity index 100% rename from test/dummy/app/controllers/test_controller.rb rename to spec/dummy_app/app/controllers/test_controller.rb diff --git a/test/dummy/app/controllers/widgets_controller.rb b/spec/dummy_app/app/controllers/widgets_controller.rb similarity index 100% rename from test/dummy/app/controllers/widgets_controller.rb rename to spec/dummy_app/app/controllers/widgets_controller.rb diff --git a/test/dummy/app/models/animal.rb b/spec/dummy_app/app/models/animal.rb similarity index 100% rename from test/dummy/app/models/animal.rb rename to spec/dummy_app/app/models/animal.rb diff --git a/test/dummy/app/models/article.rb b/spec/dummy_app/app/models/article.rb similarity index 100% rename from test/dummy/app/models/article.rb rename to spec/dummy_app/app/models/article.rb diff --git a/test/dummy/app/models/authorship.rb b/spec/dummy_app/app/models/authorship.rb similarity index 100% rename from test/dummy/app/models/authorship.rb rename to spec/dummy_app/app/models/authorship.rb diff --git a/test/dummy/app/models/bar_habtm.rb b/spec/dummy_app/app/models/bar_habtm.rb similarity index 100% rename from test/dummy/app/models/bar_habtm.rb rename to spec/dummy_app/app/models/bar_habtm.rb diff --git a/test/dummy/app/models/book.rb b/spec/dummy_app/app/models/book.rb similarity index 100% rename from test/dummy/app/models/book.rb rename to spec/dummy_app/app/models/book.rb diff --git a/test/dummy/app/models/boolit.rb b/spec/dummy_app/app/models/boolit.rb similarity index 100% rename from test/dummy/app/models/boolit.rb rename to spec/dummy_app/app/models/boolit.rb diff --git a/test/dummy/app/models/callback_modifier.rb b/spec/dummy_app/app/models/callback_modifier.rb similarity index 100% rename from test/dummy/app/models/callback_modifier.rb rename to spec/dummy_app/app/models/callback_modifier.rb diff --git a/test/dummy/app/models/car.rb b/spec/dummy_app/app/models/car.rb similarity index 100% rename from test/dummy/app/models/car.rb rename to spec/dummy_app/app/models/car.rb diff --git a/test/dummy/app/models/cat.rb b/spec/dummy_app/app/models/cat.rb similarity index 100% rename from test/dummy/app/models/cat.rb rename to spec/dummy_app/app/models/cat.rb diff --git a/test/dummy/app/models/chapter.rb b/spec/dummy_app/app/models/chapter.rb similarity index 100% rename from test/dummy/app/models/chapter.rb rename to spec/dummy_app/app/models/chapter.rb diff --git a/test/dummy/app/models/citation.rb b/spec/dummy_app/app/models/citation.rb similarity index 100% rename from test/dummy/app/models/citation.rb rename to spec/dummy_app/app/models/citation.rb diff --git a/test/dummy/app/models/custom_primary_key_record.rb b/spec/dummy_app/app/models/custom_primary_key_record.rb similarity index 100% rename from test/dummy/app/models/custom_primary_key_record.rb rename to spec/dummy_app/app/models/custom_primary_key_record.rb diff --git a/test/dummy/app/models/customer.rb b/spec/dummy_app/app/models/customer.rb similarity index 100% rename from test/dummy/app/models/customer.rb rename to spec/dummy_app/app/models/customer.rb diff --git a/test/dummy/app/models/document.rb b/spec/dummy_app/app/models/document.rb similarity index 100% rename from test/dummy/app/models/document.rb rename to spec/dummy_app/app/models/document.rb diff --git a/test/dummy/app/models/dog.rb b/spec/dummy_app/app/models/dog.rb similarity index 100% rename from test/dummy/app/models/dog.rb rename to spec/dummy_app/app/models/dog.rb diff --git a/test/dummy/app/models/editor.rb b/spec/dummy_app/app/models/editor.rb similarity index 100% rename from test/dummy/app/models/editor.rb rename to spec/dummy_app/app/models/editor.rb diff --git a/test/dummy/app/models/editorship.rb b/spec/dummy_app/app/models/editorship.rb similarity index 100% rename from test/dummy/app/models/editorship.rb rename to spec/dummy_app/app/models/editorship.rb diff --git a/test/dummy/app/models/elephant.rb b/spec/dummy_app/app/models/elephant.rb similarity index 100% rename from test/dummy/app/models/elephant.rb rename to spec/dummy_app/app/models/elephant.rb diff --git a/test/dummy/app/models/fluxor.rb b/spec/dummy_app/app/models/fluxor.rb similarity index 100% rename from test/dummy/app/models/fluxor.rb rename to spec/dummy_app/app/models/fluxor.rb diff --git a/test/dummy/app/models/foo_habtm.rb b/spec/dummy_app/app/models/foo_habtm.rb similarity index 100% rename from test/dummy/app/models/foo_habtm.rb rename to spec/dummy_app/app/models/foo_habtm.rb diff --git a/test/dummy/app/models/foo_widget.rb b/spec/dummy_app/app/models/foo_widget.rb similarity index 100% rename from test/dummy/app/models/foo_widget.rb rename to spec/dummy_app/app/models/foo_widget.rb diff --git a/test/dummy/app/models/fruit.rb b/spec/dummy_app/app/models/fruit.rb similarity index 100% rename from test/dummy/app/models/fruit.rb rename to spec/dummy_app/app/models/fruit.rb diff --git a/test/dummy/app/models/gadget.rb b/spec/dummy_app/app/models/gadget.rb similarity index 100% rename from test/dummy/app/models/gadget.rb rename to spec/dummy_app/app/models/gadget.rb diff --git a/test/dummy/app/models/kitchen/banana.rb b/spec/dummy_app/app/models/kitchen/banana.rb similarity index 100% rename from test/dummy/app/models/kitchen/banana.rb rename to spec/dummy_app/app/models/kitchen/banana.rb diff --git a/test/dummy/app/models/legacy_widget.rb b/spec/dummy_app/app/models/legacy_widget.rb similarity index 100% rename from test/dummy/app/models/legacy_widget.rb rename to spec/dummy_app/app/models/legacy_widget.rb diff --git a/test/dummy/app/models/line_item.rb b/spec/dummy_app/app/models/line_item.rb similarity index 100% rename from test/dummy/app/models/line_item.rb rename to spec/dummy_app/app/models/line_item.rb diff --git a/test/dummy/app/models/not_on_update.rb b/spec/dummy_app/app/models/not_on_update.rb similarity index 100% rename from test/dummy/app/models/not_on_update.rb rename to spec/dummy_app/app/models/not_on_update.rb diff --git a/test/dummy/app/models/on/create.rb b/spec/dummy_app/app/models/on/create.rb similarity index 100% rename from test/dummy/app/models/on/create.rb rename to spec/dummy_app/app/models/on/create.rb diff --git a/test/dummy/app/models/on/destroy.rb b/spec/dummy_app/app/models/on/destroy.rb similarity index 100% rename from test/dummy/app/models/on/destroy.rb rename to spec/dummy_app/app/models/on/destroy.rb diff --git a/test/dummy/app/models/on/empty_array.rb b/spec/dummy_app/app/models/on/empty_array.rb similarity index 100% rename from test/dummy/app/models/on/empty_array.rb rename to spec/dummy_app/app/models/on/empty_array.rb diff --git a/test/dummy/app/models/on/update.rb b/spec/dummy_app/app/models/on/update.rb similarity index 100% rename from test/dummy/app/models/on/update.rb rename to spec/dummy_app/app/models/on/update.rb diff --git a/test/dummy/app/models/order.rb b/spec/dummy_app/app/models/order.rb similarity index 100% rename from test/dummy/app/models/order.rb rename to spec/dummy_app/app/models/order.rb diff --git a/test/dummy/app/models/paragraph.rb b/spec/dummy_app/app/models/paragraph.rb similarity index 100% rename from test/dummy/app/models/paragraph.rb rename to spec/dummy_app/app/models/paragraph.rb diff --git a/test/dummy/app/models/person.rb b/spec/dummy_app/app/models/person.rb similarity index 100% rename from test/dummy/app/models/person.rb rename to spec/dummy_app/app/models/person.rb diff --git a/test/dummy/app/models/post.rb b/spec/dummy_app/app/models/post.rb similarity index 100% rename from test/dummy/app/models/post.rb rename to spec/dummy_app/app/models/post.rb diff --git a/test/dummy/app/models/post_with_status.rb b/spec/dummy_app/app/models/post_with_status.rb similarity index 100% rename from test/dummy/app/models/post_with_status.rb rename to spec/dummy_app/app/models/post_with_status.rb diff --git a/test/dummy/app/models/quotation.rb b/spec/dummy_app/app/models/quotation.rb similarity index 100% rename from test/dummy/app/models/quotation.rb rename to spec/dummy_app/app/models/quotation.rb diff --git a/test/dummy/app/models/section.rb b/spec/dummy_app/app/models/section.rb similarity index 100% rename from test/dummy/app/models/section.rb rename to spec/dummy_app/app/models/section.rb diff --git a/test/dummy/app/models/skipper.rb b/spec/dummy_app/app/models/skipper.rb similarity index 100% rename from test/dummy/app/models/skipper.rb rename to spec/dummy_app/app/models/skipper.rb diff --git a/test/dummy/app/models/song.rb b/spec/dummy_app/app/models/song.rb similarity index 100% rename from test/dummy/app/models/song.rb rename to spec/dummy_app/app/models/song.rb diff --git a/test/dummy/app/models/thing.rb b/spec/dummy_app/app/models/thing.rb similarity index 100% rename from test/dummy/app/models/thing.rb rename to spec/dummy_app/app/models/thing.rb diff --git a/test/dummy/app/models/translation.rb b/spec/dummy_app/app/models/translation.rb similarity index 100% rename from test/dummy/app/models/translation.rb rename to spec/dummy_app/app/models/translation.rb diff --git a/test/dummy/app/models/truck.rb b/spec/dummy_app/app/models/truck.rb similarity index 100% rename from test/dummy/app/models/truck.rb rename to spec/dummy_app/app/models/truck.rb diff --git a/test/dummy/app/models/vehicle.rb b/spec/dummy_app/app/models/vehicle.rb similarity index 100% rename from test/dummy/app/models/vehicle.rb rename to spec/dummy_app/app/models/vehicle.rb diff --git a/test/dummy/app/models/whatchamajigger.rb b/spec/dummy_app/app/models/whatchamajigger.rb similarity index 100% rename from test/dummy/app/models/whatchamajigger.rb rename to spec/dummy_app/app/models/whatchamajigger.rb diff --git a/test/dummy/app/models/widget.rb b/spec/dummy_app/app/models/widget.rb similarity index 100% rename from test/dummy/app/models/widget.rb rename to spec/dummy_app/app/models/widget.rb diff --git a/test/dummy/app/models/wotsit.rb b/spec/dummy_app/app/models/wotsit.rb similarity index 100% rename from test/dummy/app/models/wotsit.rb rename to spec/dummy_app/app/models/wotsit.rb diff --git a/test/dummy/app/versions/custom_primary_key_record_version.rb b/spec/dummy_app/app/versions/custom_primary_key_record_version.rb similarity index 100% rename from test/dummy/app/versions/custom_primary_key_record_version.rb rename to spec/dummy_app/app/versions/custom_primary_key_record_version.rb diff --git a/test/dummy/app/versions/joined_version.rb b/spec/dummy_app/app/versions/joined_version.rb similarity index 100% rename from test/dummy/app/versions/joined_version.rb rename to spec/dummy_app/app/versions/joined_version.rb diff --git a/test/dummy/app/versions/json_version.rb b/spec/dummy_app/app/versions/json_version.rb similarity index 100% rename from test/dummy/app/versions/json_version.rb rename to spec/dummy_app/app/versions/json_version.rb diff --git a/test/dummy/app/versions/kitchen/banana_version.rb b/spec/dummy_app/app/versions/kitchen/banana_version.rb similarity index 100% rename from test/dummy/app/versions/kitchen/banana_version.rb rename to spec/dummy_app/app/versions/kitchen/banana_version.rb diff --git a/test/dummy/app/versions/post_version.rb b/spec/dummy_app/app/versions/post_version.rb similarity index 100% rename from test/dummy/app/versions/post_version.rb rename to spec/dummy_app/app/versions/post_version.rb diff --git a/test/dummy/config.ru b/spec/dummy_app/config.ru similarity index 100% rename from test/dummy/config.ru rename to spec/dummy_app/config.ru diff --git a/test/dummy/config/application.rb b/spec/dummy_app/config/application.rb similarity index 100% rename from test/dummy/config/application.rb rename to spec/dummy_app/config/application.rb diff --git a/test/dummy/config/boot.rb b/spec/dummy_app/config/boot.rb similarity index 100% rename from test/dummy/config/boot.rb rename to spec/dummy_app/config/boot.rb diff --git a/test/dummy/config/database.mysql.yml b/spec/dummy_app/config/database.mysql.yml similarity index 100% rename from test/dummy/config/database.mysql.yml rename to spec/dummy_app/config/database.mysql.yml diff --git a/test/dummy/config/database.postgres.yml b/spec/dummy_app/config/database.postgres.yml similarity index 100% rename from test/dummy/config/database.postgres.yml rename to spec/dummy_app/config/database.postgres.yml diff --git a/test/dummy/config/database.sqlite.yml b/spec/dummy_app/config/database.sqlite.yml similarity index 100% rename from test/dummy/config/database.sqlite.yml rename to spec/dummy_app/config/database.sqlite.yml diff --git a/test/dummy/config/environment.rb b/spec/dummy_app/config/environment.rb similarity index 100% rename from test/dummy/config/environment.rb rename to spec/dummy_app/config/environment.rb diff --git a/test/dummy/config/environments/development.rb b/spec/dummy_app/config/environments/development.rb similarity index 100% rename from test/dummy/config/environments/development.rb rename to spec/dummy_app/config/environments/development.rb diff --git a/test/dummy/config/environments/production.rb b/spec/dummy_app/config/environments/production.rb similarity index 100% rename from test/dummy/config/environments/production.rb rename to spec/dummy_app/config/environments/production.rb diff --git a/test/dummy/config/environments/test.rb b/spec/dummy_app/config/environments/test.rb similarity index 100% rename from test/dummy/config/environments/test.rb rename to spec/dummy_app/config/environments/test.rb diff --git a/test/dummy/config/initializers/backtrace_silencers.rb b/spec/dummy_app/config/initializers/backtrace_silencers.rb similarity index 100% rename from test/dummy/config/initializers/backtrace_silencers.rb rename to spec/dummy_app/config/initializers/backtrace_silencers.rb diff --git a/test/dummy/config/initializers/inflections.rb b/spec/dummy_app/config/initializers/inflections.rb similarity index 100% rename from test/dummy/config/initializers/inflections.rb rename to spec/dummy_app/config/initializers/inflections.rb diff --git a/test/dummy/config/initializers/mime_types.rb b/spec/dummy_app/config/initializers/mime_types.rb similarity index 100% rename from test/dummy/config/initializers/mime_types.rb rename to spec/dummy_app/config/initializers/mime_types.rb diff --git a/test/dummy/config/initializers/paper_trail.rb b/spec/dummy_app/config/initializers/paper_trail.rb similarity index 100% rename from test/dummy/config/initializers/paper_trail.rb rename to spec/dummy_app/config/initializers/paper_trail.rb diff --git a/test/dummy/config/initializers/secret_token.rb b/spec/dummy_app/config/initializers/secret_token.rb similarity index 100% rename from test/dummy/config/initializers/secret_token.rb rename to spec/dummy_app/config/initializers/secret_token.rb diff --git a/test/dummy/config/initializers/session_store.rb b/spec/dummy_app/config/initializers/session_store.rb similarity index 100% rename from test/dummy/config/initializers/session_store.rb rename to spec/dummy_app/config/initializers/session_store.rb diff --git a/test/dummy/config/locales/en.yml b/spec/dummy_app/config/locales/en.yml similarity index 100% rename from test/dummy/config/locales/en.yml rename to spec/dummy_app/config/locales/en.yml diff --git a/test/dummy/config/routes.rb b/spec/dummy_app/config/routes.rb similarity index 100% rename from test/dummy/config/routes.rb rename to spec/dummy_app/config/routes.rb diff --git a/test/dummy/db/migrate/20110208155312_set_up_test_tables.rb b/spec/dummy_app/db/migrate/20110208155312_set_up_test_tables.rb similarity index 100% rename from test/dummy/db/migrate/20110208155312_set_up_test_tables.rb rename to spec/dummy_app/db/migrate/20110208155312_set_up_test_tables.rb diff --git a/test/dummy/db/schema.rb b/spec/dummy_app/db/schema.rb similarity index 100% rename from test/dummy/db/schema.rb rename to spec/dummy_app/db/schema.rb diff --git a/spec/paper_trail/serializers/custom_json_serializer_spec.rb b/spec/paper_trail/serializers/custom_json_serializer_spec.rb new file mode 100644 index 00000000..92dc1f30 --- /dev/null +++ b/spec/paper_trail/serializers/custom_json_serializer_spec.rb @@ -0,0 +1,18 @@ +require "spec_helper" +require_relative "../../support/custom_json_serializer" + +RSpec.describe CustomJsonSerializer do + describe ".load" do + it "deserializes, removing pairs with blank keys or values" do + hash = { "key1" => "banana", "tkey" => nil, "" => "foo" } + expect(described_class.load(hash.to_json)).to(eq("key1" => "banana")) + end + end + + describe ".dump" do + it "serializes to JSON, removing pairs with nil values" do + hash = { "key1" => "banana", "tkey" => nil, "" => "foo" } + expect(described_class.dump(hash)).to(eq('{"key1":"banana","":"foo"}')) + end + end +end diff --git a/spec/paper_trail/thread_safety_spec.rb b/spec/paper_trail/thread_safety_spec.rb new file mode 100644 index 00000000..6835434d --- /dev/null +++ b/spec/paper_trail/thread_safety_spec.rb @@ -0,0 +1,44 @@ +require "spec_helper" + +RSpec.describe PaperTrail do + describe "#set_paper_trail_whodunnit" do + it "is thread-safe" do + blocked = true + slow_thread = Thread.new do + controller = TestController.new + controller.send(:set_paper_trail_whodunnit) + sleep(0.001) while blocked + described_class.whodunnit + end + fast_thread = Thread.new do + controller = TestController.new + controller.send(:set_paper_trail_whodunnit) + who = described_class.whodunnit + blocked = false + who + end + expect(fast_thread.value).not_to(eq(slow_thread.value)) + end + end + + describe "#without_versioning" do + it "is thread-safe" do + enabled = nil + slow_thread = Thread.new do + Widget.new.paper_trail.without_versioning do + sleep(0.01) + enabled = Widget.paper_trail.enabled? + sleep(0.01) + end + enabled + end + fast_thread = Thread.new do + sleep(0.005) + Widget.paper_trail.enabled? + end + expect(fast_thread.value).not_to(eq(slow_thread.value)) + expect(Widget.paper_trail.enabled?).to(eq(true)) + expect(described_class.enabled_for_model?(Widget)).to(eq(true)) + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index f3ad7ba7..5ce9dcf5 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,13 +1,13 @@ +require "pry" + # This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] ||= "test" ENV["DB"] ||= "sqlite" -unless File.exist?(File.expand_path("../../test/dummy/config/database.yml", __FILE__)) +unless File.exist?(File.expand_path("dummy_app/config/database.yml", __dir__)) warn "WARNING: No database.yml detected for the dummy app, please run `rake prepare` first" end -require "pry" - RSpec.configure do |config| config.expect_with :rspec do |expectations| expectations.include_chain_clauses_in_custom_matcher_descriptions = true @@ -52,18 +52,14 @@ def params_wrapper(args) end end -require File.expand_path("../../test/dummy/config/environment", __FILE__) +require File.expand_path("../dummy_app/config/environment", __FILE__) require "rspec/rails" require "paper_trail/frameworks/rspec" require "ffaker" require "timecop" -# prevent Test::Unit's AutoRunner from executing during RSpec's rake task -Test::Unit.run = true if defined?(Test::Unit) && Test::Unit.respond_to?(:run=) - -# Checks for pending migrations before tests are run. -# If you are not using ActiveRecord, you can remove this line. -ActiveRecord::Migration.check_pending! if ActiveRecord::Migration.respond_to?(:check_pending!) +# Run any available migration +ActiveRecord::Migrator.migrate File.expand_path("dummy_app/db/migrate/", __dir__) require "database_cleaner" DatabaseCleaner.strategy = :truncation diff --git a/test/functional/controller_test.rb b/test/functional/controller_test.rb deleted file mode 100644 index 657f6e30..00000000 --- a/test/functional/controller_test.rb +++ /dev/null @@ -1,90 +0,0 @@ -require "test_helper" - -class ControllerTest < ActionController::TestCase - tests WidgetsController - - setup do - @request.env["REMOTE_ADDR"] = "127.0.0.1" - end - - # Mimick what RequestStore will do outside of the test env, since it is - # middleware, and doesn't get executed in controller / request specs - teardown do - RequestStore.store[:paper_trail] = nil - end - - test "disable on create" do - @request.env["HTTP_USER_AGENT"] = "Disable User-Agent" - post :create, params_wrapper(widget: { name: "Flugel" }) - assert_equal 0, assigns(:widget).versions.length - end - - test "disable on update" do - @request.env["HTTP_USER_AGENT"] = "Disable User-Agent" - post :create, params_wrapper(widget: { name: "Flugel" }) - w = assigns(:widget) - assert_equal 0, w.versions.length - put :update, params_wrapper(id: w.id, widget: { name: "Bugle" }) - widget = assigns(:widget) - assert_equal 0, widget.versions.length - end - - test "disable on destroy" do - @request.env["HTTP_USER_AGENT"] = "Disable User-Agent" - post :create, params_wrapper(widget: { name: "Flugel" }) - w = assigns(:widget) - assert_equal 0, w.versions.length - delete :destroy, params_wrapper(id: w.id) - assert_equal 0, PaperTrail::Version.with_item_keys("Widget", w.id).size - end - - test "create" do - post :create, params_wrapper(widget: { name: "Flugel" }) - widget = assigns(:widget) - assert_equal 1, widget.versions.length - assert_equal 153, widget.versions.last.whodunnit.to_i - assert_equal "127.0.0.1", widget.versions.last.ip - assert_equal "Rails Testing", widget.versions.last.user_agent - end - - test "update" do - w = Widget.create name: "Duvel" - assert_equal 1, w.versions.length - put :update, params_wrapper(id: w.id, widget: { name: "Bugle" }) - widget = assigns(:widget) - assert_equal 2, widget.versions.length - assert_equal 153, widget.versions.last.whodunnit.to_i - assert_equal "127.0.0.1", widget.versions.last.ip - assert_equal "Rails Testing", widget.versions.last.user_agent - end - - test "destroy" do - w = Widget.create name: "Roundel" - assert_equal 1, w.versions.length - delete :destroy, params_wrapper(id: w.id) - widget = assigns(:widget) - assert_equal 2, widget.versions.length - assert_equal "127.0.0.1", widget.versions.last.ip - assert_equal "Rails Testing", widget.versions.last.user_agent - assert_equal 153, widget.versions.last.whodunnit.to_i - end - - test "controller metadata methods should get evaluated if PT enabled for controller" do - @request.env["HTTP_USER_AGENT"] = "User-Agent" - post :create, params_wrapper(widget: { name: "Flugel" }) - assert PaperTrail.enabled_for_controller? - assert_equal 153, PaperTrail.whodunnit - assert PaperTrail.controller_info.present? - assert PaperTrail.controller_info.keys.include?(:ip) - assert PaperTrail.controller_info.keys.include?(:user_agent) - end - - test "controller metadata methods should not get evaluated if PT disabled for controller" do - @request.env["HTTP_USER_AGENT"] = "Disable User-Agent" - post :create, params_wrapper(widget: { name: "Flugel" }) - assert_equal 0, assigns(:widget).versions.length - assert !PaperTrail.enabled_for_controller? - assert PaperTrail.whodunnit.nil? - assert PaperTrail.controller_info.nil? - end -end diff --git a/test/functional/thread_safety_test.rb b/test/functional/thread_safety_test.rb deleted file mode 100644 index 15ed27ce..00000000 --- a/test/functional/thread_safety_test.rb +++ /dev/null @@ -1,46 +0,0 @@ -require "test_helper" - -class ThreadSafetyTest < ActionController::TestCase - test "thread-safe when using #set_paper_trail_whodunnit" do - blocked = true - - slow_thread = Thread.new do - controller = TestController.new - controller.send :set_paper_trail_whodunnit - sleep 0.001 while blocked - PaperTrail.whodunnit - end - - fast_thread = Thread.new do - controller = TestController.new - controller.send :set_paper_trail_whodunnit - who = PaperTrail.whodunnit - blocked = false - who - end - - assert_not_equal slow_thread.value, fast_thread.value - end - - test "thread-safe when using #without_versioning" do - enabled = nil - - slow_thread = Thread.new do - Widget.new.paper_trail.without_versioning do - sleep(0.01) - enabled = Widget.paper_trail.enabled? - sleep(0.01) - end - enabled - end - - fast_thread = Thread.new do - sleep(0.005) - Widget.paper_trail.enabled? - end - - assert_not_equal slow_thread.value, fast_thread.value - assert Widget.paper_trail.enabled? - assert PaperTrail.enabled_for_model?(Widget) - end -end diff --git a/test/test_helper.rb b/test/test_helper.rb deleted file mode 100644 index 53a792d3..00000000 --- a/test/test_helper.rb +++ /dev/null @@ -1,68 +0,0 @@ -require "pry" - -ENV["RAILS_ENV"] = "test" -ENV["DB"] ||= "sqlite" - -unless File.exist?(File.expand_path("../../test/dummy/config/database.yml", __FILE__)) - warn "WARNING: No database.yml detected for the dummy app, please run `rake prepare` first" -end - -def using_mysql? - @using_mysql ||= ActiveRecord::Base.connection_config[:adapter].to_sym == :mysql2 -end - -require File.expand_path("../dummy/config/environment.rb", __FILE__) -require "rails/test_help" -require "shoulda" -require "ffaker" -require "database_cleaner" - -def active_record_gem_version - Gem::Version.new(ActiveRecord::VERSION::STRING) -end - -if active_record_gem_version >= Gem::Version.new("5.0.0.beta1") - # See https://github.com/rails/rails-controller-testing/issues/5 - ActionController::TestCase.send(:include, Rails::Controller::Testing::TestProcess) -end - -Rails.backtrace_cleaner.remove_silencers! - -# Run any available migration -ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__) - -# Load support files -Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } - -# DatabaseCleaner is apparently necessary for doing proper transactions within MySQL (ugh) -DatabaseCleaner.strategy = :truncation - -# global setup block resetting Thread.current -module ActiveSupport - class TestCase - if using_mysql? - if respond_to? :use_transactional_tests= - self.use_transactional_tests = false - else - self.use_transactional_fixtures = false - end - setup { DatabaseCleaner.start } - end - - teardown do - DatabaseCleaner.clean if using_mysql? - Thread.current[:paper_trail] = nil - end - end -end - -# Wrap args in a hash to support the ActionController::TestCase and -# ActionDispatch::Integration HTTP request method switch to keyword args -# (see https://github.com/rails/rails/blob/master/actionpack/CHANGELOG.md) -def params_wrapper(args) - if defined?(::Rails) && active_record_gem_version >= Gem::Version.new("5.0.0.beta1") - { params: args } - else - args - end -end diff --git a/test/unit/serializers/mixin_json_test.rb b/test/unit/serializers/mixin_json_test.rb deleted file mode 100644 index 7a560a75..00000000 --- a/test/unit/serializers/mixin_json_test.rb +++ /dev/null @@ -1,39 +0,0 @@ -require "test_helper" -require_relative "../../../spec/support/custom_json_serializer" - -class MixinJsonTest < ActiveSupport::TestCase - setup do - # Setup a hash with random values, ensuring some values are nil - @hash = {} - (1..4).each do |i| - @hash["key#{i}"] = [FFaker::Lorem.word, nil].sample - end - @hash["tkey"] = nil - @hash[""] = "foo" - @hash_as_json = @hash.to_json - end - - context "`load` class method" do - should "exist" do - assert CustomJsonSerializer.respond_to?(:load) - end - - should "`deserialize` JSON to Ruby, removing pairs with `blank` keys or values" do - assert_equal( - @hash.reject { |k, v| k.blank? || v.blank? }, - CustomJsonSerializer.load(@hash_as_json) - ) - end - end - - context "`dump` class method" do - should "exist" do - assert CustomJsonSerializer.respond_to?(:dump) - end - - should "`serialize` Ruby to JSON, removing pairs with `nil` values" do - assert_equal @hash.reject { |_k, v| v.nil? }.to_json, - CustomJsonSerializer.dump(@hash) - end - end -end