Sha256: 8941665b876c30662eb2ecea79af1c92ad15f430bed4b0ed92a324e847ddbb3e

Contents?: true

Size: 1.89 KB

Versions: 12

Compression:

Stored size: 1.89 KB

Contents

require 'spec_helper'

require 'rails_core_extensions/sortable'

describe RailsCoreExtensions::Sortable do
  let(:model_class) {
    Class.new(ActiveRecord::Base) do
      default_scope -> { order(:name) }
    end
  }

  before do
    connect_to_sqlite

    stub_const 'Model', model_class

    models
  end

  let(:one) { Model.create!(name: 'One', position: 1, category_id: 1) }
  let(:two) { Model.create!(name: 'Two', position: 2, category_id: 1) }
  let(:thr) { Model.create!(name: 'Thr', position: 3, category_id: 2) }
  let(:models) { [one, two, thr] }

  after do
    models.each(&:destroy)
  end

  subject { RailsCoreExtensions::Sortable.new(ActionController::Parameters.new(params), 'models') }

  RSpec.shared_examples 'unscoped' do
    let(:scope) { Model.reorder(:position) }
    specify { expect(scope.pluck(:name)).to eq %w(One Two Thr) }
    it 'should correctly sort' do
      subject.sort
      expect(scope.pluck(:name)).to eq %w(One Thr Two)
    end
  end

  describe 'when unscoped due to blank scope' do
    let(:params) { { model_body: [one.id, thr.id, two.id], scope: "" } }
    it_behaves_like 'unscoped'
  end

  describe 'when unscoped due to lack of scope' do
    let(:params) { { model_body: [one.id, thr.id, two.id] } }
    it_behaves_like 'unscoped'
  end

  describe 'when scoped' do
    let(:scope) { Model.where(category_id: 1).reorder(:position) }
    specify { expect(scope.pluck(:name)).to eq %w(One Two) }

    let(:params) { { category_id: 1, scope: :category_id, model_1_body: [two.id, one.id] } }
    it 'should correctly sort' do
      subject.sort
      expect(scope.pluck(:name)).to eq %w(Two One)
    end

    describe 'when params scoped differently' do
      let(:params) { { category_id: 1, scope: :category_id, category_1_body: [two.id, one.id] } }
      it 'should correctly sort' do
        subject.sort
        expect(scope.pluck(:name)).to eq %w(Two One)
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
rails_core_extensions-0.15.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.14.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.13.2 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.13.1 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.13.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.12.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.11.3 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.11.2 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.11.1 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.11.0.beta.11 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.10.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.9.0 spec/action_controller_sortable_spec.rb