From e2d3b3f069bdbaf7fa7dd2ad3d1d857243d0f912 Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Tue, 15 Sep 2015 17:35:31 -0700 Subject: [PATCH 1/8] added facet item model to configure facet per set --- app/controllers/admin/facets_controller.rb | 37 +++++++++++++++++++ app/controllers/catalog_controller.rb | 1 + app/facades/facet_configuration_facade.rb | 12 ++++++ app/models/facet_item.rb | 3 ++ app/models/search_builder.rb | 14 +++++++ app/views/admin/facets/_field.html.erb | 2 +- app/views/admin/facets/_top_terms.html.erb | 11 +++++- config/locales/en.yml | 4 ++ config/routes.rb | 5 ++- .../20150915185324_create_facet_items.rb | 11 ++++++ db/schema.rb | 11 +++++- spec/factories/facet_items.rb | 7 ++++ spec/models/facet_item_spec.rb | 5 +++ 13 files changed, 118 insertions(+), 5 deletions(-) create mode 100644 app/models/facet_item.rb create mode 100644 db/migrate/20150915185324_create_facet_items.rb create mode 100644 spec/factories/facet_items.rb create mode 100644 spec/models/facet_item_spec.rb diff --git a/app/controllers/admin/facets_controller.rb b/app/controllers/admin/facets_controller.rb index 47d810e..73fa235 100644 --- a/app/controllers/admin/facets_controller.rb +++ b/app/controllers/admin/facets_controller.rb @@ -35,12 +35,49 @@ def destroy redirect_to admin_facets_path end + def remove_item + begin + facet_item = find_item(params[:id]) + if facet_item.visible + facet_item.visible = false + facet_item.save + flash[:success] = t('admin.facets.remove_item.success') + end + rescue + flash[:alert] = t('admin.facets.remove_item.fail') + end + redirect_to admin_facets_path + + end + + def add_item + begin + facet_item = find_item(params[:id]) + unless facet_item.visible + facet_item.visible = true + facet_item.save + flash[:success] = t('admin.facets.field_item_created') + end + rescue + flash[:alert] = t('admin.facets.remove_item.fail') + end + redirect_to admin_facets_path + + end + private + def find_item(id) + FacetItem.find(id) + end def find_facet(id) FacetField.find(id) end + def facet_item_params + params.require(:facet_item).permit(:value) + end + def facet_field_params params.require(:facet_field).permit(:key, :label) end diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 1944ddb..05fab7c 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -8,6 +8,7 @@ class CatalogController < ApplicationController include Hydra::Controller::ControllerBehavior # This applies appropriate access controls to all solr queries self.search_params_logic += [:add_access_controls_to_solr_params] + self.search_params_logic += [:filter_set_admin] # Apply access controls to show. before_filter :enforce_show_permissions, :only => :show diff --git a/app/facades/facet_configuration_facade.rb b/app/facades/facet_configuration_facade.rb index 9feb0f3..58429f1 100644 --- a/app/facades/facet_configuration_facade.rb +++ b/app/facades/facet_configuration_facade.rb @@ -27,10 +27,22 @@ def all_solr_fields def solr_field_iterator @solr_field_iterator ||= iterator_factory.new(all_solr_fields).map do |k, v| + + setup_facet_item_set(v) if k == :set + [k, HasFacetField.new(v, grouped_facets[k].try(:first) || FacetField.new(:key => k))] end end + def setup_facet_item_set(value) + top_terms = value.topTerms.each_slice(2).to_a + top_terms.each { |item| facet_item item } + end + + def facet_item(item) + FacetItem.where(:value => item.first).first_or_create + end + def iterator_factory FacetableSolrFieldIterator end diff --git a/app/models/facet_item.rb b/app/models/facet_item.rb new file mode 100644 index 0000000..a3e5af5 --- /dev/null +++ b/app/models/facet_item.rb @@ -0,0 +1,3 @@ +class FacetItem < ActiveRecord::Base + validates :value, :presence => true +end diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb index 8da3705..7e29c31 100644 --- a/app/models/search_builder.rb +++ b/app/models/search_builder.rb @@ -9,6 +9,20 @@ def restrict_to_set(solr_params) end end + def filter_set_admin(solr_params) + solr_params[:fq] ||= [] + remove_items ||= [] + FacetItem.all.each do |item| + unless item.visible? + remove_items << item.value + end + end + if remove_items.any? + filter = remove_items.map { |i| "-\"#{i}\"" }.join("") + solr_params[:fq] << "set_ssim:("+filter+")" + end + end + def only_unreviewed(solr_params) solr_params[:fq] ||= [] solr_params[:fq] << "reviewed_bsi:false" diff --git a/app/views/admin/facets/_field.html.erb b/app/views/admin/facets/_field.html.erb index 4efbf2d..654df81 100644 --- a/app/views/admin/facets/_field.html.erb +++ b/app/views/admin/facets/_field.html.erb @@ -18,7 +18,7 @@

