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