From d63cf8b392419bb85860535956089437a8c65c19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Fri, 22 Apr 2016 15:30:55 +0200 Subject: [PATCH] removes retired proposals from default index adds a sidebar link to retired proposals list --- app/controllers/proposals_controller.rb | 8 ++++++- app/models/proposal.rb | 1 + app/views/proposals/_retired.html.erb | 6 +++++ app/views/proposals/index.html.erb | 3 +++ config/locales/en.yml | 2 ++ config/locales/es.yml | 2 ++ spec/features/proposals_spec.rb | 30 ++++++++++++++++++++++++- spec/models/proposal_spec.rb | 7 ++++++ 8 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 app/views/proposals/_retired.html.erb diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index cbf2af121..e91d20de9 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -23,7 +23,13 @@ class ProposalsController < ApplicationController end def index_customization - @featured_proposals = Proposal.all.sort_by_confidence_score.limit(3) if (!@advanced_search_terms && @search_terms.blank? && @tag_filter.blank?) + if params[:retired].present? + @resources = @resources.retired + else + @resources = @resources.not_retired + end + + @featured_proposals = Proposal.all.sort_by_confidence_score.limit(3) if (!@advanced_search_terms && @search_terms.blank? && @tag_filter.blank? && params[:retired].blank?) if @featured_proposals.present? set_featured_proposal_votes(@featured_proposals) @resources = @resources.where('proposals.id NOT IN (?)', @featured_proposals.map(&:id)) diff --git a/app/models/proposal.rb b/app/models/proposal.rb index be08b5654..e6071e052 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -46,6 +46,7 @@ class Proposal < ActiveRecord::Base scope :sort_by_flags, -> { order(flags_count: :desc, updated_at: :desc) } scope :last_week, -> { where("proposals.created_at >= ?", 7.days.ago)} scope :retired, -> { where.not(retired_at: nil) } + scope :not_retired, -> { where(retired_at: nil) } def to_param "#{id}-#{title}".parameterize diff --git a/app/views/proposals/_retired.html.erb b/app/views/proposals/_retired.html.erb new file mode 100644 index 000000000..73d8a7844 --- /dev/null +++ b/app/views/proposals/_retired.html.erb @@ -0,0 +1,6 @@ + + + +

+ <%= link_to t("proposals.index.retired_proposals_link"), proposals_path(retired: 1), class: "small" %>
+

diff --git a/app/views/proposals/index.html.erb b/app/views/proposals/index.html.erb index 970e1cb3e..065553cce 100644 --- a/app/views/proposals/index.html.erb +++ b/app/views/proposals/index.html.erb @@ -22,6 +22,8 @@ <%= page_entries_info @proposals %> <%= t("proposals.index.filter_topic", count: @proposals.size, topic: @tag_filter) %> + <% elsif params[:retired].present? %> +

<%= t("proposals.index.retired_proposals") %> <% end %> @@ -57,6 +59,7 @@ <%= render 'categories' %> <%= render 'geozones' %> <%= render 'popular' %> + <%= render 'retired' %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 0df604469..a79ceaca6 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -296,6 +296,8 @@ en: hot_score: most active most_commented: most commented relevance: relevance + retired_proposals: Retired proposals + retired_proposals_link: "Proposals retired by the author (duplicated, unfeasibles, done, etc.)" search_form: button: Search placeholder: Search proposals... diff --git a/config/locales/es.yml b/config/locales/es.yml index c67136e9e..38da0cb2c 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -296,6 +296,8 @@ es: hot_score: Más activas hoy most_commented: Más comentadas relevance: Más relevantes + retired_proposals: Propuestas retiradas + retired_proposals_link: "Propuestas retiradas por sus autores (realizadas, en ejecución, inviables, duplicadas, etc.)" search_form: button: Buscar placeholder: Buscar propuestas... diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index adcaf486c..d770f9d9a 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -430,7 +430,7 @@ feature 'Proposals' do end - context 'Retire a proposal' do + context 'Retired proposals' do scenario 'Retire' do proposal = create(:proposal) login_as(proposal.author) @@ -466,6 +466,34 @@ feature 'Proposals' do expect(page).to_not have_content 'Proposal retired' expect(page).to have_content "can't be blank", count: 2 end + + scenario 'Index do not list retired proposals by default' do + create_featured_proposals + not_retired = create(:proposal) + retired = create(:proposal, retired_at: Time.now) + + visit proposals_path + + expect(page).to have_selector('#proposals .proposal', count: 1) + within('#proposals') do + expect(page).to have_content not_retired.title + expect(page).to_not have_content retired.title + end + end + + scenario 'Index has a link to retired proposals list' do + create_featured_proposals + not_retired = create(:proposal) + retired = create(:proposal, retired_at: Time.now) + + visit proposals_path + + expect(page).to_not have_content retired.title + click_link 'Proposals retired by the author (duplicated, unfeasibles, done, etc.)' + + expect(page).to have_content retired.title + expect(page).to_not have_content not_retired.title + end end scenario 'Update should not be posible if logged user is not the author' do diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index dddab0fbc..4958204ec 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -758,6 +758,13 @@ describe Proposal do expect(retired.size).to eq(1) expect(retired.first).to eq(@proposal2) end + + it "scope not_retired" do + not_retired = Proposal.not_retired + + expect(not_retired.size).to eq(1) + expect(not_retired.first).to eq(@proposal1) + end end end