From 922c5c16697d9e67043aff2a8e976de9bb2a09e2 Mon Sep 17 00:00:00 2001 From: dbwinger Date: Mon, 9 Apr 2018 14:03:54 -0400 Subject: [PATCH] Handle zero plural resource names --- .../alchemy/admin/resources_controller.rb | 4 +- .../admin/resources_controller_spec.rb | 40 +++++++++++++++---- .../controllers/admin/series_controller.rb | 2 + spec/dummy/app/models/ability.rb | 2 + spec/dummy/app/models/series.rb | 2 + spec/dummy/config/initializers/alchemy.rb | 4 ++ spec/dummy/config/routes.rb | 1 + .../migrate/20180409171801_create_series.rb | 7 ++++ spec/dummy/db/schema.rb | 6 ++- spec/factories.rb | 4 ++ 10 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 spec/dummy/app/controllers/admin/series_controller.rb create mode 100644 spec/dummy/app/models/series.rb create mode 100644 spec/dummy/db/migrate/20180409171801_create_series.rb diff --git a/app/controllers/alchemy/admin/resources_controller.rb b/app/controllers/alchemy/admin/resources_controller.rb index 99a5200a07..613f80ff7e 100644 --- a/app/controllers/alchemy/admin/resources_controller.rb +++ b/app/controllers/alchemy/admin/resources_controller.rb @@ -61,7 +61,7 @@ def create resource_instance_variable.save render_errors_or_redirect( resource_instance_variable, - resources_path(resource_handler.namespaced_resources_name, search_filter_params), + resources_path(resource_instance_variable.class, search_filter_params), flash_notice_for_resource_action ) end @@ -70,7 +70,7 @@ def update resource_instance_variable.update_attributes(resource_params) render_errors_or_redirect( resource_instance_variable, - resources_path(resource_handler.namespaced_resources_name, search_filter_params), + resources_path(resource_instance_variable.class, search_filter_params), flash_notice_for_resource_action ) end diff --git a/spec/controllers/alchemy/admin/resources_controller_spec.rb b/spec/controllers/alchemy/admin/resources_controller_spec.rb index 784121c8dd..2e56c7a47a 100644 --- a/spec/controllers/alchemy/admin/resources_controller_spec.rb +++ b/spec/controllers/alchemy/admin/resources_controller_spec.rb @@ -49,11 +49,25 @@ describe '#update' do let(:params) { {q: {name_or_hidden_name_or_description_or_location_name_cont: 'some_query'}, page: 6} } - let!(:peter) { create(:event, name: 'Peter') } - it 'redirects to index, keeping the current location parameters' do - post :update, params: {id: peter.id, event: {name: "Hans"}}.merge(params) - expect(response.redirect_url).to eq("http://test.host/admin/events?page=6&q%5Bname_or_hidden_name_or_description_or_location_name_cont%5D=some_query") + context 'with regular noun model name' do + let(:peter) { create(:event, name: 'Peter') } + + it 'redirects to index, keeping the current location parameters' do + post :update, params: {id: peter.id, event: {name: "Hans"}}.merge(params) + expect(response.redirect_url).to eq("http://test.host/admin/events?page=6&q%5Bname_or_hidden_name_or_description_or_location_name_cont%5D=some_query") + end + end + + context 'with zero plural noun model name' do + let!(:peter) { create(:series, name: 'Peter') } + let(:params) { {q: { name_cont: 'some_query'}, page: 6} } + + it 'redirects to index, keeping the current location parameters' do + expect(controller).to receive(:controller_path) { 'admin/series' } + post :update, params: {id: peter.id, series: {name: "Hans"}}.merge(params) + expect(response.redirect_url).to eq("http://test.host/admin/series?page=6&q%5Bname_cont%5D=some_query") + end end end @@ -61,9 +75,21 @@ let(:params) { {q: {name_or_hidden_name_or_description_or_location_name_cont: 'some_query'}, page: 6} } let!(:location) { create(:location) } - it 'redirects to index, keeping the current location parameters' do - post :create, params: {event: {name: "Hans", location_id: location.id}}.merge(params) - expect(response.redirect_url).to eq("http://test.host/admin/events?page=6&q%5Bname_or_hidden_name_or_description_or_location_name_cont%5D=some_query") + context 'with regular noun model name' do + it 'redirects to index, keeping the current location parameters' do + post :create, params: {event: {name: "Hans", location_id: location.id}}.merge(params) + expect(response.redirect_url).to eq("http://test.host/admin/events?page=6&q%5Bname_or_hidden_name_or_description_or_location_name_cont%5D=some_query") + end + end + + context 'with zero plural noun model name' do + let(:params) { {q: {name_cont: 'some_query'}, page: 6} } + + it 'redirects to index, keeping the current location parameters' do + expect(controller).to receive(:controller_path) { 'admin/series' } + post :create, params: {series: {name: "Hans"}}.merge(params) + expect(response.redirect_url).to eq("http://test.host/admin/series?page=6&q%5Bname_cont%5D=some_query") + end end end diff --git a/spec/dummy/app/controllers/admin/series_controller.rb b/spec/dummy/app/controllers/admin/series_controller.rb new file mode 100644 index 0000000000..587d5684de --- /dev/null +++ b/spec/dummy/app/controllers/admin/series_controller.rb @@ -0,0 +1,2 @@ +class Admin::SeriesController < Alchemy::Admin::ResourcesController +end diff --git a/spec/dummy/app/models/ability.rb b/spec/dummy/app/models/ability.rb index c7e854a510..c290324593 100644 --- a/spec/dummy/app/models/ability.rb +++ b/spec/dummy/app/models/ability.rb @@ -6,5 +6,7 @@ def initialize(user) can :index, :admin_events can :manage, Location can :index, :admin_locations + can :manage, Series + can :index, :admin_series end end diff --git a/spec/dummy/app/models/series.rb b/spec/dummy/app/models/series.rb new file mode 100644 index 0000000000..08c8286a59 --- /dev/null +++ b/spec/dummy/app/models/series.rb @@ -0,0 +1,2 @@ +class Series < ActiveRecord::Base +end diff --git a/spec/dummy/config/initializers/alchemy.rb b/spec/dummy/config/initializers/alchemy.rb index f5a64cf62b..b081b5f001 100644 --- a/spec/dummy/config/initializers/alchemy.rb +++ b/spec/dummy/config/initializers/alchemy.rb @@ -16,6 +16,10 @@ name: 'Locations', controller: '/admin/locations', action: 'index' + }, { + name: 'Series', + controller: '/admin/series', + action: 'index' }] } ) diff --git a/spec/dummy/config/routes.rb b/spec/dummy/config/routes.rb index 13c716370b..faff6e7213 100644 --- a/spec/dummy/config/routes.rb +++ b/spec/dummy/config/routes.rb @@ -7,6 +7,7 @@ namespace :admin do resources :events resources :locations + resources :series end mount Alchemy::Engine => "/" diff --git a/spec/dummy/db/migrate/20180409171801_create_series.rb b/spec/dummy/db/migrate/20180409171801_create_series.rb new file mode 100644 index 0000000000..03c0d9c062 --- /dev/null +++ b/spec/dummy/db/migrate/20180409171801_create_series.rb @@ -0,0 +1,7 @@ +class CreateSeries < ActiveRecord::Migration[5.1] + def change + create_table :series do |t| + t.string :name + end + end +end diff --git a/spec/dummy/db/schema.rb b/spec/dummy/db/schema.rb index f1a470527b..780115cfc8 100644 --- a/spec/dummy/db/schema.rb +++ b/spec/dummy/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20180227224537) do +ActiveRecord::Schema.define(version: 20180409171801) do create_table "alchemy_attachments", force: :cascade do |t| t.string "name" @@ -318,4 +318,8 @@ t.datetime "updated_at" end + create_table "series", force: :cascade do |t| + t.string "name" + end + end diff --git a/spec/factories.rb b/spec/factories.rb index c2d1191637..28a0abd1a5 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -15,4 +15,8 @@ factory :location do name 'Awesome Lodge' end + + factory :series do + name 'My Series' + end end