Sha256: 5b852dec0e618289075f3c0c1627ff5270487e4f2ecbbb993d068cb8cec45660

Contents?: true

Size: 1.61 KB

Versions: 5

Compression:

Stored size: 1.61 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

  let(:params) { { model_body: [one.id, thr.id, two.id] } }
  subject { RailsCoreExtensions::Sortable.new(params, 'models') }

  describe 'when 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 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

5 entries across 5 versions & 1 rubygems

Version Path
rails_core_extensions-0.4.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.3.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.2.0 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.1.1 spec/action_controller_sortable_spec.rb
rails_core_extensions-0.1.0 spec/action_controller_sortable_spec.rb