Implements filtering in polls/index

This commit is contained in:
kikito
2016-11-03 17:52:15 +01:00
parent 3d22c556e8
commit 35a5136d9f
4 changed files with 32 additions and 24 deletions

View File

@@ -2,8 +2,10 @@ class PollsController < ApplicationController
load_and_authorize_resource
def index
has_filters %w{current expired incoming}
def index
@polls = @polls.send(@current_filter).sort_for_list.page(params[:page])
end
def show

View File

@@ -9,6 +9,8 @@ class Poll < ActiveRecord::Base
scope :incoming, -> { where('? < starts_at', Time.now) }
scope :expired, -> { where('ends_at < ?', Time.now) }
scope :sort_for_list, -> { order(:starts_at) }
def current?(timestamp = DateTime.now)
starts_at <= timestamp && timestamp <= ends_at
end

View File

@@ -1,3 +1,7 @@
<%= render 'shared/filter_subnav', i18n_namespace: "polls.index" %>
<% @polls.each do |poll| %>
<%= link_to poll.name, poll %>
<% end %>
<%= paginate @polls %>

View File

@@ -15,40 +15,40 @@ feature 'Polls' do
end
end
xscenario 'Filtering enquiries' do
create(:poll_question, poll: poll, title: "Open question")
create(:poll_question, :incoming, poll: poll, title: "Incoming question")
create(:poll_question, :expired, poll: poll, title: "Expired question")
scenario 'Filtering polls' do
create(:poll, name: "Current poll")
create(:poll, :incoming, name: "Incoming poll")
create(:poll, :expired, name: "Expired poll")
visit enquiries_path
expect(page).to have_content('Open question')
expect(page).to_not have_content('Incoming question')
expect(page).to_not have_content('Expired question')
visit polls_path
expect(page).to have_content('Current poll')
expect(page).to_not have_content('Incoming poll')
expect(page).to_not have_content('Expired poll')
visit enquiries_path(filter: 'incoming')
expect(page).to_not have_content('Open question')
expect(page).to have_content('Incoming question')
expect(page).to_not have_content('Expired question')
visit polls_path(filter: 'incoming')
expect(page).to_not have_content('Current poll')
expect(page).to have_content('Incoming poll')
expect(page).to_not have_content('Expired poll')
visit enquiries_path(filter: 'expired')
expect(page).to_not have_content('Open question')
expect(page).to_not have_content('Incoming question')
expect(page).to have_content('Expired question')
visit polls_path(filter: 'expired')
expect(page).to_not have_content('Current poll')
expect(page).to_not have_content('Incoming poll')
expect(page).to have_content('Expired poll')
end
xscenario "Current filter is properly highlighted" do
visit enquiries_path
expect(page).to_not have_link('Open')
scenario "Current filter is properly highlighted" do
visit polls_path
expect(page).to_not have_link('Current')
expect(page).to have_link('Incoming')
expect(page).to have_link('Expired')
visit enquiries_path(filter: 'incoming')
expect(page).to have_link('Open')
visit polls_path(filter: 'incoming')
expect(page).to have_link('Current')
expect(page).to_not have_link('Incoming')
expect(page).to have_link('Expired')
visit enquiries_path(filter: 'expired')
expect(page).to have_link('Open')
visit polls_path(filter: 'expired')
expect(page).to have_link('Current')
expect(page).to have_link('Incoming')
expect(page).to_not have_link('Expired')
end