Merges orders_helper functionality inside has_orders concern

Both these objects where using/setting a variable called valid_orders.
As a results, some specs where becoming flacky
(features/budgets/investments_spec.rb, balloting phase). By putting
them together, there is no `valid_orders` variable any more (everything
is @valid_orders) and the flackyness is gone.
This commit is contained in:
kikito
2016-12-24 14:42:46 +01:00
parent 767c537883
commit 03ef20bfde
6 changed files with 13 additions and 33 deletions

View File

@@ -4,8 +4,8 @@ module HasOrders
class_methods do
def has_orders(valid_orders, *args)
before_action(*args) do |c|
valid_orders = valid_orders.call(c) if valid_orders.respond_to?(:call)
@valid_orders = valid_orders
@valid_orders = valid_orders.respond_to?(:call) ? valid_orders.call(c) : valid_orders
@valid_orders.delete('relevance') unless params[:search].present?
@current_order = @valid_orders.include?(params[:order]) ? params[:order] : @valid_orders.first
end
end

View File

@@ -1,7 +0,0 @@
module OrdersHelper
def valid_orders
@valid_orders.reject { |order| order =='relevance' && params[:search].blank? }
end
end

View File

@@ -1,5 +1,5 @@
<div class="submenu">
<% valid_orders.each do |order| %>
<% @valid_orders.each do |order| %>
<%= link_to current_path_with_query_params(order: order, page: 1), class: order == @current_order ? 'active' : '' do %>
<%= content_tag(order == @current_order ? :h2 : :span) do %>
<%= t("#{i18n_namespace}.orders.#{order}") %>

View File

@@ -4,7 +4,7 @@
data-order="<%= @current_order %>"
name="order-selector"
id="order-selector-participation">
<% valid_orders.each do |order| %>
<% @valid_orders.each do |order| %>
<option <%= 'selected' if order == @current_order %>
value='<%= current_path_with_query_params(order: order, page: 1) %>'>
<%= t("#{i18n_namespace}.orders.#{order}") %>

View File

@@ -1,13 +1,13 @@
require 'rails_helper'
xdescribe 'HasOrders' do
describe 'HasOrders' do
class FakeController < ActionController::Base; end
controller(FakeController) do
include HasOrders
has_orders ['created_at', 'votes_count', 'flags_count'], only: :index
has_orders -> { ['votes_count', 'flags_count'] }, only: :new
has_orders ['created_at', 'votes_count', 'flags_count', 'relevance'], only: :index
has_orders -> (c) { ['votes_count', 'flags_count'] }, only: :new
def index
render text: "#{@current_order} (#{@valid_orders.join(' ')})"
@@ -18,7 +18,7 @@ xdescribe 'HasOrders' do
end
end
it "has the valid orders set up" do
it "displays all the orders except relevance when not searching" do
get :index
expect(response.body).to eq('created_at (created_at votes_count flags_count)')
end
@@ -28,6 +28,11 @@ xdescribe 'HasOrders' do
expect(response.body).to eq('votes_count (votes_count flags_count)')
end
it "displays relevance when searching" do
get :index, search: 'ipsum'
expect(response.body).to eq('created_at (created_at votes_count flags_count relevance)')
end
describe "the current order" do
it "defaults to the first one on the list" do
get :index

View File

@@ -1,18 +0,0 @@
require 'rails_helper'
describe OrdersHelper do
describe '#valid_orders' do
it 'displays relevance when searching' do
params[:search] = 'ipsum'
assign(:valid_orders, %w(created_at random relevance))
expect(helper.valid_orders).to eq %w(created_at random relevance)
end
it 'does not display relevance when not searching' do
assign(:valid_orders, %w(created_at random relevance))
expect(helper.valid_orders).to eq %w(created_at random)
end
end
end