From a852696eebcf0633b67a326da92269e464ee0be6 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Fri, 24 May 2019 12:38:31 +0200 Subject: [PATCH] Remove not selected proposals from other lists --- app/controllers/proposals_controller.rb | 6 +++- app/models/proposal.rb | 1 + spec/features/proposals_spec.rb | 41 +++++++++++++------------ spec/models/proposal_spec.rb | 11 +++++-- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 5a19f7907..a7d171d9a 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -142,7 +142,11 @@ class ProposalsController < ApplicationController end def load_selected - @resources = @resources.selected if params[:selected].present? + if params[:selected].present? + @resources = @resources.selected + else + @resources = @resources.not_selected + end end def load_featured diff --git a/app/models/proposal.rb b/app/models/proposal.rb index c8b7cb0dc..deb829058 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -75,6 +75,7 @@ class Proposal < ApplicationRecord scope :unsuccessful, -> { where("cached_votes_up < ?", Proposal.votes_needed_for_success) } scope :public_for_api, -> { all } scope :selected, -> { where(selected: true) } + scope :not_selected, -> { where(selected: false) } scope :not_supported_by_user, ->(user) { where.not(id: user.find_voted_items(votable_type: "Proposal").compact.map(&:id)) } scope :published, -> { where.not(published_at: nil) } scope :draft, -> { where(published_at: nil) } diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index 3861680a4..a3eee84a6 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -118,25 +118,6 @@ feature "Proposals" do end end - context "Index" do - scenario "Lists selected proposals" do - selected_proposal = create(:proposal, :selected) - unselected_proposal = create(:proposal) - - visit proposals_path - - expect(page).to have_selector("#proposals .proposal", count: 2) - expect(page).to have_content selected_proposal.title - expect(page).to have_content unselected_proposal.title - - click_link "Selected proposals" - - expect(page).to have_selector("#proposals .proposal", count: 1) - expect(page).to have_content selected_proposal.title - expect(page).not_to have_content unselected_proposal.title - end - end - scenario "Show" do proposal = create(:proposal) @@ -954,6 +935,28 @@ feature "Proposals" do end + context "Selected Proposals" do + let!(:selected_proposal) { create(:proposal, :selected) } + let!(:not_selected_proposal) { create(:proposal) } + + scenario "do not show in index by default" do + visit proposals_path + + expect(page).to have_selector("#proposals .proposal", count: 1) + expect(page).to have_content not_selected_proposal.title + expect(page).not_to have_content selected_proposal.title + end + + scenario "show in selected proposals list" do + visit proposals_path + click_link "Selected proposals" + + expect(page).to have_selector("#proposals .proposal", count: 1) + expect(page).to have_content selected_proposal.title + expect(page).not_to have_content not_selected_proposal.title + end + end + context "Search" do context "Basic search" do diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index 51a8128ac..b55cbba9f 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -867,11 +867,11 @@ describe Proposal do end describe "selected" do - let!(:unselected_proposal) { create(:proposal) } + let!(:not_selected_proposal) { create(:proposal) } let!(:selected_proposal) { create(:proposal, :selected) } it "selected? is true" do - expect(unselected_proposal.selected?).to be false + expect(not_selected_proposal.selected?).to be false expect(selected_proposal.selected?).to be true end @@ -881,6 +881,13 @@ describe Proposal do expect(selected.size).to be 1 expect(selected.first).to eq selected_proposal end + + it "scope not_selected" do + not_selected = Proposal.not_selected + + expect(not_selected.size).to be 1 + expect(not_selected.first).to eq not_selected_proposal + end end describe "public_for_api scope" do