order_test.rb 2.29 KB
require_relative "test_helper"

class OrderTest < Minitest::Test
  def test_order_hash
    store_names ["Product A", "Product B", "Product C", "Product D"]
    expected = ["Product D", "Product C", "Product B", "Product A"]
    assert_order "product", expected, order: {name: :desc}
    assert_equal expected, Product.search("product").order(name: :desc).map(&:name)
  end

  def test_order_string
    store_names ["Product A", "Product B", "Product C", "Product D"]
    expected = ["Product A", "Product B", "Product C", "Product D"]
    assert_order "product", expected, order: "name"
    assert_equal expected, Product.search("product").order("name").map(&:name)
  end

  def test_order_id
    skip if cequel?

    store_names ["Product A", "Product B"]
    product_a = Product.where(name: "Product A").first
    product_b = Product.where(name: "Product B").first
    expected = [product_a, product_b].sort_by { |r| r.id.to_s }.map(&:name)
    assert_order "product", expected, order: {id: :asc}
    # TODO fix in query?
    # assert_equal expected, Product.search("product").order(id: :asc).map(&:name)
  end

  def test_order_multiple
    store [
      {name: "Product A", color: "blue", store_id: 1},
      {name: "Product B", color: "red", store_id: 3},
      {name: "Product C", color: "red", store_id: 2}
    ]
    expected = ["Product A", "Product B", "Product C"]
    assert_order "product", expected, order: {color: :asc, store_id: :desc}
    assert_equal expected, Product.search("product").order(:color).order(store_id: :desc).map(&:name)
  end

  def test_reorder
    store [
      {name: "Product A", color: "blue", store_id: 1},
      {name: "Product B", color: "red", store_id: 3},
      {name: "Product C", color: "red", store_id: 2}
    ]
    expected = ["Product C", "Product B", "Product A"]
    assert_equal expected, Product.search("product").order(:store_id).reorder(name: :desc).map(&:name)
  end

  def test_order_unmapped_type
    assert_order "product", [], order: {not_mapped: {unmapped_type: "long"}}
    assert_search_relation [], Product.search("product").order(not_mapped: {unmapped_type: "long"})
  end

  def test_order_array
    store [{name: "San Francisco", latitude: 37.7833, longitude: -122.4167}]
    assert_order "francisco", ["San Francisco"], order: [{_geo_distance: {location: "0,0"}}]
  end
end