From bf302be8792eb0052f8d3c3eb5491674b3aea820 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Fri, 8 Jan 2016 17:24:49 +0100 Subject: [PATCH 1/9] add frendly urls for debates and proposals --- app/models/debate.rb | 4 ++++ app/models/proposal.rb | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/app/models/debate.rb b/app/models/debate.rb index 086bd5ae4..1fd438432 100644 --- a/app/models/debate.rb +++ b/app/models/debate.rb @@ -54,6 +54,10 @@ class Debate < ActiveRecord::Base order_within_rank: "debates.cached_votes_up DESC" } + def to_param + "#{id}-#{title}".parameterize + end + def description super.try :html_safe end diff --git a/app/models/proposal.rb b/app/models/proposal.rb index 22fb55cbd..bfc415068 100644 --- a/app/models/proposal.rb +++ b/app/models/proposal.rb @@ -59,6 +59,10 @@ class Proposal < ActiveRecord::Base order_within_rank: "proposals.cached_votes_up DESC" } + def to_param + "#{id}-#{title}".parameterize + end + def searchable_values values = { title => 'A', From 083772aa62decb34ad9fe5264bbab2dfa1740bef Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Fri, 8 Jan 2016 17:32:16 +0100 Subject: [PATCH 2/9] add frendly urls for debates and proposals (specs) --- spec/models/debate_spec.rb | 6 ++++++ spec/models/proposal_spec.rb | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/spec/models/debate_spec.rb b/spec/models/debate_spec.rb index a90423645..e823cf96f 100644 --- a/spec/models/debate_spec.rb +++ b/spec/models/debate_spec.rb @@ -677,4 +677,10 @@ describe Debate do end + describe "#to_param" do + it "should return a friendly url" do + expect(debate.to_param).to eq "#{debate.id} #{debate.title}".parameterize + end + end + end diff --git a/spec/models/proposal_spec.rb b/spec/models/proposal_spec.rb index db9c356d0..607657ca0 100644 --- a/spec/models/proposal_spec.rb +++ b/spec/models/proposal_spec.rb @@ -615,4 +615,10 @@ describe Proposal do end + describe "#to_param" do + it "should return a friendly url" do + expect(proposal.to_param).to eq "#{proposal.id} #{proposal.title}".parameterize + end + end + end From 7c65b8555c3d24af82add55649b7654de09609e9 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Sun, 10 Jan 2016 13:38:22 +0100 Subject: [PATCH 3/9] redirect to frendly url for debates and proposals if needed --- app/controllers/debates_controller.rb | 5 +++ .../management/proposals_controller.rb | 5 +++ app/controllers/proposals_controller.rb | 5 +++ spec/controllers/debates_controller_spec.rb | 20 ++++++++++ .../management/proposals_controller_spec.rb | 37 +++++++++++++++++++ spec/controllers/proposals_controller_spec.rb | 24 ++++++++++++ 6 files changed, 96 insertions(+) create mode 100644 spec/controllers/management/proposals_controller_spec.rb create mode 100644 spec/controllers/proposals_controller_spec.rb diff --git a/app/controllers/debates_controller.rb b/app/controllers/debates_controller.rb index 824118c8d..731e17ddd 100644 --- a/app/controllers/debates_controller.rb +++ b/app/controllers/debates_controller.rb @@ -13,6 +13,11 @@ class DebatesController < ApplicationController load_and_authorize_resource respond_to :html, :js + def show + super + redirect_to debate_path(@debate), status: :moved_permanently if request.path != debate_path(@debate) + end + def vote @debate.register_vote(current_user, params[:value]) set_debate_votes(@debate) diff --git a/app/controllers/management/proposals_controller.rb b/app/controllers/management/proposals_controller.rb index 4d96af093..3818b2a2d 100644 --- a/app/controllers/management/proposals_controller.rb +++ b/app/controllers/management/proposals_controller.rb @@ -9,6 +9,11 @@ class Management::ProposalsController < Management::BaseController has_orders %w{confidence_score hot_score created_at most_commented random}, only: [:index, :print] has_orders %w{most_voted newest}, only: :show + def show + super + redirect_to management_proposal_path(@proposal), status: :moved_permanently if request.path != management_proposal_path(@proposal) + end + def vote @proposal.register_vote(current_user, 'yes') set_proposal_votes(@proposal) diff --git a/app/controllers/proposals_controller.rb b/app/controllers/proposals_controller.rb index 4a5e17af3..99bde6b2e 100644 --- a/app/controllers/proposals_controller.rb +++ b/app/controllers/proposals_controller.rb @@ -13,6 +13,11 @@ class ProposalsController < ApplicationController load_and_authorize_resource respond_to :html, :js + def show + super + redirect_to proposal_path(@proposal), status: :moved_permanently if request.path != proposal_path(@proposal) + end + def index_customization @featured_proposals = Proposal.all.sort_by_confidence_score.limit(3) if (@search_terms.blank? && @tag_filter.blank?) if @featured_proposals.present? diff --git a/spec/controllers/debates_controller_spec.rb b/spec/controllers/debates_controller_spec.rb index b5d46abac..9ac29dddd 100644 --- a/spec/controllers/debates_controller_spec.rb +++ b/spec/controllers/debates_controller_spec.rb @@ -11,6 +11,26 @@ describe DebatesController do SimpleCaptcha.always_pass = @original_captcha_pass_value end + describe "GET show" do + + let(:debate) { create :debate } + + context "when path matches" do + it "should not redirect to real path" do + get :show, id: debate.id + expect(response).to_not redirect_to debates_path(debate) + end + end + + context "when path does not match" do + it "should redirect to real path" do + expect(request).to receive(:path).exactly(3).times.and_return "/#{debate.id}-something-else" + get :show, id: debate.id + expect(response).to redirect_to debate_path(debate) + end + end + end + describe 'POST create' do it 'should create an ahoy event' do diff --git a/spec/controllers/management/proposals_controller_spec.rb b/spec/controllers/management/proposals_controller_spec.rb new file mode 100644 index 000000000..419a393d2 --- /dev/null +++ b/spec/controllers/management/proposals_controller_spec.rb @@ -0,0 +1,37 @@ +require 'rails_helper' + +describe Management::ProposalsController do + + describe "GET show" do + + let(:proposal) { create :proposal } + let(:user) { create :user, :level_two } + + context "when path matches" do + it "should not redirect to real path" do + sign_in user + login_managed_user(user) + session[:manager] = {user_key: "31415926" , date: "20151031135905", login: "JJB033"} + session[:document_type] = "1" + session[:document_number] = "12345678Z" + + get :show, id: proposal.id + expect(response).to_not redirect_to management_proposals_path(proposal) + end + end + + context "when path does not match" do + it "should redirect to real path" do + sign_in user + login_managed_user(user) + session[:manager] = {user_key: "31415926" , date: "20151031135905", login: "JJB033"} + session[:document_type] = "1" + session[:document_number] = "12345678Z" + + expect(request).to receive(:path).exactly(2).times.and_return "/#{proposal.id}-something-else" + get :show, id: proposal.id + expect(response).to redirect_to management_proposal_path(proposal) + end + end + end +end diff --git a/spec/controllers/proposals_controller_spec.rb b/spec/controllers/proposals_controller_spec.rb new file mode 100644 index 000000000..036f55949 --- /dev/null +++ b/spec/controllers/proposals_controller_spec.rb @@ -0,0 +1,24 @@ +require 'rails_helper' + +describe ProposalsController do + + describe "GET show" do + + let(:proposal) { create :proposal } + + context "when path matches" do + it "should not redirect to real path" do + get :show, id: proposal.id + expect(response).to_not redirect_to proposals_path(proposal) + end + end + + context "when path does not match" do + it "should redirect to real path" do + expect(request).to receive(:path).exactly(3).times.and_return "/#{proposal.id}-something-else" + get :show, id: proposal.id + expect(response).to redirect_to proposal_path(proposal) + end + end + end +end From 50b76a68945b970aed92eb1290a490d65d88dba1 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Wed, 2 Mar 2016 16:00:03 +0100 Subject: [PATCH 4/9] remove controller test for debates friendly urls --- spec/controllers/debates_controller_spec.rb | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/spec/controllers/debates_controller_spec.rb b/spec/controllers/debates_controller_spec.rb index 9ac29dddd..b5d46abac 100644 --- a/spec/controllers/debates_controller_spec.rb +++ b/spec/controllers/debates_controller_spec.rb @@ -11,26 +11,6 @@ describe DebatesController do SimpleCaptcha.always_pass = @original_captcha_pass_value end - describe "GET show" do - - let(:debate) { create :debate } - - context "when path matches" do - it "should not redirect to real path" do - get :show, id: debate.id - expect(response).to_not redirect_to debates_path(debate) - end - end - - context "when path does not match" do - it "should redirect to real path" do - expect(request).to receive(:path).exactly(3).times.and_return "/#{debate.id}-something-else" - get :show, id: debate.id - expect(response).to redirect_to debate_path(debate) - end - end - end - describe 'POST create' do it 'should create an ahoy event' do From c4a14dfd07e230c3ba2e1bf2603c258adbde28b6 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Wed, 2 Mar 2016 16:00:44 +0100 Subject: [PATCH 5/9] remove controller test for proposals friendly urls --- spec/controllers/proposals_controller_spec.rb | 24 ------------------- 1 file changed, 24 deletions(-) delete mode 100644 spec/controllers/proposals_controller_spec.rb diff --git a/spec/controllers/proposals_controller_spec.rb b/spec/controllers/proposals_controller_spec.rb deleted file mode 100644 index 036f55949..000000000 --- a/spec/controllers/proposals_controller_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'rails_helper' - -describe ProposalsController do - - describe "GET show" do - - let(:proposal) { create :proposal } - - context "when path matches" do - it "should not redirect to real path" do - get :show, id: proposal.id - expect(response).to_not redirect_to proposals_path(proposal) - end - end - - context "when path does not match" do - it "should redirect to real path" do - expect(request).to receive(:path).exactly(3).times.and_return "/#{proposal.id}-something-else" - get :show, id: proposal.id - expect(response).to redirect_to proposal_path(proposal) - end - end - end -end From adbf2f40e47675f482d1e0191fe0eb364748ec96 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Wed, 2 Mar 2016 16:01:07 +0100 Subject: [PATCH 6/9] remove controller test for management proposals friendly urls --- .../management/proposals_controller_spec.rb | 37 ------------------- 1 file changed, 37 deletions(-) delete mode 100644 spec/controllers/management/proposals_controller_spec.rb diff --git a/spec/controllers/management/proposals_controller_spec.rb b/spec/controllers/management/proposals_controller_spec.rb deleted file mode 100644 index 419a393d2..000000000 --- a/spec/controllers/management/proposals_controller_spec.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'rails_helper' - -describe Management::ProposalsController do - - describe "GET show" do - - let(:proposal) { create :proposal } - let(:user) { create :user, :level_two } - - context "when path matches" do - it "should not redirect to real path" do - sign_in user - login_managed_user(user) - session[:manager] = {user_key: "31415926" , date: "20151031135905", login: "JJB033"} - session[:document_type] = "1" - session[:document_number] = "12345678Z" - - get :show, id: proposal.id - expect(response).to_not redirect_to management_proposals_path(proposal) - end - end - - context "when path does not match" do - it "should redirect to real path" do - sign_in user - login_managed_user(user) - session[:manager] = {user_key: "31415926" , date: "20151031135905", login: "JJB033"} - session[:document_type] = "1" - session[:document_number] = "12345678Z" - - expect(request).to receive(:path).exactly(2).times.and_return "/#{proposal.id}-something-else" - get :show, id: proposal.id - expect(response).to redirect_to management_proposal_path(proposal) - end - end - end -end From 80edc4f6139d1b94e4f941ee7cce9031353d932d Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Wed, 2 Mar 2016 16:01:34 +0100 Subject: [PATCH 7/9] add feature test for debates friendly urls --- spec/features/debates_spec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/features/debates_spec.rb b/spec/features/debates_spec.rb index 6ef03d06e..1e8f175e2 100644 --- a/spec/features/debates_spec.rb +++ b/spec/features/debates_spec.rb @@ -61,6 +61,28 @@ feature 'Debates' do expect(link_text).to include(debates_path order: :hot_score, page: 1) end + context "Show" do + scenario 'When path matches the friendly url' do + debate = create(:debate) + + right_path = debate_path(debate) + visit right_path + + expect(current_path).to eq(right_path) + end + + scenario 'When path does not match the friendly url' do + debate = create(:debate) + + right_path = debate_path(debate) + old_path = "#{debates_path}/#{debate.id}-something-else" + visit old_path + + expect(current_path).to_not eq(old_path) + expect(current_path).to eq(right_path) + end + end + scenario 'Create' do author = create(:user) login_as(author) From c44745e0b430c9c6fc79bc64f5594e59beecb718 Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Wed, 2 Mar 2016 16:01:57 +0100 Subject: [PATCH 8/9] add feature test for management proposals friendly urls --- spec/features/management/proposals_spec.rb | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/spec/features/management/proposals_spec.rb b/spec/features/management/proposals_spec.rb index ffab09f55..f83c37a0c 100644 --- a/spec/features/management/proposals_spec.rb +++ b/spec/features/management/proposals_spec.rb @@ -56,6 +56,34 @@ feature 'Proposals' do end end + context "Show" do + scenario 'When path matches the friendly url' do + proposal = create(:proposal) + + user = create(:user, :level_two) + login_managed_user(user) + + right_path = management_proposal_path(proposal) + visit right_path + + expect(current_path).to eq(right_path) + end + + scenario 'When path does not match the friendly url' do + proposal = create(:proposal) + + user = create(:user, :level_two) + login_managed_user(user) + + right_path = management_proposal_path(proposal) + old_path = "#{management_proposals_path}/#{proposal.id}-something-else" + visit old_path + + expect(current_path).to_not eq(old_path) + expect(current_path).to eq(right_path) + end + end + scenario "Searching" do proposal1 = create(:proposal, title: "Show me what you got") proposal2 = create(:proposal, title: "Get Schwifty") From c2d05d455585a9d0c194732859d697f95bddb38d Mon Sep 17 00:00:00 2001 From: Julian Herrero Date: Wed, 2 Mar 2016 16:02:42 +0100 Subject: [PATCH 9/9] add feature test for proposals friendly urls --- spec/features/proposals_spec.rb | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/spec/features/proposals_spec.rb b/spec/features/proposals_spec.rb index e6938a432..b8f2a0d20 100644 --- a/spec/features/proposals_spec.rb +++ b/spec/features/proposals_spec.rb @@ -64,6 +64,28 @@ feature 'Proposals' do end end + context "Show" do + scenario 'When path matches the friendly url' do + proposal = create(:proposal) + + right_path = proposal_path(proposal) + visit right_path + + expect(current_path).to eq(right_path) + end + + scenario 'When path does not match the friendly url' do + proposal = create(:proposal) + + right_path = proposal_path(proposal) + old_path = "#{proposals_path}/#{proposal.id}-something-else" + visit old_path + + expect(current_path).to_not eq(old_path) + expect(current_path).to eq(right_path) + end + end + scenario 'Social Media Cards' do proposal = create(:proposal)