<%= field.distinct %>

- <%= render :partial => "top_terms", :locals => {:field => field} %> + <%= render :partial => "top_terms", :locals => {:field => field, :property => property} %> diff --git a/app/views/admin/facets/_top_terms.html.erb b/app/views/admin/facets/_top_terms.html.erb index 3a15441..310eba4 100644 --- a/app/views/admin/facets/_top_terms.html.erb +++ b/app/views/admin/facets/_top_terms.html.erb @@ -2,8 +2,17 @@
diff --git a/config/locales/en.yml b/config/locales/en.yml index 4876a2e..ce34410 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -40,11 +40,15 @@ en: admin: facets: field_created: "Facet field configured" + field_item_created: "Facet field item created" update: fail: 'Failed to update facet' destroy: fail: "Failed to delete facet" success: "Deleted facet" + remove_item: + fail: "Failed to delete item" + success: "Deleted facet item" form_templates: create: success: Created new template diff --git a/config/routes.rb b/config/routes.rb index 96eb2c2..ce00e13 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,8 +7,10 @@ devise_for :users mount Hydra::RoleManagement::Engine => '/' - get '/admin', :to => 'admin#index', :as => "admin_index" + get '/admin/facets/:id/remove_item', :to => 'admin/facets#remove_item', :as => 'remove_item_admin_facet' + get '/admin/facets/:id/add_item', :to => 'admin/facets#add_item', :as => 'add_item_admin_facet' + namespace :admin do resources :facets resources :form_templates @@ -37,5 +39,4 @@ end end - end diff --git a/db/migrate/20150915185324_create_facet_items.rb b/db/migrate/20150915185324_create_facet_items.rb new file mode 100644 index 0000000..3ff9665 --- /dev/null +++ b/db/migrate/20150915185324_create_facet_items.rb @@ -0,0 +1,11 @@ +class CreateFacetItems < ActiveRecord::Migration + def change + create_table :facet_items do |t| + t.string :value + t.boolean :visible, :default => true + + t.timestamps null: false + end + add_index :facet_items, :value, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index dce53f0..170fdd9 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150814184553) do +ActiveRecord::Schema.define(version: 20150915185324) do create_table "bookmarks", force: :cascade do |t| t.integer "user_id", null: false @@ -34,6 +34,15 @@ add_index "facet_fields", ["key"], name: "index_facet_fields_on_key", unique: true + create_table "facet_items", force: :cascade do |t| + t.string "value" + t.boolean "visible", default: true + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + add_index "facet_items", ["value"], name: "index_facet_items_on_value", unique: true + create_table "form_template_properties", force: :cascade do |t| t.integer "form_template_id" t.string "name", null: false diff --git a/spec/factories/facet_items.rb b/spec/factories/facet_items.rb new file mode 100644 index 0000000..9571890 --- /dev/null +++ b/spec/factories/facet_items.rb @@ -0,0 +1,7 @@ +FactoryGirl.define do + factory :facet_item do + value "MyString" +visible false + end + +end diff --git a/spec/models/facet_item_spec.rb b/spec/models/facet_item_spec.rb new file mode 100644 index 0000000..fc5dc57 --- /dev/null +++ b/spec/models/facet_item_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe FacetItem, type: :model do + # pending "add some examples to (or delete) #{__FILE__}" +end From cfab39998e54ccbc34d4e6f1b7c399c1a4190fff Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Wed, 16 Sep 2015 09:19:16 -0700 Subject: [PATCH 2/8] added spec for new actions in admin facets controller --- app/controllers/admin/facets_controller.rb | 2 +- app/facades/facet_configuration_facade.rb | 2 -- app/models/search_builder.rb | 16 +++++++----- config/locales/en.yml | 2 +- .../admin/facets_controller_spec.rb | 25 +++++++++++++++++++ spec/factories/facet_items.rb | 2 +- 6 files changed, 38 insertions(+), 11 deletions(-) diff --git a/app/controllers/admin/facets_controller.rb b/app/controllers/admin/facets_controller.rb index 73fa235..58766fe 100644 --- a/app/controllers/admin/facets_controller.rb +++ b/app/controllers/admin/facets_controller.rb @@ -56,7 +56,7 @@ def add_item unless facet_item.visible facet_item.visible = true facet_item.save - flash[:success] = t('admin.facets.field_item_created') + flash[:success] = t('admin.facets.field_item_added') end rescue flash[:alert] = t('admin.facets.remove_item.fail') diff --git a/app/facades/facet_configuration_facade.rb b/app/facades/facet_configuration_facade.rb index 58429f1..6911e47 100644 --- a/app/facades/facet_configuration_facade.rb +++ b/app/facades/facet_configuration_facade.rb @@ -27,9 +27,7 @@ def all_solr_fields def solr_field_iterator @solr_field_iterator ||= iterator_factory.new(all_solr_fields).map do |k, v| - setup_facet_item_set(v) if k == :set - [k, HasFacetField.new(v, grouped_facets[k].try(:first) || FacetField.new(:key => k))] end end diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb index 7e29c31..676ee7f 100644 --- a/app/models/search_builder.rb +++ b/app/models/search_builder.rb @@ -11,18 +11,22 @@ def restrict_to_set(solr_params) def filter_set_admin(solr_params) solr_params[:fq] ||= [] - remove_items ||= [] - FacetItem.all.each do |item| - unless item.visible? - remove_items << item.value - end - end if remove_items.any? filter = remove_items.map { |i| "-\"#{i}\"" }.join("") solr_params[:fq] << "set_ssim:("+filter+")" end end + def remove_items + items ||= [] + FacetItem.all.each do |item| + unless item.visible? + items << item.value + end + end + items + end + def only_unreviewed(solr_params) solr_params[:fq] ||= [] solr_params[:fq] << "reviewed_bsi:false" diff --git a/config/locales/en.yml b/config/locales/en.yml index ce34410..cc4c6fe 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -40,7 +40,7 @@ en: admin: facets: field_created: "Facet field configured" - field_item_created: "Facet field item created" + field_item_added: "Facet field item added" update: fail: 'Failed to update facet' destroy: diff --git a/spec/controllers/admin/facets_controller_spec.rb b/spec/controllers/admin/facets_controller_spec.rb index d8580fa..5e58afd 100644 --- a/spec/controllers/admin/facets_controller_spec.rb +++ b/spec/controllers/admin/facets_controller_spec.rb @@ -56,4 +56,29 @@ end end end + + describe "#remove_item" do + it "should remove item" do + FacetField.create(:key => "hello", :label => "world") + item = FacetItem.create(:value => "my set") + patch :remove_item, id: item.id.to_s + expect(response).to redirect_to admin_facets_path + expect(flash[:success]).to eq I18n.t("admin.facets.remove_item.success") + expect(FacetItem.where(:id => item.id).first.visible).to eq false + end + end + + describe "#add_item" do + it "should add item" do + FacetField.create(:key => "hello", :label => "world") + item = FacetItem.create(:value => "my set") + patch :remove_item, id: item.id.to_s + patch :add_item, id: item.id.to_s + expect(response).to redirect_to admin_facets_path + expect(flash[:success]).to eq I18n.t("admin.facets.field_item_added") + expect(FacetItem.where(:id => item.id).first.visible).to eq true + end + + end + end diff --git a/spec/factories/facet_items.rb b/spec/factories/facet_items.rb index 9571890..8fdb208 100644 --- a/spec/factories/facet_items.rb +++ b/spec/factories/facet_items.rb @@ -1,7 +1,7 @@ FactoryGirl.define do factory :facet_item do value "MyString" -visible false + visible true end end From f2c00347919926679c03f0cd60625b6ec8d53f74 Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Wed, 16 Sep 2015 11:32:39 -0700 Subject: [PATCH 3/8] added spec for new search builder method --- app/models/search_builder.rb | 12 ++++++--- .../admin/facets_controller_spec.rb | 1 + spec/factories/facet_items.rb | 3 ++- spec/models/facet_item_spec.rb | 5 +++- spec/models/search_builder_spec.rb | 26 +++++++++++++++++++ spec/rails_helper.rb | 2 ++ 6 files changed, 43 insertions(+), 6 deletions(-) diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb index 676ee7f..3b2969b 100644 --- a/app/models/search_builder.rb +++ b/app/models/search_builder.rb @@ -17,6 +17,13 @@ def filter_set_admin(solr_params) end end + def only_unreviewed(solr_params) + solr_params[:fq] ||= [] + solr_params[:fq] << "reviewed_bsi:false" + end + + private + def remove_items items ||= [] FacetItem.all.each do |item| @@ -27,8 +34,5 @@ def remove_items items end - def only_unreviewed(solr_params) - solr_params[:fq] ||= [] - solr_params[:fq] << "reviewed_bsi:false" - end + end diff --git a/spec/controllers/admin/facets_controller_spec.rb b/spec/controllers/admin/facets_controller_spec.rb index 5e58afd..910d17b 100644 --- a/spec/controllers/admin/facets_controller_spec.rb +++ b/spec/controllers/admin/facets_controller_spec.rb @@ -73,6 +73,7 @@ FacetField.create(:key => "hello", :label => "world") item = FacetItem.create(:value => "my set") patch :remove_item, id: item.id.to_s + expect(FacetItem.where(:id => item.id).first.visible).to eq false patch :add_item, id: item.id.to_s expect(response).to redirect_to admin_facets_path expect(flash[:success]).to eq I18n.t("admin.facets.field_item_added") diff --git a/spec/factories/facet_items.rb b/spec/factories/facet_items.rb index 8fdb208..a64bba3 100644 --- a/spec/factories/facet_items.rb +++ b/spec/factories/facet_items.rb @@ -1,6 +1,7 @@ FactoryGirl.define do + sequence(:value) { |n| "MyString#{n}" } factory :facet_item do - value "MyString" + value visible true end diff --git a/spec/models/facet_item_spec.rb b/spec/models/facet_item_spec.rb index fc5dc57..a3746d0 100644 --- a/spec/models/facet_item_spec.rb +++ b/spec/models/facet_item_spec.rb @@ -1,5 +1,8 @@ require 'rails_helper' RSpec.describe FacetItem, type: :model do - # pending "add some examples to (or delete) #{__FILE__}" + describe "validations" do + it { should validate_presence_of :value } + end + end diff --git a/spec/models/search_builder_spec.rb b/spec/models/search_builder_spec.rb index 18117ce..562f5e6 100644 --- a/spec/models/search_builder_spec.rb +++ b/spec/models/search_builder_spec.rb @@ -27,4 +27,30 @@ end end + describe "#filter_set_admin" do + let(:processor_chain) { [:filter_set_admin] } + let(:add_visible_item) { create :facet_item, :value => "banana", :visible => true } + let(:remove_first_item) { create :facet_item, :value => "hello", :visible => false } + let(:remove_second_item) { create :facet_item, :value => "world", :visible => false } + + context "when there is no set" do + it "should not do anything" do + expect(subject.processed_parameters[:fq]).to eq [] + end + end + + context "when there is a set with multiple items" do + it "should display visible items" do + add_visible_item + expect(subject.processed_parameters[:fq].first).not_to match(/banana/) + end + it "should filter out removed items" do + add_visible_item + remove_first_item + remove_second_item + expect(subject.processed_parameters[:fq]).to eq ["set_ssim:(-\"hello\"-\"world\")"] + expect(subject.processed_parameters[:fq].first).not_to match(/banana/) + end + end + end end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 16fec1b..6b24242 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -35,6 +35,8 @@ # instead of true. config.use_transactional_fixtures = true + config.include FactoryGirl::Syntax::Methods + # RSpec Rails can automatically mix in different behaviours to your tests # based on their file location, for example enabling you to call `get` and # `post` in specs under `spec/controllers`. From 00738b12d0779563b89f8aad4393eb4fb92774ac Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Fri, 18 Sep 2015 09:07:58 -0700 Subject: [PATCH 4/8] updated facets controller and refactored set_visibility --- app/controllers/admin/facets_controller.rb | 27 ++++++++++++---------- app/controllers/catalog_controller.rb | 2 +- app/models/search_builder.rb | 3 +-- spec/models/search_builder_spec.rb | 4 ++-- spec/routing/admin_facet_routing_spec.rb | 7 ++++++ 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/app/controllers/admin/facets_controller.rb b/app/controllers/admin/facets_controller.rb index 58766fe..bfaa323 100644 --- a/app/controllers/admin/facets_controller.rb +++ b/app/controllers/admin/facets_controller.rb @@ -37,12 +37,8 @@ def destroy def remove_item begin - facet_item = find_item(params[:id]) - if facet_item.visible - facet_item.visible = false - facet_item.save - flash[:success] = t('admin.facets.remove_item.success') - end + set_visibility + flash[:success] = t('admin.facets.remove_item.success') rescue flash[:alert] = t('admin.facets.remove_item.fail') end @@ -52,12 +48,8 @@ def remove_item def add_item begin - facet_item = find_item(params[:id]) - unless facet_item.visible - facet_item.visible = true - facet_item.save - flash[:success] = t('admin.facets.field_item_added') - end + set_visibility + flash[:success] = t('admin.facets.field_item_added') rescue flash[:alert] = t('admin.facets.remove_item.fail') end @@ -66,6 +58,17 @@ def add_item end private + + def set_visibility + facet_item = find_item(params[:id]) + if facet_item.visible + facet_item.visible = false + else + facet_item.visible = true + end + facet_item.save + end + def find_item(id) FacetItem.find(id) end diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 05fab7c..59565bf 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -8,7 +8,7 @@ class CatalogController < ApplicationController include Hydra::Controller::ControllerBehavior # This applies appropriate access controls to all solr queries self.search_params_logic += [:add_access_controls_to_solr_params] - self.search_params_logic += [:filter_set_admin] + self.search_params_logic += [:filter_sets] # Apply access controls to show. before_filter :enforce_show_permissions, :only => :show diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb index 3b2969b..eaf1342 100644 --- a/app/models/search_builder.rb +++ b/app/models/search_builder.rb @@ -9,7 +9,7 @@ def restrict_to_set(solr_params) end end - def filter_set_admin(solr_params) + def filter_sets(solr_params) solr_params[:fq] ||= [] if remove_items.any? filter = remove_items.map { |i| "-\"#{i}\"" }.join("") @@ -34,5 +34,4 @@ def remove_items items end - end diff --git a/spec/models/search_builder_spec.rb b/spec/models/search_builder_spec.rb index 562f5e6..23e6c30 100644 --- a/spec/models/search_builder_spec.rb +++ b/spec/models/search_builder_spec.rb @@ -27,8 +27,8 @@ end end - describe "#filter_set_admin" do - let(:processor_chain) { [:filter_set_admin] } + describe "#filter_sets" do + let(:processor_chain) { [:filter_sets] } let(:add_visible_item) { create :facet_item, :value => "banana", :visible => true } let(:remove_first_item) { create :facet_item, :value => "hello", :visible => false } let(:remove_second_item) { create :facet_item, :value => "world", :visible => false } diff --git a/spec/routing/admin_facet_routing_spec.rb b/spec/routing/admin_facet_routing_spec.rb index 78b8e9f..f24cc1b 100644 --- a/spec/routing/admin_facet_routing_spec.rb +++ b/spec/routing/admin_facet_routing_spec.rb @@ -10,4 +10,11 @@ it "should route delete /admin/facet/1 to facets#destroy" do expect(delete '/admin/facets/1').to route_to :controller => "admin/facets", :action => "destroy", :id => "1" end + it "should route /admin/facets/1/remove_item to admin/facets#remove_item" do + expect(get '/admin/facets/1/remove_item').to route_to :controller => "admin/facets", :action => "remove_item", :id=> "1" + end + it "should route /admin/facets/1/add_item to admin/facets#add_item" do + expect(get '/admin/facets/1/add_item').to route_to :controller => "admin/facets", :action => "add_item", :id=> "1" + end + end From 7530727bd230905e83c9d6d3bbc86e65ec153f67 Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Fri, 18 Sep 2015 09:51:40 -0700 Subject: [PATCH 5/8] added additional specs for invalid updates in facet items for sets --- app/controllers/admin/facets_controller.rb | 4 +- config/locales/en.yml | 4 +- .../admin/facets_controller_spec.rb | 51 ++++++++++++------- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/app/controllers/admin/facets_controller.rb b/app/controllers/admin/facets_controller.rb index bfaa323..a43849e 100644 --- a/app/controllers/admin/facets_controller.rb +++ b/app/controllers/admin/facets_controller.rb @@ -49,9 +49,9 @@ def remove_item def add_item begin set_visibility - flash[:success] = t('admin.facets.field_item_added') + flash[:success] = t('admin.facets.add_item.success') rescue - flash[:alert] = t('admin.facets.remove_item.fail') + flash[:alert] = t('admin.facets.add_item.fail') end redirect_to admin_facets_path diff --git a/config/locales/en.yml b/config/locales/en.yml index cc4c6fe..bbe7884 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -40,12 +40,14 @@ en: admin: facets: field_created: "Facet field configured" - field_item_added: "Facet field item added" update: fail: 'Failed to update facet' destroy: fail: "Failed to delete facet" success: "Deleted facet" + add_item: + fail: "Failed to add item" + success: "Added facet item" remove_item: fail: "Failed to delete item" success: "Deleted facet item" diff --git a/spec/controllers/admin/facets_controller_spec.rb b/spec/controllers/admin/facets_controller_spec.rb index 910d17b..d853b71 100644 --- a/spec/controllers/admin/facets_controller_spec.rb +++ b/spec/controllers/admin/facets_controller_spec.rb @@ -58,28 +58,45 @@ end describe "#remove_item" do - it "should remove item" do - FacetField.create(:key => "hello", :label => "world") - item = FacetItem.create(:value => "my set") - patch :remove_item, id: item.id.to_s - expect(response).to redirect_to admin_facets_path - expect(flash[:success]).to eq I18n.t("admin.facets.remove_item.success") - expect(FacetItem.where(:id => item.id).first.visible).to eq false + context "when the field doedn't exist" do + it "should redirect and show a flash" do + patch :remove_item, id: "1" + expect(response).to redirect_to admin_facets_path + expect(flash[:alert]).to eq I18n.t("admin.facets.remove_item.fail") + end + end + context "when the field exists" do + it "should remove item" do + FacetField.create(:key => "hello", :label => "world") + item = FacetItem.create(:value => "my set") + patch :remove_item, id: item.id.to_s + expect(response).to redirect_to admin_facets_path + expect(flash[:success]).to eq I18n.t("admin.facets.remove_item.success") + expect(FacetItem.where(:id => item.id).first.visible).to eq false + end end end describe "#add_item" do - it "should add item" do - FacetField.create(:key => "hello", :label => "world") - item = FacetItem.create(:value => "my set") - patch :remove_item, id: item.id.to_s - expect(FacetItem.where(:id => item.id).first.visible).to eq false - patch :add_item, id: item.id.to_s - expect(response).to redirect_to admin_facets_path - expect(flash[:success]).to eq I18n.t("admin.facets.field_item_added") - expect(FacetItem.where(:id => item.id).first.visible).to eq true + context "when the field doedn't exist" do + it "should redirect and show a flash" do + patch :add_item, id: "1" + expect(response).to redirect_to admin_facets_path + expect(flash[:alert]).to eq I18n.t("admin.facets.add_item.fail") + end + end + context "when the field exists" do + it "should add item" do + FacetField.create(:key => "hello", :label => "world") + item = FacetItem.create(:value => "my set") + patch :remove_item, id: item.id.to_s + expect(FacetItem.where(:id => item.id).first.visible).to eq false + patch :add_item, id: item.id.to_s + expect(response).to redirect_to admin_facets_path + expect(flash[:success]).to eq I18n.t("admin.facets.add_item.success") + expect(FacetItem.where(:id => item.id).first.visible).to eq true + end end - end end From 3cf6a27c3462671d39e84a093cfdc08776656e01 Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Fri, 18 Sep 2015 10:30:02 -0700 Subject: [PATCH 6/8] removed facet_item_params --- app/controllers/admin/facets_controller.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/controllers/admin/facets_controller.rb b/app/controllers/admin/facets_controller.rb index a43849e..13c6413 100644 --- a/app/controllers/admin/facets_controller.rb +++ b/app/controllers/admin/facets_controller.rb @@ -77,10 +77,6 @@ def find_facet(id) FacetField.find(id) end - def facet_item_params - params.require(:facet_item).permit(:value) - end - def facet_field_params params.require(:facet_field).permit(:key, :label) end From 3dc1a8d27e2fa98a8e591d9cb930243d190efa65 Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Fri, 18 Sep 2015 11:00:28 -0700 Subject: [PATCH 7/8] updated facet configuration facade spec --- spec/facades/facet_configuration_facade_spec.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spec/facades/facet_configuration_facade_spec.rb b/spec/facades/facet_configuration_facade_spec.rb index 55d1f83..7a8344c 100644 --- a/spec/facades/facet_configuration_facade_spec.rb +++ b/spec/facades/facet_configuration_facade_spec.rb @@ -24,6 +24,10 @@ "bad_key_ssim" => { "distinct" => 3 + }, + "set_ssim" => + { + "distinct" => 2 } } end @@ -48,15 +52,14 @@ describe "#inactive" do context "when there are no active facets" do it "should have all the fields" do - expect(subject.inactive.to_h.keys).to eq [:workType, :alternative, :title] + expect(subject.inactive.to_h.keys).to eq [:workType, :alternative, :title, :set] expect(subject.inactive.to_h[:workType].facet).not_to be_persisted end end context "when there are active facets" do it "should have only the non-active fields" do FacetField.create(:key => "title") - - expect(subject.inactive.to_h.keys).to eq [:workType, :alternative] + expect(subject.inactive.to_h.keys).to eq [:workType, :alternative, :set] end end end From a7884aee70b8f88cd6106913a25fa4335a148e52 Mon Sep 17 00:00:00 2001 From: luisgreg99 Date: Fri, 18 Sep 2015 11:20:29 -0700 Subject: [PATCH 8/8] updated facet configuration facade spec to check topterms --- spec/facades/facet_configuration_facade_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/facades/facet_configuration_facade_spec.rb b/spec/facades/facet_configuration_facade_spec.rb index 7a8344c..491a6c4 100644 --- a/spec/facades/facet_configuration_facade_spec.rb +++ b/spec/facades/facet_configuration_facade_spec.rb @@ -27,7 +27,8 @@ }, "set_ssim" => { - "distinct" => 2 + "distinct" => 2, + "topTerms" => ["collection1", 1, "collection2", 1] } } end @@ -41,7 +42,6 @@ context "when there are active facets" do it "should contain settings for them" do facet = FacetField.create(:key => "title") - expect(subject.active.to_h.keys.first).to eq :title expect(subject.active.to_h.values.first.distinct).to eq 5 expect(subject.active.to_h.values.first.facet).to eq facet