diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 2d252732..69a09f02 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -91,10 +91,6 @@ Metrics/ClassLength: Metrics/CyclomaticComplexity: Max: 13 -Metrics/LineLength: - Exclude: - - spec/**/* - # Offense count: 18 # Configuration parameters: CountComments. Metrics/MethodLength: diff --git a/spec/models/gadget_spec.rb b/spec/models/gadget_spec.rb index ab243cc7..34b1e9bf 100644 --- a/spec/models/gadget_spec.rb +++ b/spec/models/gadget_spec.rb @@ -16,7 +16,9 @@ describe Gadget, :type => :model do it "should still generate a version when only the `updated_at` attribute is updated" do # Plus 1 second because MySQL lacks sub-second resolution - expect { gadget.update_attribute(:updated_at, Time.now + 1) }.to change{gadget.versions.size}.by(1) + expect { + gadget.update_attribute(:updated_at, Time.now + 1) + }.to change{gadget.versions.size}.by(1) end end diff --git a/spec/models/version_spec.rb b/spec/models/version_spec.rb index 7ca2b05b..ba10514e 100644 --- a/spec/models/version_spec.rb +++ b/spec/models/version_spec.rb @@ -122,8 +122,12 @@ describe PaperTrail::Version, :type => :model do if override ActiveRecord::Base.connection.execute("SAVEPOINT pgtest;") %w[object object_changes].each do |column| - ActiveRecord::Base.connection.execute("ALTER TABLE versions DROP COLUMN #{column};") - ActiveRecord::Base.connection.execute("ALTER TABLE versions ADD COLUMN #{column} #{override};") + ActiveRecord::Base.connection.execute( + "ALTER TABLE versions DROP COLUMN #{column};" + ) + ActiveRecord::Base.connection.execute( + "ALTER TABLE versions ADD COLUMN #{column} #{override};" + ) end PaperTrail::Version.reset_column_information end @@ -140,8 +144,12 @@ describe PaperTrail::Version, :type => :model do context "invalid arguments" do it "should raise an error" do - expect { PaperTrail::Version.where_object(:foo) }.to raise_error(ArgumentError) - expect { PaperTrail::Version.where_object([]) }.to raise_error(ArgumentError) + expect { + PaperTrail::Version.where_object(:foo) + }.to raise_error(ArgumentError) + expect { + PaperTrail::Version.where_object([]) + }.to raise_error(ArgumentError) end end @@ -157,24 +165,41 @@ describe PaperTrail::Version, :type => :model do end context "`serializer == YAML`" do - specify { expect(PaperTrail.serializer).to be PaperTrail::Serializers::YAML } + specify do + expect(PaperTrail.serializer).to be PaperTrail::Serializers::YAML + end it "should be able to locate versions according to their `object` contents" do - expect(PaperTrail::Version.where_object(:name => name)).to eq([widget.versions[1]]) - expect(PaperTrail::Version.where_object(:an_integer => 100)).to eq([widget.versions[2]]) + expect( + PaperTrail::Version.where_object(:name => name) + ).to eq([widget.versions[1]]) + expect( + PaperTrail::Version.where_object(:an_integer => 100) + ).to eq([widget.versions[2]]) end end - context "`serializer == JSON`" do - before(:all) { PaperTrail.serializer = PaperTrail::Serializers::JSON } - specify { expect(PaperTrail.serializer).to be PaperTrail::Serializers::JSON } - - it "should be able to locate versions according to their `object` contents" do - expect(PaperTrail::Version.where_object(:name => name)).to eq([widget.versions[1]]) - expect(PaperTrail::Version.where_object(:an_integer => 100)).to eq([widget.versions[2]]) + context "JSON serializer" do + before(:all) do + PaperTrail.serializer = PaperTrail::Serializers::JSON end - after(:all) { PaperTrail.serializer = PaperTrail::Serializers::YAML } + specify do + expect(PaperTrail.serializer).to be PaperTrail::Serializers::JSON + end + + it "should be able to locate versions according to their `object` contents" do + expect( + PaperTrail::Version.where_object(:name => name) + ).to eq([widget.versions[1]]) + expect( + PaperTrail::Version.where_object(:an_integer => 100) + ).to eq([widget.versions[2]]) + end + + after(:all) do + PaperTrail.serializer = PaperTrail::Serializers::YAML + end end end end @@ -182,8 +207,12 @@ describe PaperTrail::Version, :type => :model do describe '#where_object_changes' do context "invalid arguments" do it "should raise an error" do - expect { PaperTrail::Version.where_object_changes(:foo) }.to raise_error(ArgumentError) - expect { PaperTrail::Version.where_object_changes([]) }.to raise_error(ArgumentError) + expect { + PaperTrail::Version.where_object_changes(:foo) + }.to raise_error(ArgumentError) + expect { + PaperTrail::Version.where_object_changes([]) + }.to raise_error(ArgumentError) end end @@ -198,32 +227,48 @@ describe PaperTrail::Version, :type => :model do widget.update_attributes!(:name => FFaker::Name.last_name, :an_integer => int) end - context "`serializer == YAML`" do + context "YAML serializer" do specify { expect(PaperTrail.serializer).to be PaperTrail::Serializers::YAML } - it "should be able to locate versions according to their `object_changes` contents" do - expect(widget.versions.where_object_changes(:name => name)).to eq(widget.versions[0..1]) - expect(widget.versions.where_object_changes(:an_integer => 77)).to eq(widget.versions[1..2]) - expect(widget.versions.where_object_changes(:an_integer => int)).to eq([widget.versions.last]) + it "locates versions according to their `object_changes` contents" do + expect( + widget.versions.where_object_changes(:name => name) + ).to eq(widget.versions[0..1]) + expect( + widget.versions.where_object_changes(:an_integer => 77) + ).to eq(widget.versions[1..2]) + expect( + widget.versions.where_object_changes(:an_integer => int) + ).to eq([widget.versions.last]) end - it "should be able to handle queries for multiple attributes" do - expect(widget.versions.where_object_changes(:an_integer => 77, :name => 'foobar')).to eq(widget.versions[1..2]) + it "handles queries for multiple attributes" do + expect( + widget.versions.where_object_changes(:an_integer => 77, :name => 'foobar') + ).to eq(widget.versions[1..2]) end end - context "`serializer == JSON`" do + context "JSON serializer" do before(:all) { PaperTrail.serializer = PaperTrail::Serializers::JSON } specify { expect(PaperTrail.serializer).to be PaperTrail::Serializers::JSON } - it "should be able to locate versions according to their `object_changes` contents" do - expect(widget.versions.where_object_changes(:name => name)).to eq(widget.versions[0..1]) - expect(widget.versions.where_object_changes(:an_integer => 77)).to eq(widget.versions[1..2]) - expect(widget.versions.where_object_changes(:an_integer => int)).to eq([widget.versions.last]) + it "locates versions according to their `object_changes` contents" do + expect( + widget.versions.where_object_changes(:name => name) + ).to eq(widget.versions[0..1]) + expect( + widget.versions.where_object_changes(:an_integer => 77) + ).to eq(widget.versions[1..2]) + expect( + widget.versions.where_object_changes(:an_integer => int) + ).to eq([widget.versions.last]) end - it "should be able to handle queries for multiple attributes" do - expect(widget.versions.where_object_changes(:an_integer => 77, :name => 'foobar')).to eq(widget.versions[1..2]) + it "handles queries for multiple attributes" do + expect( + widget.versions.where_object_changes(:an_integer => 77, :name => 'foobar') + ).to eq(widget.versions[1..2]) end after(:all) { PaperTrail.serializer = PaperTrail::Serializers::YAML } diff --git a/spec/models/widget_spec.rb b/spec/models/widget_spec.rb index 65dbacaf..c099ebfe 100644 --- a/spec/models/widget_spec.rb +++ b/spec/models/widget_spec.rb @@ -21,15 +21,15 @@ describe Widget, :type => :model do end end - describe "`versioning` option" do - context :enabled, :versioning => true do - it 'should enable versioning for models wrapped within a block' do + describe "versioning option" do + context "enabled", :versioning => true do + it "should enable versioning" do expect(widget.versions.size).to eq(1) end end - context '`disabled` (default)' do - it 'should not enable versioning for models wrapped within a block not marked to used versioning' do + context "disabled (default)" do + it "should not enable versioning" do expect(widget.versions.size).to eq(0) end end @@ -42,7 +42,7 @@ describe Widget, :type => :model do subject { widget.versions.last.reify } - it "should reset the value for the timestamp attrs for update so that value gets updated properly" do + it "resets value for timestamp attrs for update so that value gets updated properly" do # Travel 1 second because MySQL lacks sub-second resolution Timecop.travel(1) do expect { subject.save! }.to change(subject, :updated_at) @@ -214,7 +214,9 @@ describe Widget, :type => :model do context "no block given" do it "should raise an error" do - expect { widget.whodunnit('Ben') }.to raise_error(ArgumentError, 'expected to receive a block') + expect { + widget.whodunnit('Ben') + }.to raise_error(ArgumentError, 'expected to receive a block') end end @@ -235,13 +237,15 @@ describe Widget, :type => :model do expect(widget.versions.last.whodunnit).to eq(new_name) end - it "should revert the value of `PaperTrail.whodunnit` to it's previous value after executing the block" do - widget.whodunnit(new_name) { |w| w.update_attributes(:name => 'Elizabeth') } - expect(PaperTrail.whodunnit).to eq(orig_name) + context "after executing the block" do + it "reverts value of whodunnit to previous value" do + widget.whodunnit(new_name) { |w| w.update_attributes(:name => 'Elizabeth') } + expect(PaperTrail.whodunnit).to eq(orig_name) + end end context "error within block" do - it "should ensure that the whodunnit value still reverts to it's previous value" do + it "still reverts the whodunnit value to previous value" do expect { widget.whodunnit(new_name) { raise } }.to raise_error(RuntimeError) diff --git a/spec/requests/articles_spec.rb b/spec/requests/articles_spec.rb index a39fc847..2acc7e1e 100644 --- a/spec/requests/articles_spec.rb +++ b/spec/requests/articles_spec.rb @@ -8,7 +8,9 @@ describe "Articles management", :type => :request, :order => :defined do it "should not create a version" do expect(PaperTrail).to be_enabled_for_controller - expect { post articles_path, params_wrapper(valid_params) }.to_not change(PaperTrail::Version, :count) + expect { + post articles_path, params_wrapper(valid_params) + }.to_not change(PaperTrail::Version, :count) end it "should not leak the state of the `PaperTrail.enabled_for_controller?` into the next test" do @@ -21,7 +23,9 @@ describe "Articles management", :type => :request, :order => :defined do context "`current_user` method returns a `String`" do it "should set that value as the `whodunnit`" do - expect { post articles_path, params_wrapper(valid_params) }.to change(PaperTrail::Version, :count).by(1) + expect { + post articles_path, params_wrapper(valid_params) + }.to change(PaperTrail::Version, :count).by(1) expect(article.title).to eq('Doh') expect(article.versions.last.whodunnit).to eq('foobar') end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 36b63407..4d5944fb 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -103,13 +103,17 @@ RSpec.configure do |config| =end end +def active_record_gem_version + Gem::Version.new(ActiveRecord::VERSION::STRING) +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) && Gem::Version.new(ActiveRecord::VERSION::STRING) >= Gem::Version.new('5.0.0.beta1') + if defined?(::Rails) && active_record_gem_version >= Gem::Version.new('5.0.0.beta1') { params: args } else args end -end \ No newline at end of file +end