Sha256: 47a6f92a7a2e3a142752c18d708f65c0762b37dbaf8830168873c33fbee12ba2

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

RSpec.describe ActiveAdmin::SortableTable, 'Drag-and-Drop', type: :feature do
  before do
    Category.create!
    Category.create!
    Category.create!
  end

  def ordered_elements
    Category.order(:position).pluck(:id)
  end

  context 'first page' do
    it 'reorder elements by dragging vertically', js: true do
      expect(ordered_elements).to eq([1, 2, 3])

      visit admin_categories_path

      expect(visible_elements).to eq([1, 2, 3])

      move_higher(2)

      expect(visible_elements).to eq([2, 1, 3])
      expect(ordered_elements).to eq([2, 1, 3])
    end
  end

  context 'second page' do
    before do
      Category.create!
      Category.create!
      Category.create!
    end

    it 'reorder elements by dragging vertically', js: true do
      expect(ordered_elements).to eq([1, 2, 3, 4, 5, 6])

      visit admin_categories_path(page: 2)

      expect(visible_elements).to eq([4, 5, 6])

      move_higher(5)

      expect(visible_elements).to eq([5, 4, 6])
      expect(ordered_elements).to eq([1, 2, 3, 5, 4, 6])
    end
  end

  private

  def visible_elements
    all('.ui-sortable-handle .col-id').map(&:text).map(&:to_i)
  end

  def move_higher(element_id)
    drag_element(element_id, dy: -200)
  end

  def drag_element(element_id, options)
    wait_for_ajax do
      options.reverse_merge! moves: 20
      page.execute_script(%($("#category_#{element_id} .handle").simulate("drag", #{options.to_json} )))
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
activeadmin_sortable_table-1.1.0 spec/features/drag_and_drop_spec.rb