From e2268e53bb715085a97b8fb5959a8958ca1bf885 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Wed, 14 Jan 2015 12:16:24 +1100 Subject: [PATCH] Adding action to check uniquness of enterprise permalink against existing routes --- .../admin/enterprises_controller.rb | 14 +++++++++++- config/routes.rb | 1 + .../admin/enterprises_controller_spec.rb | 22 +++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/enterprises_controller.rb b/app/controllers/admin/enterprises_controller.rb index cf97b5a283..53ef01207c 100644 --- a/app/controllers/admin/enterprises_controller.rb +++ b/app/controllers/admin/enterprises_controller.rb @@ -1,7 +1,7 @@ module Admin class EnterprisesController < ResourceController before_filter :load_enterprise_set, :only => :index - before_filter :load_countries, :except => :index + before_filter :load_countries, :except => [:index, :set_sells, :check_permalink] before_filter :load_methods_and_fees, :only => [:new, :edit, :update, :create] before_filter :load_taxons, :only => [:new, :edit, :update, :create] before_filter :check_can_change_sells, only: :update @@ -53,6 +53,18 @@ module Admin end end + def check_permalink + path = Rails.application.routes.recognize_path( "/#{ params[:permalink].to_s }" ) + if path && path[:controller] == "cms_content" + respond_to do |format| + format.js { render nothing: true, status: 200 } + end + else + respond_to do |format| + format.js { render nothing: true, status: 409 } + end + end + end protected diff --git a/config/routes.rb b/config/routes.rb index 37c1974875..35f7154358 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -46,6 +46,7 @@ Openfoodnetwork::Application.routes.draw do collection do get :for_order_cycle post :bulk_update, as: :bulk_update + get :check_permalink end member do diff --git a/spec/controllers/admin/enterprises_controller_spec.rb b/spec/controllers/admin/enterprises_controller_spec.rb index cda73d4079..32281db681 100644 --- a/spec/controllers/admin/enterprises_controller_spec.rb +++ b/spec/controllers/admin/enterprises_controller_spec.rb @@ -282,5 +282,27 @@ module Admin end end end + + describe "checking permalink suitability" do + # let(:enterprise) { create(:enterprise, permalink: 'enterprise_permalink') } + + before do + controller.stub spree_current_user: admin_user + end + + it "responds with status of 200 when the route does not exist" do + spree_get :check_permalink, { permalink: 'some_nonexistent_route', format: :js } + expect(response.status).to be 200 + end + + it "responds with status of 409 when the permalink matches an existing route" do + # spree_get :check_permalink, { permalink: 'enterprise_permalink', format: :js } + # expect(response.status).to be 409 + spree_get :check_permalink, { permalink: 'map', format: :js } + expect(response.status).to be 409 + spree_get :check_permalink, { permalink: '', format: :js } + expect(response.status).to be 409 + end + end end end