blacklight 7.41.0 → 8.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.env +2 -3
- data/.github/workflows/ruby.yml +81 -0
- data/.rubocop.yml +243 -14
- data/.rubocop_todo.yml +137 -429
- data/Gemfile +11 -6
- data/README.md +11 -3
- data/VERSION +1 -1
- data/app/assets/javascripts/blacklight/blacklight.esm.js +384 -0
- data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -0
- data/app/assets/javascripts/blacklight/blacklight.js +374 -493
- data/app/assets/javascripts/blacklight/blacklight.js.map +1 -0
- data/app/assets/stylesheets/blacklight/_autocomplete.scss +25 -0
- data/app/assets/stylesheets/blacklight/_blacklight_base.scss +1 -1
- data/app/assets/stylesheets/blacklight/_bookmark.scss +16 -0
- data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +8 -0
- data/app/assets/stylesheets/blacklight/_constraints.scss +4 -4
- data/app/assets/stylesheets/blacklight/_facets.scss +72 -44
- data/app/assets/stylesheets/blacklight/_header.scss +0 -15
- data/app/assets/stylesheets/blacklight/_icons.scss +0 -14
- data/app/assets/stylesheets/blacklight/_mixins.scss +20 -0
- data/app/assets/stylesheets/blacklight/_modal.scss +8 -2
- data/app/assets/stylesheets/blacklight/_search_form.scss +30 -3
- data/app/assets/stylesheets/blacklight/_search_history.scss +10 -1
- data/app/assets/stylesheets/blacklight/_search_results.scss +6 -2
- data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +4 -1
- data/app/builders/blacklight/action_builder.rb +18 -9
- data/app/components/blacklight/advanced_search_form_component.html.erb +3 -3
- data/app/components/blacklight/advanced_search_form_component.rb +8 -10
- data/app/components/blacklight/constraints_component.rb +27 -37
- data/app/components/blacklight/document/action_component.rb +12 -10
- data/app/components/blacklight/document/actions_component.rb +2 -2
- data/app/components/blacklight/document/bookmark_component.html.erb +9 -0
- data/app/components/blacklight/document/bookmark_component.rb +4 -2
- data/app/components/blacklight/document/citation_component.rb +5 -3
- data/app/components/blacklight/document/group_component.rb +7 -3
- data/app/components/blacklight/document/sidebar_component.html.erb +2 -0
- data/app/components/blacklight/document/sidebar_component.rb +16 -0
- data/app/components/blacklight/document/thumbnail_component.html.erb +2 -7
- data/app/components/blacklight/document/thumbnail_component.rb +1 -9
- data/app/components/blacklight/document_component.html.erb +1 -1
- data/app/components/blacklight/document_component.rb +16 -78
- data/app/components/blacklight/document_metadata_component.html.erb +2 -4
- data/app/components/blacklight/document_metadata_component.rb +5 -10
- data/app/components/blacklight/facet_component.rb +3 -3
- data/app/components/blacklight/facet_field_checkboxes_component.html.erb +4 -4
- data/app/components/blacklight/facet_field_checkboxes_component.rb +1 -1
- data/app/components/blacklight/facet_field_component.html.erb +4 -5
- data/app/components/blacklight/facet_field_component.rb +9 -2
- data/app/components/blacklight/facet_field_list_component.html.erb +3 -3
- data/app/components/blacklight/facet_field_list_component.rb +37 -5
- data/app/components/blacklight/facet_field_no_layout_component.rb +0 -2
- data/app/components/blacklight/facet_item_component.rb +1 -43
- data/app/components/blacklight/facet_item_pivot_component.rb +21 -23
- data/app/components/blacklight/header_component.rb +1 -1
- data/app/components/blacklight/hidden_search_state_component.rb +1 -2
- data/app/components/blacklight/icons/icon_component.rb +4 -9
- data/app/components/blacklight/icons/legacy_icon_component.rb +30 -0
- data/app/components/blacklight/icons/list_component.rb +16 -0
- data/app/components/blacklight/icons/search_component.rb +16 -0
- data/app/components/blacklight/metadata_field_component.html.erb +2 -2
- data/app/components/blacklight/metadata_field_component.rb +24 -8
- data/app/components/blacklight/metadata_field_layout_component.rb +4 -25
- data/app/components/blacklight/response/facet_group_component.html.erb +3 -5
- data/app/components/blacklight/response/facet_group_component.rb +29 -8
- data/app/components/blacklight/response/pagination_component.html.erb +1 -1
- data/app/components/blacklight/response/pagination_component.rb +2 -11
- data/app/components/blacklight/response/sort_component.html.erb +6 -1
- data/app/components/blacklight/response/sort_component.rb +1 -16
- data/app/components/blacklight/response/spellcheck_component.rb +18 -7
- data/app/components/blacklight/response/view_type_button_component.rb +3 -7
- data/app/components/blacklight/response/view_type_component.rb +4 -6
- data/app/components/blacklight/search/sidebar_component.html.erb +8 -0
- data/app/components/blacklight/search/sidebar_component.rb +17 -0
- data/app/components/blacklight/search_bar_component.html.erb +20 -15
- data/app/components/blacklight/search_bar_component.rb +2 -16
- data/app/components/blacklight/search_button_component.rb +3 -3
- data/app/components/blacklight/search_context_component.rb +43 -10
- data/app/components/blacklight/search_header_component.html.erb +2 -0
- data/app/components/blacklight/search_header_component.rb +6 -0
- data/app/components/blacklight/start_over_button_component.rb +5 -3
- data/app/components/blacklight/system/dropdown_component.rb +8 -5
- data/app/components/blacklight/system/flash_message_component.html.erb +4 -2
- data/app/components/blacklight/system/flash_message_component.rb +12 -3
- data/app/components/blacklight/system/modal_component.html.erb +1 -1
- data/app/components/blacklight/system/modal_component.rb +1 -3
- data/app/components/blacklight/top_navbar_component.html.erb +1 -1
- data/app/components/blacklight/top_navbar_component.rb +0 -4
- data/app/controllers/bookmarks_controller.rb +1 -0
- data/app/controllers/catalog_controller.rb +1 -0
- data/app/controllers/concerns/blacklight/bookmarks.rb +10 -9
- data/app/controllers/concerns/blacklight/catalog.rb +21 -83
- data/app/controllers/concerns/blacklight/controller.rb +3 -41
- data/app/controllers/concerns/blacklight/search_context.rb +25 -7
- data/app/controllers/concerns/blacklight/search_history.rb +2 -0
- data/app/controllers/concerns/blacklight/searchable.rb +12 -1
- data/app/controllers/concerns/blacklight/token_based_user.rb +13 -1
- data/app/controllers/search_history_controller.rb +1 -0
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +12 -310
- data/app/helpers/blacklight/catalog_helper_behavior.rb +22 -139
- data/app/helpers/blacklight/component_helper_behavior.rb +2 -53
- data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -119
- data/app/helpers/blacklight/facets_helper_behavior.rb +4 -321
- data/app/helpers/blacklight/icon_helper_behavior.rb +5 -7
- data/app/helpers/blacklight/layout_helper_behavior.rb +4 -3
- data/app/helpers/blacklight/render_partials_helper_behavior.rb +11 -31
- data/app/helpers/blacklight/url_helper_behavior.rb +12 -97
- data/app/helpers/blacklight_helper.rb +1 -0
- data/app/helpers/catalog_helper.rb +1 -0
- data/app/javascript/blacklight/bookmark_toggle.js +13 -19
- data/app/javascript/blacklight/button_focus.js +12 -10
- data/app/javascript/blacklight/checkbox_submit.js +68 -123
- data/app/javascript/blacklight/core.js +5 -7
- data/app/javascript/blacklight/index.js +13 -0
- data/app/javascript/blacklight/modal.js +99 -164
- data/app/javascript/blacklight/modalForm.js +60 -0
- data/app/javascript/blacklight/search_context.js +46 -54
- data/app/models/blacklight/facet_paginator.rb +3 -2
- data/app/models/blacklight/icon.rb +4 -2
- data/app/models/bookmark.rb +0 -2
- data/app/models/concerns/blacklight/configurable.rb +5 -4
- data/app/models/concerns/blacklight/document/active_model_shim.rb +1 -10
- data/app/models/concerns/blacklight/document/cache_key.rb +1 -0
- data/app/models/concerns/blacklight/document/dublin_core.rb +2 -1
- data/app/models/concerns/blacklight/document/email.rb +1 -0
- data/app/models/concerns/blacklight/document/export.rb +2 -1
- data/app/models/concerns/blacklight/document/extensions.rb +1 -0
- data/app/models/concerns/blacklight/document/schema_org.rb +1 -0
- data/app/models/concerns/blacklight/document/semantic_fields.rb +2 -1
- data/app/models/concerns/blacklight/document/sms.rb +1 -0
- data/app/models/concerns/blacklight/suggest/response.rb +1 -0
- data/app/models/concerns/blacklight/user.rb +17 -8
- data/app/models/record_mailer.rb +13 -12
- data/app/models/search.rb +1 -7
- data/app/models/solr_document.rb +1 -0
- data/app/presenters/blacklight/clause_presenter.rb +1 -1
- data/app/presenters/blacklight/document_presenter.rb +23 -50
- data/app/presenters/blacklight/facet_field_presenter.rb +39 -14
- data/app/presenters/blacklight/facet_grouped_item_presenter.rb +1 -5
- data/app/presenters/blacklight/facet_item_pivot_presenter.rb +60 -0
- data/app/presenters/blacklight/facet_item_presenter.rb +3 -9
- data/app/presenters/blacklight/field_presenter.rb +1 -0
- data/app/presenters/blacklight/index_presenter.rb +2 -40
- data/app/presenters/blacklight/json_presenter.rb +10 -6
- data/app/presenters/blacklight/rendering/link_to_facet.rb +2 -5
- data/app/presenters/blacklight/show_presenter.rb +1 -9
- data/app/presenters/blacklight/thumbnail_presenter.rb +1 -1
- data/app/services/blacklight/bookmarks_search_builder.rb +22 -0
- data/app/services/blacklight/field_retriever.rb +12 -21
- data/app/services/blacklight/search_service.rb +10 -17
- data/app/values/blacklight/types.rb +0 -18
- data/app/views/bookmarks/_clear_bookmarks_widget.html.erb +8 -1
- data/app/views/bookmarks/_tools.html.erb +7 -12
- data/app/views/catalog/_advanced_search_form.html.erb +0 -1
- data/app/views/catalog/_bookmark_control.html.erb +1 -1
- data/app/views/catalog/_citation.html.erb +1 -1
- data/app/views/catalog/_constraints.html.erb +1 -14
- data/app/views/catalog/_document.atom.builder +12 -14
- data/app/views/catalog/_document.html.erb +5 -3
- data/app/views/catalog/_document.rss.builder +2 -4
- data/app/views/catalog/_facet_layout.html.erb +2 -2
- data/app/views/catalog/_facets.html.erb +5 -4
- data/app/views/catalog/_home_text.html.erb +2 -14
- data/app/views/catalog/_per_page_widget.html.erb +10 -1
- data/app/views/catalog/_search_form.html.erb +2 -2
- data/app/views/catalog/_search_header.html.erb +1 -2
- data/app/views/catalog/_search_results.html.erb +2 -2
- data/app/views/catalog/_search_sidebar.html.erb +5 -1
- data/app/views/catalog/_show_main_content.html.erb +11 -16
- data/app/views/catalog/_show_sidebar.html.erb +2 -2
- data/app/views/catalog/_show_tools.html.erb +8 -14
- data/app/views/catalog/_view_type_group.html.erb +1 -1
- data/app/views/catalog/email.html.erb +2 -2
- data/app/views/catalog/email_success.html.erb +5 -6
- data/app/views/catalog/facet.html.erb +7 -5
- data/app/views/catalog/index.atom.builder +12 -14
- data/app/views/catalog/index.html.erb +4 -1
- data/app/views/catalog/index.json.jbuilder +19 -19
- data/app/views/catalog/index.rss.builder +1 -1
- data/app/views/catalog/opensearch.xml.builder +1 -1
- data/app/views/catalog/sms.html.erb +2 -2
- data/app/views/catalog/sms_success.html.erb +5 -6
- data/app/views/catalog/suggest.html.erb +3 -0
- data/app/views/kaminari/blacklight/_page.html.erb +2 -1
- data/app/views/layouts/blacklight/base.html.erb +13 -2
- data/app/views/search_history/index.html.erb +6 -2
- data/app/views/shared/_flash_messages.html.erb +1 -1
- data/app/views/shared/_modal.html.erb +3 -3
- data/blacklight.gemspec +7 -11
- data/config/importmap.rb +3 -0
- data/config/locales/blacklight.ar.yml +0 -1
- data/config/locales/blacklight.ca.yml +0 -1
- data/config/locales/blacklight.de.yml +0 -1
- data/config/locales/blacklight.en.yml +0 -2
- data/config/locales/blacklight.es.yml +0 -1
- data/config/locales/blacklight.fr.yml +0 -1
- data/config/locales/blacklight.hu.yml +0 -1
- data/config/locales/blacklight.it.yml +0 -1
- data/config/locales/blacklight.nl.yml +0 -1
- data/config/locales/blacklight.pt-BR.yml +0 -1
- data/config/locales/blacklight.sq.yml +0 -1
- data/config/locales/blacklight.zh.yml +0 -1
- data/config/routes.rb +3 -2
- data/db/migrate/20140202020201_create_searches.rb +1 -0
- data/db/migrate/20140202020202_create_bookmarks.rb +1 -0
- data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -0
- data/docker-compose.yml +3 -3
- data/lib/blacklight/abstract_repository.rb +1 -6
- data/lib/blacklight/component.rb +47 -10
- data/lib/blacklight/configuration/context.rb +4 -4
- data/lib/blacklight/configuration/display_field.rb +7 -9
- data/lib/blacklight/configuration/facet_field.rb +17 -11
- data/lib/blacklight/configuration/field.rb +1 -0
- data/lib/blacklight/configuration/fields.rb +12 -15
- data/lib/blacklight/configuration/index_field.rb +1 -0
- data/lib/blacklight/configuration/null_display_field.rb +17 -0
- data/lib/blacklight/configuration/search_field.rb +1 -0
- data/lib/blacklight/configuration/show_field.rb +1 -0
- data/lib/blacklight/configuration/sort_field.rb +1 -0
- data/lib/blacklight/configuration/tool_config.rb +1 -0
- data/lib/blacklight/configuration/view_config.rb +14 -10
- data/lib/blacklight/configuration.rb +310 -365
- data/lib/blacklight/engine.rb +8 -24
- data/lib/blacklight/exceptions.rb +2 -2
- data/lib/blacklight/nested_open_struct_with_hash_access.rb +7 -13
- data/lib/blacklight/open_struct_with_hash_access.rb +23 -6
- data/lib/blacklight/parameters.rb +7 -21
- data/lib/blacklight/routes/exportable.rb +1 -0
- data/lib/blacklight/routes/searchable.rb +2 -1
- data/lib/blacklight/routes.rb +1 -0
- data/lib/blacklight/search_builder.rb +10 -10
- data/lib/blacklight/search_state/filter_field.rb +8 -25
- data/lib/blacklight/search_state/pivot_filter_field.rb +144 -0
- data/lib/blacklight/search_state.rb +23 -79
- data/lib/blacklight/solr/document.rb +1 -0
- data/lib/blacklight/solr/facet_paginator.rb +1 -0
- data/lib/blacklight/solr/repository.rb +4 -24
- data/lib/blacklight/solr/request.rb +1 -0
- data/lib/blacklight/solr/response/facets.rb +21 -5
- data/lib/blacklight/solr/response/group.rb +1 -0
- data/lib/blacklight/solr/response/group_response.rb +1 -0
- data/lib/blacklight/solr/response/more_like_this.rb +1 -0
- data/lib/blacklight/solr/response/pagination_methods.rb +4 -3
- data/lib/blacklight/solr/response/params.rb +5 -4
- data/lib/blacklight/solr/response/response.rb +1 -0
- data/lib/blacklight/solr/response/spelling.rb +1 -0
- data/lib/blacklight/solr/response.rb +16 -3
- data/lib/blacklight/solr/search_builder_behavior.rb +16 -35
- data/lib/blacklight/solr.rb +7 -0
- data/lib/blacklight/version.rb +1 -0
- data/lib/blacklight.rb +26 -14
- data/lib/generators/blacklight/assets/importmap_generator.rb +55 -0
- data/lib/generators/blacklight/assets/propshaft_generator.rb +25 -0
- data/lib/generators/blacklight/assets/sprockets_generator.rb +66 -0
- data/lib/generators/blacklight/assets_generator.rb +13 -86
- data/lib/generators/blacklight/controller_generator.rb +4 -3
- data/lib/generators/blacklight/document_generator.rb +1 -0
- data/lib/generators/blacklight/install_generator.rb +4 -3
- data/lib/generators/blacklight/models_generator.rb +1 -0
- data/lib/generators/blacklight/search_builder_generator.rb +1 -0
- data/lib/generators/blacklight/solr_generator.rb +1 -1
- data/lib/generators/blacklight/templates/catalog_controller.rb +34 -8
- data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +1 -70
- data/lib/generators/blacklight/test_support_generator.rb +5 -3
- data/lib/generators/blacklight/user_generator.rb +7 -9
- data/lib/railties/blacklight.rake +6 -7
- data/package.json +10 -13
- data/rollup.config.js +27 -0
- data/spec/components/blacklight/constraints_component_spec.rb +17 -13
- data/spec/components/blacklight/document/action_component_spec.rb +6 -1
- data/spec/components/blacklight/document_component_spec.rb +22 -131
- data/spec/components/blacklight/facet_component_spec.rb +3 -18
- data/spec/components/blacklight/facet_field_checkboxes_component_spec.rb +1 -2
- data/spec/components/blacklight/facet_field_list_component_spec.rb +7 -6
- data/spec/components/blacklight/facet_item_pivot_component_spec.rb +10 -9
- data/spec/components/blacklight/response/view_type_component_spec.rb +66 -0
- data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
- data/spec/components/blacklight/search_context_component_spec.rb +17 -8
- data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +1 -6
- data/spec/controllers/blacklight/{base_spec.rb → catalog_spec.rb} +2 -2
- data/spec/controllers/bookmarks_controller_spec.rb +2 -3
- data/spec/controllers/catalog_controller_spec.rb +13 -135
- data/spec/features/advanced_search_spec.rb +0 -56
- data/spec/features/autocomplete_spec.rb +1 -1
- data/spec/features/axe_spec.rb +1 -6
- data/spec/features/bookmarks_spec.rb +1 -1
- data/spec/features/facets_spec.rb +6 -4
- data/spec/features/search_context_spec.rb +5 -11
- data/spec/features/search_results_spec.rb +0 -33
- data/spec/features/sitelinks_search_box.rb +13 -0
- data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +2 -138
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +0 -387
- data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
- data/spec/helpers/blacklight/layout_helper_behavior_spec.rb +3 -20
- data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +5 -7
- data/spec/helpers/blacklight/url_helper_behavior_spec.rb +9 -131
- data/spec/helpers/blacklight_helper_spec.rb +8 -252
- data/spec/helpers/catalog_helper_spec.rb +7 -118
- data/spec/i18n_spec.rb +1 -0
- data/spec/integration/generators/blacklight/solr_generator_spec.rb +1 -1
- data/spec/lib/blacklight/component_spec.rb +27 -32
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +27 -16
- data/spec/lib/blacklight/configuration/field_spec.rb +1 -1
- data/spec/lib/blacklight/configuration/view_config_spec.rb +1 -1
- data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
- data/spec/lib/blacklight/parameters_spec.rb +1 -4
- data/spec/lib/blacklight/search_state/filter_field_spec.rb +4 -4
- data/spec/lib/blacklight/search_state/pivot_filter_field_spec.rb +117 -0
- data/spec/lib/blacklight/search_state_spec.rb +80 -198
- data/spec/lib/tasks/blacklight_task_spec.rb +1 -0
- data/spec/models/blacklight/configuration_spec.rb +17 -51
- data/spec/models/blacklight/document/active_model_shim_spec.rb +2 -2
- data/spec/models/blacklight/icon_spec.rb +31 -15
- data/spec/models/blacklight/search_builder_spec.rb +9 -9
- data/spec/models/blacklight/solr/document_spec.rb +3 -3
- data/spec/models/blacklight/solr/repository_spec.rb +0 -45
- data/spec/models/blacklight/solr/response/facets_spec.rb +27 -27
- data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -0
- data/spec/models/blacklight/solr/response/group_spec.rb +1 -0
- data/spec/models/blacklight/solr/response_spec.rb +9 -2
- data/spec/models/blacklight/solr/search_builder_spec.rb +24 -44
- data/spec/models/blacklight/user_spec.rb +22 -0
- data/spec/models/solr_document_spec.rb +3 -9
- data/spec/presenters/blacklight/clause_presenter_spec.rb +1 -0
- data/spec/presenters/blacklight/document_presenter_spec.rb +2 -3
- data/spec/presenters/blacklight/facet_field_presenter_spec.rb +85 -12
- data/spec/presenters/blacklight/facet_grouped_item_presenter_spec.rb +1 -0
- data/spec/presenters/blacklight/facet_item_presenter_spec.rb +14 -13
- data/spec/presenters/blacklight/field_presenter_spec.rb +0 -14
- data/spec/presenters/blacklight/index_presenter_spec.rb +2 -5
- data/spec/presenters/blacklight/json_presenter_spec.rb +1 -0
- data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -2
- data/spec/presenters/blacklight/show_presenter_spec.rb +20 -30
- data/spec/presenters/thumbnail_presenter_spec.rb +1 -1
- data/spec/requests/load_suggestions_spec.rb +16 -0
- data/spec/routing/catalog_routing_spec.rb +2 -1
- data/spec/services/blacklight/search_service_spec.rb +39 -76
- data/spec/spec_helper.rb +8 -9
- data/spec/support/controller_level_helpers.rb +1 -2
- data/spec/support/features/search_helpers.rb +39 -0
- data/spec/support/features/session_helpers.rb +1 -0
- data/spec/support/features.rb +3 -0
- data/spec/support/view_component_capybara_test_helpers.rb +8 -0
- data/spec/test_app_templates/Gemfile.extra +1 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +9 -2
- data/spec/views/catalog/_document.html.erb_spec.rb +3 -34
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +0 -2
- data/spec/views/catalog/_search_header.erb_spec.rb +1 -0
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +1 -0
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -66
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +17 -9
- data/spec/views/catalog/email_success.html.erb_spec.rb +2 -2
- data/spec/views/catalog/facet.html.erb_spec.rb +6 -3
- data/spec/views/catalog/index.atom.builder_spec.rb +17 -11
- data/spec/views/catalog/index.html.erb_spec.rb +5 -6
- data/spec/views/catalog/index.json.jbuilder_spec.rb +2 -2
- data/spec/views/catalog/show.html.erb_spec.rb +3 -25
- data/spec/views/catalog/sms_success.html.erb_spec.rb +2 -2
- data/tasks/blacklight.rake +11 -9
- data/template.demo.rb +7 -7
- metadata +77 -189
- data/.babelrc +0 -11
- data/.github/matrix.json +0 -62
- data/.github/workflows/build.yml +0 -16
- data/.github/workflows/lint.yml +0 -23
- data/.github/workflows/main.yml +0 -23
- data/.github/workflows/test.yml +0 -53
- data/app/assets/images/blacklight/list.svg +0 -1
- data/app/assets/images/blacklight/search.svg +0 -1
- data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +0 -37
- data/app/components/blacklight/content_areas_shim.rb +0 -13
- data/app/components/blacklight/search/per_page_component.html.erb +0 -2
- data/app/components/blacklight/search/per_page_component.rb +0 -50
- data/app/components/blacklight/search_context/server_item_pagination_component.html.erb +0 -10
- data/app/components/blacklight/search_context/server_item_pagination_component.rb +0 -15
- data/app/components/blacklight/system/dropdown_button_component.rb +0 -18
- data/app/controllers/concerns/blacklight/base.rb +0 -12
- data/app/controllers/concerns/blacklight/default_component_configuration.rb +0 -64
- data/app/controllers/concerns/blacklight/facet.rb +0 -69
- data/app/controllers/concerns/blacklight/search_fields.rb +0 -46
- data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +0 -27
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +0 -188
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +0 -97
- data/app/helpers/blacklight/suggest_helper_behavior.rb +0 -13
- data/app/javascript/blacklight/autocomplete.js +0 -36
- data/app/javascript/blacklight/facet_load.js +0 -22
- data/app/presenters/blacklight/search_bar_presenter.rb +0 -47
- data/app/views/catalog/_constraints_element.html.erb +0 -14
- data/app/views/catalog/_document_action.html.erb +0 -5
- data/app/views/catalog/_facet_group.html.erb +0 -5
- data/app/views/catalog/_facet_limit.html.erb +0 -3
- data/app/views/catalog/_index.html.erb +0 -1
- data/app/views/catalog/_index_header.html.erb +0 -22
- data/app/views/catalog/_previous_next_doc.html.erb +0 -2
- data/app/views/catalog/_show.html.erb +0 -6
- data/app/views/catalog/_show_header.html.erb +0 -2
- data/app/views/catalog/_thumbnail.html.erb +0 -1
- data/lib/blacklight/deprecations/engine_configuration.rb +0 -66
- data/lib/blacklight/deprecations/search_state_normalization.rb +0 -52
- data/spec/components/blacklight/header_component_spec.rb +0 -20
- data/spec/components/blacklight/icons/icon_component_spec.rb +0 -42
- data/spec/components/blacklight/response/pagination_component_spec.rb +0 -53
- data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +0 -35
- data/spec/controllers/blacklight/facet_spec.rb +0 -33
- data/spec/controllers/blacklight/search_fields_spec.rb +0 -62
- data/spec/features/citation_spec.rb +0 -10
- data/spec/features/sitelinks_search_box_spec.rb +0 -13
- data/spec/features/sms_spec.rb +0 -12
- data/spec/helpers/blacklight/hash_as_hidden_fields_behavior_spec.rb +0 -26
- data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +0 -92
- data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +0 -101
- data/spec/helpers/blacklight/suggest_helper_behavior_spec.rb +0 -48
- data/spec/lib/blacklight/engine_spec.rb +0 -41
- data/spec/presenters/blacklight/search_bar_presenter_spec.rb +0 -94
- data/spec/services/blacklight/field_retriever_spec.rb +0 -17
- data/spec/support/view_component_test_helpers.rb +0 -35
- data/spec/views/catalog/_constraints.html.erb_spec.rb +0 -33
- data/spec/views/catalog/_facet_group.html.erb_spec.rb +0 -84
- data/spec/views/catalog/_facets.html.erb_spec.rb +0 -15
- data/spec/views/catalog/_index.html.erb_spec.rb +0 -62
- data/spec/views/catalog/_index_header.html.erb_spec.rb +0 -35
- data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +0 -22
- data/spec/views/catalog/_show.html.erb_spec.rb +0 -62
- data/spec/views/catalog/_thumbnail.html.erb_spec.rb +0 -38
@@ -14,15 +14,11 @@ RSpec.describe Blacklight::ShowPresenter, api: true do
|
|
14
14
|
let(:search_state) { Blacklight::SearchState.new(params, config, controller) }
|
15
15
|
|
16
16
|
let(:document) do
|
17
|
-
SolrDocument.new(id:
|
18
|
-
'link_to_facet_true' => 'x',
|
19
|
-
'link_to_facet_named' => 'x',
|
20
|
-
'qwer' => 'document qwer value')
|
17
|
+
SolrDocument.new(id: 'xyz', some_field: 'value')
|
21
18
|
end
|
22
19
|
|
23
20
|
before do
|
24
21
|
allow(request_context).to receive(:search_state).and_return(search_state)
|
25
|
-
allow(request_context).to receive(:action_name).and_return(:show)
|
26
22
|
end
|
27
23
|
|
28
24
|
describe "link_rel_alternates" do
|
@@ -53,6 +49,10 @@ RSpec.describe Blacklight::ShowPresenter, api: true do
|
|
53
49
|
|
54
50
|
MockDocument.use_extension(MockExtension)
|
55
51
|
|
52
|
+
def mock_document_app_helper_url *args
|
53
|
+
solr_document_url(*args)
|
54
|
+
end
|
55
|
+
|
56
56
|
allow(request_context).to receive(:polymorphic_url) do |_, opts|
|
57
57
|
"url.#{opts[:format]}"
|
58
58
|
end
|
@@ -67,10 +67,12 @@ RSpec.describe Blacklight::ShowPresenter, api: true do
|
|
67
67
|
tmp_value = Capybara.ignore_hidden_elements
|
68
68
|
Capybara.ignore_hidden_elements = false
|
69
69
|
document.export_formats.each_pair do |format, _spec|
|
70
|
-
expect(subject).to have_selector("link[href$='.#{format}']"
|
71
|
-
expect(
|
72
|
-
|
73
|
-
expect(tag["
|
70
|
+
expect(subject).to have_selector("link[href$='.#{format}']") do |matches|
|
71
|
+
expect(matches).to have(1).match
|
72
|
+
tag = matches[0]
|
73
|
+
expect(tag.attributes["rel"].value).to eq "alternate"
|
74
|
+
expect(tag.attributes["title"].value).to eq format.to_s
|
75
|
+
expect(tag.attributes["href"].value).to eq mock_document_app_helper_url(document, format: format)
|
74
76
|
end
|
75
77
|
end
|
76
78
|
Capybara.ignore_hidden_elements = tmp_value
|
@@ -103,43 +105,36 @@ RSpec.describe Blacklight::ShowPresenter, api: true do
|
|
103
105
|
end
|
104
106
|
|
105
107
|
describe '#fields' do
|
106
|
-
let(:field) { instance_double(Blacklight::Configuration::Field) }
|
107
|
-
|
108
108
|
before do
|
109
|
-
|
109
|
+
config.add_show_field 'title'
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'returns the list from the configs' do
|
113
|
-
expect(subject.send(:fields)).to eq
|
113
|
+
expect(subject.send(:fields).keys).to eq ['title']
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
117
|
describe "#heading" do
|
118
118
|
it "falls back to an id" do
|
119
|
-
allow(document).to receive(:[]).with('id').and_return "xyz"
|
120
119
|
expect(subject.heading).to eq document.id
|
121
120
|
end
|
122
121
|
|
123
122
|
it "returns the value of the field" do
|
124
|
-
config.show.title_field =
|
125
|
-
allow(document).to receive(:has?).with(:x).and_return(true)
|
126
|
-
allow(document).to receive(:fetch).with(:x, nil).and_return("value")
|
123
|
+
config.show.title_field = 'some_field'
|
127
124
|
expect(subject.heading).to eq "value"
|
128
125
|
end
|
129
126
|
|
130
127
|
it "returns the first present value" do
|
131
|
-
config.show.title_field = [
|
132
|
-
allow(document).to receive(:fetch).with(:x, nil).and_return(nil)
|
133
|
-
allow(document).to receive(:fetch).with(:y, nil).and_return("value")
|
128
|
+
config.show.title_field = %w[a_field_that_doesnt_exist some_field]
|
134
129
|
expect(subject.heading).to eq "value"
|
135
130
|
end
|
136
131
|
|
137
132
|
it "can use explicit field configuration" do
|
138
|
-
config.show.title_field = Blacklight::Configuration::
|
133
|
+
config.show.title_field = Blacklight::Configuration::DisplayField.new(field: 'x', values: ->(*_) { 'hardcoded' })
|
139
134
|
expect(subject.heading).to eq 'hardcoded'
|
140
135
|
end
|
141
136
|
|
142
|
-
context "
|
137
|
+
context "with an empty document" do
|
143
138
|
let(:document) { SolrDocument.new({}) }
|
144
139
|
|
145
140
|
it "returns an empty string as the heading" do
|
@@ -150,26 +145,21 @@ RSpec.describe Blacklight::ShowPresenter, api: true do
|
|
150
145
|
|
151
146
|
describe "#html_title" do
|
152
147
|
it "falls back to an id" do
|
153
|
-
allow(document).to receive(:[]).with('id').and_return "xyz"
|
154
148
|
expect(subject.html_title).to eq document.id
|
155
149
|
end
|
156
150
|
|
157
151
|
it "returns the value of the field" do
|
158
|
-
config.show.html_title_field =
|
159
|
-
allow(document).to receive(:has?).with(:x).and_return(true)
|
160
|
-
allow(document).to receive(:fetch).with(:x, nil).and_return("value")
|
152
|
+
config.show.html_title_field = 'some_field'
|
161
153
|
expect(subject.html_title).to eq "value"
|
162
154
|
end
|
163
155
|
|
164
156
|
it "returns the first present value" do
|
165
|
-
config.show.html_title_field = [
|
166
|
-
allow(document).to receive(:fetch).with(:x, nil).and_return(nil)
|
167
|
-
allow(document).to receive(:fetch).with(:y, nil).and_return("value")
|
157
|
+
config.show.html_title_field = %w[a_field_that_doesnt_exist some_field]
|
168
158
|
expect(subject.html_title).to eq "value"
|
169
159
|
end
|
170
160
|
|
171
161
|
it "can use explicit field configuration" do
|
172
|
-
config.show.html_title_field = Blacklight::Configuration::
|
162
|
+
config.show.html_title_field = Blacklight::Configuration::DisplayField.new(field: 'x', values: ->(*_) { 'hardcoded' })
|
173
163
|
expect(subject.html_title).to eq 'hardcoded'
|
174
164
|
end
|
175
165
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe 'GET /catalog/suggest' do
|
6
|
+
it 'returns suggestions' do
|
7
|
+
get '/catalog/suggest?q=new'
|
8
|
+
expect(response.body).to eq <<-RESULT
|
9
|
+
<li role="option"><span>new jersey</span></li>
|
10
|
+
<li role="option"><span>new jersey bridgeton biography</span></li>
|
11
|
+
<li role="option"><span>new jersey bridgeton history</span></li>
|
12
|
+
<li role="option"><span>new york</span></li>
|
13
|
+
<li role="option"><span>nuwākshūṭ</span></li>
|
14
|
+
RESULT
|
15
|
+
end
|
16
|
+
end
|
@@ -8,7 +8,7 @@
|
|
8
8
|
# to talk with solr and get results)? when we do a document request, does
|
9
9
|
# blacklight code get a single document returned?)
|
10
10
|
#
|
11
|
-
RSpec.describe Blacklight::SearchService, :
|
11
|
+
RSpec.describe Blacklight::SearchService, api: true do
|
12
12
|
subject { service }
|
13
13
|
|
14
14
|
let(:context) { { whatever: :value } }
|
@@ -49,16 +49,12 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
# SPECS FOR SEARCH RESULTS FOR QUERY
|
52
|
-
describe 'Search Results', :
|
52
|
+
describe 'Search Results', integration: true do
|
53
53
|
let(:blacklight_config) { copy_of_catalog_config }
|
54
54
|
|
55
55
|
describe 'for a sample query returning results' do
|
56
56
|
let(:user_params) { { q: all_docs_query } }
|
57
57
|
|
58
|
-
before do
|
59
|
-
(@solr_response, @document_list) = service.search_results
|
60
|
-
end
|
61
|
-
|
62
58
|
it "uses the configured request handler" do
|
63
59
|
allow(blacklight_config).to receive(:default_solr_params).and_return(qt: 'custom_request_handler')
|
64
60
|
allow(blacklight_solr).to receive(:send_and_receive) do |path, params|
|
@@ -69,23 +65,6 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
69
65
|
end.and_return('response' => { 'docs' => [] })
|
70
66
|
service.search_results
|
71
67
|
end
|
72
|
-
|
73
|
-
it 'has a @response.docs list of the same size as @document_list' do
|
74
|
-
expect(@solr_response.docs).to have(@document_list.length).docs
|
75
|
-
end
|
76
|
-
|
77
|
-
it 'has @response.docs list representing same documents as SolrDocuments in @document_list' do
|
78
|
-
@solr_response.docs.each_index do |index|
|
79
|
-
mash = @solr_response.docs[index]
|
80
|
-
solr_document = @document_list[index]
|
81
|
-
|
82
|
-
expect(Set.new(mash.keys)).to eq Set.new(solr_document.keys)
|
83
|
-
|
84
|
-
mash.keys.each do |key|
|
85
|
-
expect(mash[key]).to eq solr_document[key]
|
86
|
-
end
|
87
|
-
end
|
88
|
-
end
|
89
68
|
end
|
90
69
|
|
91
70
|
describe "for a query returning a grouped response" do
|
@@ -95,16 +74,14 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
95
74
|
before do
|
96
75
|
blacklight_config.default_solr_params[:group] = true
|
97
76
|
blacklight_config.default_solr_params[:'group.field'] = 'pub_date_si'
|
98
|
-
(@solr_response, @document_list) = service.search_results
|
99
77
|
end
|
100
78
|
|
101
79
|
it "returns a grouped response" do
|
102
|
-
expect(
|
103
|
-
expect(@solr_response).to be_a Blacklight::Solr::Response::GroupResponse
|
80
|
+
expect(service.search_results).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
|
104
81
|
end
|
105
82
|
end
|
106
83
|
|
107
|
-
describe "for a query returning multiple groups", :
|
84
|
+
describe "for a query returning multiple groups", integration: true do
|
108
85
|
let(:blacklight_config) { copy_of_catalog_config }
|
109
86
|
let(:user_params) { { q: all_docs_query } }
|
110
87
|
|
@@ -112,13 +89,12 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
112
89
|
allow(subject).to receive_messages grouped_key_for_results: 'title_si'
|
113
90
|
blacklight_config.default_solr_params[:group] = true
|
114
91
|
blacklight_config.default_solr_params[:'group.field'] = %w[pub_date_si title_si]
|
115
|
-
(@solr_response, @document_list) = service.search_results
|
116
92
|
end
|
117
93
|
|
118
94
|
it "returns a grouped response" do
|
119
|
-
|
120
|
-
expect(
|
121
|
-
expect(
|
95
|
+
solr_response = service.search_results
|
96
|
+
expect(solr_response).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
|
97
|
+
expect(solr_response.group_field).to eq "title_si"
|
122
98
|
end
|
123
99
|
end
|
124
100
|
|
@@ -126,8 +102,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
126
102
|
let(:user_params) { { q: all_docs_query, f: single_facet } }
|
127
103
|
|
128
104
|
it 'has results' do
|
129
|
-
|
130
|
-
expect(solr_response.docs).to have(document_list.size).results
|
105
|
+
solr_response = service.search_results
|
131
106
|
expect(solr_response.docs).to have_at_least(1).result
|
132
107
|
end
|
133
108
|
# TODO: check that number of these results < number of results for all docs query
|
@@ -138,8 +113,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
138
113
|
let(:user_params) { { q: no_docs_query } }
|
139
114
|
|
140
115
|
it 'has no results and not raise error' do
|
141
|
-
|
142
|
-
expect(document_list).to have(0).results
|
116
|
+
solr_response = service.search_results
|
143
117
|
expect(solr_response.docs).to have(0).results
|
144
118
|
end
|
145
119
|
end
|
@@ -148,26 +122,24 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
148
122
|
let(:user_params) { { q: no_docs_query, f: single_facet } }
|
149
123
|
|
150
124
|
it 'has no results and not raise error' do
|
151
|
-
|
152
|
-
expect(document_list).to have(0).results
|
125
|
+
solr_response = service.search_results
|
153
126
|
expect(solr_response.docs).to have(0).results
|
154
127
|
end
|
155
128
|
end
|
156
129
|
|
157
130
|
describe "for All Docs Query and Bad Facet" do
|
158
|
-
let(:bad_facet) { { format: '666' } }
|
131
|
+
let(:bad_facet) { { format: ['666'] } }
|
159
132
|
let(:user_params) { { q: all_docs_query, f: bad_facet } }
|
160
133
|
|
161
134
|
it 'has no results and not raise error' do
|
162
|
-
|
163
|
-
expect(document_list).to have(0).results
|
135
|
+
solr_response = service.search_results
|
164
136
|
expect(solr_response.docs).to have(0).results
|
165
137
|
end
|
166
138
|
end
|
167
139
|
end # Search Results
|
168
140
|
|
169
141
|
# SPECS FOR SEARCH RESULTS FOR FACETS
|
170
|
-
describe 'Facets in Search Results for All Docs Query', :
|
142
|
+
describe 'Facets in Search Results for All Docs Query', integration: true do
|
171
143
|
let(:blacklight_config) { copy_of_catalog_config }
|
172
144
|
let(:user_params) { { q: all_docs_query } }
|
173
145
|
|
@@ -181,8 +153,8 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
181
153
|
end
|
182
154
|
|
183
155
|
it 'has all facets specified in initializer' do
|
184
|
-
expect(@facets.keys).to include
|
185
|
-
expect(@facets.none? { |_k, v| v.nil? }).to
|
156
|
+
expect(@facets.keys).to include *blacklight_config.facet_fields.keys
|
157
|
+
expect(@facets.none? { |_k, v| v.nil? }).to be true
|
186
158
|
end
|
187
159
|
|
188
160
|
it 'has at least one value for each facet' do
|
@@ -199,7 +171,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
199
171
|
break
|
200
172
|
end
|
201
173
|
end
|
202
|
-
expect(has_mult_values).to
|
174
|
+
expect(has_mult_values).to be true
|
203
175
|
end
|
204
176
|
|
205
177
|
it 'has all value counts > 0' do
|
@@ -212,7 +184,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
212
184
|
end # facet specs
|
213
185
|
|
214
186
|
# SPECS FOR SEARCH RESULTS FOR PAGING
|
215
|
-
describe 'Paging', :
|
187
|
+
describe 'Paging', integration: true do
|
216
188
|
let(:blacklight_config) { copy_of_catalog_config }
|
217
189
|
let(:user_params) { { q: all_docs_query } }
|
218
190
|
|
@@ -222,9 +194,8 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
222
194
|
end
|
223
195
|
|
224
196
|
it 'has number of results (per page) set in initializer, by default' do
|
225
|
-
|
197
|
+
solr_response = service.search_results
|
226
198
|
expect(solr_response.docs).to have(blacklight_config[:default_solr_params][:rows]).items
|
227
|
-
expect(document_list).to have(blacklight_config[:default_solr_params][:rows]).items
|
228
199
|
end
|
229
200
|
|
230
201
|
context "with per page requested" do
|
@@ -232,8 +203,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
232
203
|
let(:num_results) { 3 } # non-default value
|
233
204
|
|
234
205
|
it 'gets number of results per page requested' do
|
235
|
-
|
236
|
-
expect(document_list1).to have(num_results).docs
|
206
|
+
solr_response1 = service.search_results
|
237
207
|
expect(solr_response1.docs).to have(num_results).docs
|
238
208
|
end
|
239
209
|
end
|
@@ -243,8 +213,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
243
213
|
let(:num_results) { 4 } # non-default value
|
244
214
|
|
245
215
|
it 'gets number of rows requested' do
|
246
|
-
|
247
|
-
expect(document_list1).to have(num_results).docs
|
216
|
+
solr_response1 = service.search_results
|
248
217
|
expect(solr_response1.docs).to have(num_results).docs
|
249
218
|
end
|
250
219
|
end
|
@@ -277,8 +246,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
277
246
|
let(:user_params) { { q: all_docs_query, page: page, rows: rows } }
|
278
247
|
|
279
248
|
it 'has no results when prompted for page after last result' do
|
280
|
-
|
281
|
-
expect(document_list3).to have(0).docs
|
249
|
+
solr_response3 = service.search_results
|
282
250
|
expect(solr_response3.docs).to have(0).docs
|
283
251
|
end
|
284
252
|
end
|
@@ -301,20 +269,19 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
301
269
|
let(:user_params) { { q: all_docs_query, page: page, rows: rows } }
|
302
270
|
|
303
271
|
it 'has results available when asked for more than are in response' do
|
304
|
-
|
305
|
-
expect(solr_response5.docs).to have(document_list5.length).docs
|
272
|
+
solr_response5 = service.search_results
|
306
273
|
expect(solr_response5.docs).to have_at_least(1).doc
|
307
274
|
end
|
308
275
|
end
|
309
276
|
end # page specs
|
310
277
|
|
311
278
|
# SPECS FOR SINGLE DOCUMENT REQUESTS
|
312
|
-
describe 'Get Document By Id', :
|
279
|
+
describe 'Get Document By Id', integration: true do
|
313
280
|
let(:doc_id) { '2007020969' }
|
314
281
|
let(:bad_id) { 'redrum' }
|
315
282
|
|
316
283
|
before do
|
317
|
-
@
|
284
|
+
@document = service.fetch(doc_id)
|
318
285
|
end
|
319
286
|
|
320
287
|
it "raises Blacklight::RecordNotFound for an unknown id" do
|
@@ -327,35 +294,31 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
327
294
|
expect(@document).not_to be_nil
|
328
295
|
end
|
329
296
|
|
330
|
-
it "has a single document in the response for a known id" do
|
331
|
-
expect(@response2.docs.size).to eq 1
|
332
|
-
end
|
333
|
-
|
334
297
|
it 'has the expected value in the id field' do
|
335
298
|
expect(@document.id).to eq doc_id
|
336
299
|
end
|
337
300
|
end
|
338
301
|
|
339
|
-
describe 'Get multiple documents By Id', :
|
302
|
+
describe 'Get multiple documents By Id', integration: true do
|
340
303
|
let(:doc_id) { '2007020969' }
|
341
304
|
let(:bad_id) { 'redrum' }
|
342
|
-
let(:response) { service.fetch([doc_id])
|
305
|
+
let(:response) { service.fetch([doc_id]) }
|
343
306
|
|
344
307
|
before do
|
345
308
|
blacklight_config.fetch_many_document_params[:fl] = 'id,format'
|
346
309
|
end
|
347
310
|
|
348
311
|
it 'has the expected value in the id field' do
|
349
|
-
expect(response.
|
312
|
+
expect(response.first.id).to eq doc_id
|
350
313
|
end
|
351
314
|
|
352
315
|
it 'returns all the requested fields' do
|
353
|
-
expect(response.
|
316
|
+
expect(response.first['format']).to eq ['Book']
|
354
317
|
end
|
355
318
|
end
|
356
319
|
|
357
320
|
# SPECS FOR SPELLING SUGGESTIONS VIA SEARCH
|
358
|
-
describe "Searches should return spelling suggestions", :
|
321
|
+
describe "Searches should return spelling suggestions", integration: true do
|
359
322
|
context "for just-poor-enough-query term" do
|
360
323
|
let(:user_params) { { q: 'boo' } }
|
361
324
|
|
@@ -382,7 +345,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
382
345
|
end
|
383
346
|
|
384
347
|
context "for title search" do
|
385
|
-
let(:user_params) { { q: 'yehudiyam',
|
348
|
+
let(:user_params) { { q: 'yehudiyam', 'spellcheck.dictionary': "title" } }
|
386
349
|
|
387
350
|
it 'has spelling suggestions' do
|
388
351
|
(solr_response,) = service.search_results
|
@@ -391,7 +354,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
391
354
|
end
|
392
355
|
|
393
356
|
context "for author search" do
|
394
|
-
let(:user_params) { { q: 'shirma',
|
357
|
+
let(:user_params) { { q: 'shirma', 'spellcheck.dictionary': "author" } }
|
395
358
|
|
396
359
|
it 'has spelling suggestions' do
|
397
360
|
(solr_response,) = service.search_results
|
@@ -400,7 +363,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
400
363
|
end
|
401
364
|
|
402
365
|
context "for subject search" do
|
403
|
-
let(:user_params) { { q: 'wome',
|
366
|
+
let(:user_params) { { q: 'wome', 'spellcheck.dictionary': "subject" } }
|
404
367
|
|
405
368
|
it 'has spelling suggestions' do
|
406
369
|
(solr_response,) = service.search_results
|
@@ -433,26 +396,26 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
433
396
|
let(:user_params) { { q: '', per_page: 100 } }
|
434
397
|
|
435
398
|
before do
|
436
|
-
@full_response
|
399
|
+
@full_response = service.search_results
|
437
400
|
end
|
438
401
|
|
439
402
|
it "returns the previous and next documents for a search" do
|
440
403
|
_response, docs = service.previous_and_next_documents_for_search(4, q: '')
|
441
404
|
|
442
|
-
expect(docs.first.id).to eq @
|
443
|
-
expect(docs.last.id).to eq @
|
405
|
+
expect(docs.first.id).to eq @full_response.documents[3].id
|
406
|
+
expect(docs.last.id).to eq @full_response.documents[5].id
|
444
407
|
end
|
445
408
|
|
446
409
|
it "returns only the next document if the counter is 0" do
|
447
410
|
_response, docs = service.previous_and_next_documents_for_search(0, q: '')
|
448
411
|
|
449
412
|
expect(docs.first).to be_nil
|
450
|
-
expect(docs.last.id).to eq @
|
413
|
+
expect(docs.last.id).to eq @full_response.documents[1].id
|
451
414
|
end
|
452
415
|
|
453
416
|
it "returns only the previous document if the counter is the total number of documents" do
|
454
417
|
_response, docs = service.previous_and_next_documents_for_search(@full_response.total - 1, q: '')
|
455
|
-
expect(docs.first.id).to eq @
|
418
|
+
expect(docs.first.id).to eq @full_response.documents.slice(-2).id
|
456
419
|
expect(docs.last).to be_nil
|
457
420
|
end
|
458
421
|
|
@@ -464,7 +427,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
464
427
|
|
465
428
|
it 'returns only the unique key by default' do
|
466
429
|
_response, docs = service.previous_and_next_documents_for_search(0, q: '')
|
467
|
-
expect(docs.last.to_h).to eq 'id' => @
|
430
|
+
expect(docs.last.to_h).to eq 'id' => @full_response.documents[1].id
|
468
431
|
end
|
469
432
|
|
470
433
|
it 'allows the query parameters to be customized using configuration' do
|
@@ -472,7 +435,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
472
435
|
|
473
436
|
_response, docs = service.previous_and_next_documents_for_search(0, q: '')
|
474
437
|
|
475
|
-
expect(docs.last.to_h).to eq @
|
438
|
+
expect(docs.last.to_h).to eq @full_response.documents[1].to_h.slice('id', 'format')
|
476
439
|
end
|
477
440
|
end
|
478
441
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
3
4
|
# Has been customized by Blacklight to work when application is in one place,
|
4
5
|
# and actual spec/ stuff is in another (the blacklight gem checkout).
|
@@ -16,6 +17,7 @@ EngineCart.load_application!
|
|
16
17
|
require 'rspec/rails'
|
17
18
|
require 'rspec/collection_matchers'
|
18
19
|
require 'capybara/rails'
|
20
|
+
require 'webdrivers'
|
19
21
|
require 'selenium-webdriver'
|
20
22
|
require 'equivalent-xml'
|
21
23
|
require 'axe-rspec'
|
@@ -27,13 +29,13 @@ Capybara.javascript_driver = :headless_chrome
|
|
27
29
|
|
28
30
|
Capybara.register_driver :headless_chrome do |app|
|
29
31
|
Capybara::Selenium::Driver.load_selenium
|
30
|
-
|
32
|
+
capabilities = ::Selenium::WebDriver::Chrome::Options.new.tap do |opts|
|
31
33
|
opts.args << '--headless'
|
32
34
|
opts.args << '--disable-gpu'
|
33
35
|
opts.args << '--no-sandbox'
|
34
36
|
opts.args << '--window-size=1280,1696'
|
35
37
|
end
|
36
|
-
Capybara::Selenium::Driver.new(app, browser: :chrome,
|
38
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, capabilities: capabilities)
|
37
39
|
end
|
38
40
|
|
39
41
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
@@ -46,13 +48,10 @@ RSpec.configure do |config|
|
|
46
48
|
config.disable_monkey_patching!
|
47
49
|
|
48
50
|
# When we're testing the API, only run the api tests
|
49
|
-
config.filter_run api: true if ENV['BLACKLIGHT_API_TEST']
|
51
|
+
config.filter_run api: true if ENV['BLACKLIGHT_API_TEST'].present?
|
50
52
|
|
51
|
-
if
|
52
|
-
|
53
|
-
else
|
54
|
-
config.fixture_path = Rails.root.join("spec/fixtures")
|
55
|
-
end
|
53
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
54
|
+
config.fixture_path = Rails.root.join("spec/fixtures")
|
56
55
|
|
57
56
|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
58
57
|
# examples within a transaction, remove the following line or assign false
|
@@ -69,7 +68,7 @@ RSpec.configure do |config|
|
|
69
68
|
config.infer_spec_type_from_file_location!
|
70
69
|
config.include PresenterTestHelpers, type: :presenter
|
71
70
|
config.include ViewComponent::TestHelpers, type: :component
|
72
|
-
config.include
|
71
|
+
config.include ViewComponentCapybaraTestHelpers, type: :component
|
73
72
|
|
74
73
|
config.include(ControllerLevelHelpers, type: :helper)
|
75
74
|
config.before(:each, type: :helper) { initialize_controller_helpers(helper) }
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# spec/support/features/search_helpers.rb
|
4
|
+
module Features
|
5
|
+
module SearchHelpers
|
6
|
+
def search_for q
|
7
|
+
visit root_path
|
8
|
+
fill_in "q", with: q
|
9
|
+
click_button 'search'
|
10
|
+
end
|
11
|
+
|
12
|
+
def position_in_result_page(page, id)
|
13
|
+
i = -1
|
14
|
+
page.all(".index_title a").each_with_index do |link, idx|
|
15
|
+
i = (idx + 1) if link['href'] =~ Regexp.new("#{Regexp.escape(id)}$")
|
16
|
+
end
|
17
|
+
i.to_i
|
18
|
+
end
|
19
|
+
|
20
|
+
def number_of_results_for_query(query)
|
21
|
+
visit root_path
|
22
|
+
fill_in "q", with: query
|
23
|
+
click_button "search"
|
24
|
+
get_number_of_results_from_page(page)
|
25
|
+
end
|
26
|
+
|
27
|
+
def number_of_results_from_page(page)
|
28
|
+
tmp_value = Capybara.ignore_hidden_elements
|
29
|
+
Capybara.ignore_hidden_elements = false
|
30
|
+
val = begin
|
31
|
+
page.find("meta[name=totalResults]")['content'].to_i
|
32
|
+
rescue StandardError
|
33
|
+
0
|
34
|
+
end
|
35
|
+
Capybara.ignore_hidden_elements = tmp_value
|
36
|
+
val
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/spec/support/features.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
# spec/support/features.rb
|
3
4
|
|
5
|
+
require File.expand_path('features/search_helpers.rb', __dir__)
|
4
6
|
require File.expand_path('features/session_helpers.rb', __dir__)
|
5
7
|
|
6
8
|
RSpec.configure do |config|
|
9
|
+
config.include Features::SearchHelpers, type: :feature
|
7
10
|
config.include Features::SessionHelpers, type: :feature
|
8
11
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ViewComponentCapybaraTestHelpers
|
4
|
+
# Work around for https://github.com/teamcapybara/capybara/issues/2466
|
5
|
+
def render_inline_to_capybara_node(component)
|
6
|
+
Capybara::Node::Simple.new(render_inline(component).to_s)
|
7
|
+
end
|
8
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'rails/generators'
|
3
4
|
|
4
5
|
class TestAppGenerator < Rails::Generators::Base
|
@@ -11,11 +12,11 @@ class TestAppGenerator < Rails::Generators::Base
|
|
11
12
|
def run_blacklight_generator
|
12
13
|
say_status("warning", "GENERATING BL", :yellow)
|
13
14
|
|
14
|
-
Bundler.
|
15
|
+
Bundler.with_unbundled_env do
|
15
16
|
run "bundle install"
|
16
17
|
end
|
17
18
|
options = '--devise'
|
18
|
-
if ENV['BLACKLIGHT_API_TEST']
|
19
|
+
if ENV['BLACKLIGHT_API_TEST'].present?
|
19
20
|
options += ' --skip-assets'
|
20
21
|
end
|
21
22
|
|
@@ -27,4 +28,10 @@ class TestAppGenerator < Rails::Generators::Base
|
|
27
28
|
|
28
29
|
generate 'blacklight:test_support'
|
29
30
|
end
|
31
|
+
|
32
|
+
def add_local_assets_for_propshaft
|
33
|
+
return unless defined?(Propshaft)
|
34
|
+
|
35
|
+
run "yarn add #{Blacklight::Engine.root}"
|
36
|
+
end
|
30
37
|
end
|