geoblacklight 4.0.0.pre.alpha.3 → 4.0.0.pre.rc3

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.
Files changed (209) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +1 -1
  3. data/.github/workflows/ruby.yml +32 -103
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +12 -6
  6. data/.rubocop_todo.yml +0 -3
  7. data/.solr_wrapper +2 -0
  8. data/README.md +1 -4
  9. data/Rakefile +0 -1
  10. data/app/assets/images/blacklight/child-item.svg +3 -0
  11. data/app/assets/images/blacklight/collections.svg +4 -0
  12. data/app/assets/images/blacklight/datasets.svg +7 -0
  13. data/app/assets/images/blacklight/geoblacklight-icons.json +363 -332
  14. data/app/assets/images/blacklight/imagery.svg +4 -0
  15. data/app/assets/images/blacklight/maps.svg +4 -0
  16. data/app/assets/images/blacklight/parent-item.svg +3 -0
  17. data/app/assets/images/blacklight/university-of-colorado-boulder.svg +6 -0
  18. data/app/assets/images/blacklight/websites.svg +4 -0
  19. data/app/assets/javascripts/geoblacklight/controls/fullscreen.js +8 -0
  20. data/app/assets/javascripts/geoblacklight/geoblacklight.js +2 -1
  21. data/app/assets/javascripts/geoblacklight/viewers/esri.js +1 -0
  22. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +1 -0
  23. data/app/assets/javascripts/geoblacklight/viewers/tilejson.js +33 -0
  24. data/app/assets/javascripts/geoblacklight/viewers/tms.js +2 -2
  25. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +3 -0
  26. data/app/assets/javascripts/geoblacklight/viewers/wms.js +2 -2
  27. data/app/assets/javascripts/geoblacklight/viewers/wmts.js +85 -0
  28. data/app/assets/javascripts/geoblacklight/viewers/xyz.js +10 -0
  29. data/app/assets/stylesheets/geoblacklight/geoblacklight.scss +1 -0
  30. data/app/assets/stylesheets/geoblacklight/modules/_base.scss +0 -1
  31. data/app/assets/stylesheets/geoblacklight/modules/_styles.scss +5 -1
  32. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +20 -47
  33. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +68 -0
  34. data/app/assets/stylesheets/geoblacklight/modules/item.scss +16 -0
  35. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +6 -0
  36. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +4 -0
  37. data/app/components/geoblacklight/icon_facet_item_component.rb +33 -0
  38. data/app/controllers/wms_controller.rb +1 -1
  39. data/app/helpers/geoblacklight_helper.rb +6 -45
  40. data/app/models/concerns/geoblacklight/bbox_filter_field.rb +64 -0
  41. data/app/models/concerns/geoblacklight/bbox_filter_query.rb +50 -0
  42. data/app/models/concerns/geoblacklight/solr_document.rb +1 -1
  43. data/app/models/concerns/geoblacklight/suppressed_records_search_behavior.rb +31 -0
  44. data/app/presenters/geoblacklight/bbox_item_presenter.rb +9 -0
  45. data/app/views/catalog/_downloads_collapse.html.erb +27 -0
  46. data/app/views/catalog/_header_icons.html.erb +2 -2
  47. data/app/views/catalog/_index_split_default.html.erb +2 -2
  48. data/app/views/catalog/_show_default_viewer_container.html.erb +17 -0
  49. data/app/views/catalog/_show_downloads.html.erb +10 -21
  50. data/app/views/catalog/_show_sidebar.html.erb +3 -0
  51. data/app/views/catalog/_show_web_services.html.erb +11 -0
  52. data/app/views/catalog/_web_services.html.erb +3 -2
  53. data/app/views/catalog/web_services.html.erb +1 -1
  54. data/app/views/shared/_header_navbar.html.erb +13 -3
  55. data/config/locales/geoblacklight.en.yml +6 -1
  56. data/geoblacklight.gemspec +7 -7
  57. data/lib/generators/geoblacklight/assets_generator.rb +1 -1
  58. data/lib/generators/geoblacklight/install_generator.rb +18 -1
  59. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +5 -4
  60. data/lib/generators/geoblacklight/templates/assets/application.scss +0 -3
  61. data/lib/generators/geoblacklight/templates/catalog_controller.rb +86 -57
  62. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +5 -5
  63. data/lib/generators/geoblacklight/templates/settings.yml +62 -25
  64. data/lib/geoblacklight/bounding_box.rb +5 -1
  65. data/lib/geoblacklight/constants.rb +3 -0
  66. data/lib/geoblacklight/download.rb +1 -1
  67. data/lib/geoblacklight/engine.rb +7 -4
  68. data/lib/geoblacklight/faraday_middleware/follow_redirects.rb +176 -0
  69. data/lib/geoblacklight/item_viewer.rb +13 -1
  70. data/lib/geoblacklight/metadata/base.rb +2 -1
  71. data/lib/geoblacklight/metadata_transformer/base.rb +1 -1
  72. data/lib/geoblacklight/version.rb +1 -1
  73. data/lib/geoblacklight/view_helper_override.rb +2 -28
  74. data/lib/geoblacklight.rb +0 -10
  75. data/lib/tasks/geoblacklight.rake +1 -1
  76. data/schema/geoblacklight-schema-aardvark.json +3 -23
  77. data/solr/conf/schema.xml +37 -43
  78. data/solr/conf/solrconfig.xml +17 -17
  79. data/spec/components/geoblacklight/icon_facet_item_component_spec.rb +17 -0
  80. data/spec/config/initializers/rails_config_spec.rb +1 -1
  81. data/spec/controllers/catalog_controller_spec.rb +8 -8
  82. data/spec/controllers/download_controller_spec.rb +4 -4
  83. data/spec/controllers/relation_controller_spec.rb +1 -1
  84. data/spec/controllers/wms_controller_spec.rb +2 -4
  85. data/spec/features/download_layer_spec.rb +31 -14
  86. data/spec/features/esri_viewer_spec.rb +5 -1
  87. data/spec/features/full_screen_controll_spec.rb +15 -0
  88. data/spec/features/home_page_spec.rb +2 -2
  89. data/spec/features/index_map_spec.rb +2 -2
  90. data/spec/features/missing_metadata_spec.rb +1 -1
  91. data/spec/features/multiple_downloads_spec.rb +2 -1
  92. data/spec/features/relations_spec.rb +12 -1
  93. data/spec/features/saved_searches_spec.rb +1 -1
  94. data/spec/features/search_results_complex_geometry_spec.rb +24 -0
  95. data/spec/features/search_results_icons_spec.rb +16 -0
  96. data/spec/features/search_results_map_spec.rb +2 -2
  97. data/spec/features/search_spec.rb +17 -0
  98. data/spec/features/show_page_download_spec.rb +6 -3
  99. data/spec/features/show_page_metadata_spec.rb +2 -2
  100. data/spec/features/split_view.html.erb_spec.rb +12 -1
  101. data/spec/features/tilejson_spec.rb +22 -0
  102. data/spec/features/tms_spec.rb +2 -2
  103. data/spec/features/web_services_modal_spec.rb +35 -2
  104. data/spec/features/wmts_spec.rb +34 -0
  105. data/spec/features/xyz_spec.rb +10 -0
  106. data/spec/fixtures/manifests/tilejson.json +21 -0
  107. data/spec/fixtures/manifests/wmts-multiple.xml +813 -0
  108. data/spec/fixtures/manifests/wmts-single.xml +126 -0
  109. data/spec/fixtures/solr_documents/README.md +46 -43
  110. data/spec/fixtures/solr_documents/actual-papermap1.json +2 -1
  111. data/spec/fixtures/solr_documents/actual-point1.json +2 -1
  112. data/spec/fixtures/solr_documents/actual-polygon1.json +2 -1
  113. data/spec/fixtures/solr_documents/actual-raster1.json +3 -2
  114. data/spec/fixtures/solr_documents/b1g_wabash_child_15.json +62 -0
  115. data/spec/fixtures/solr_documents/b1g_wabash_child_16.json +64 -0
  116. data/spec/fixtures/solr_documents/b1g_wabash_child_17.json +62 -0
  117. data/spec/fixtures/solr_documents/b1g_wabash_child_18.json +62 -0
  118. data/spec/fixtures/solr_documents/b1g_wabash_parent.json +59 -0
  119. data/spec/fixtures/solr_documents/baruch_ancestor1.json +2 -1
  120. data/spec/fixtures/solr_documents/baruch_ancestor2.json +2 -1
  121. data/spec/fixtures/solr_documents/baruch_documentation_download.json +1 -1
  122. data/spec/fixtures/solr_documents/bbox-spans-180.json +2 -1
  123. data/spec/fixtures/solr_documents/cornell_html_metadata.json +4 -3
  124. data/spec/fixtures/solr_documents/esri-dynamic-layer-all-layers.json +3 -2
  125. data/spec/fixtures/solr_documents/esri-dynamic-layer-single-layer.json +3 -2
  126. data/spec/fixtures/solr_documents/esri-feature-layer.json +2 -1
  127. data/spec/fixtures/solr_documents/esri-image-map-layer.json +3 -2
  128. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +2 -1
  129. data/spec/fixtures/solr_documents/esri-wms-layer.json +2 -1
  130. data/spec/fixtures/solr_documents/harvard_raster.json +3 -2
  131. data/spec/fixtures/solr_documents/iiif-eastern-hemisphere.json +3 -2
  132. data/spec/fixtures/solr_documents/index-map-polygon-no-downloadurl.json +2 -1
  133. data/spec/fixtures/solr_documents/index-map-polygon.json +2 -1
  134. data/spec/fixtures/solr_documents/index-map-stanford.json +2 -1
  135. data/spec/fixtures/solr_documents/index_map_point.json +3 -2
  136. data/spec/fixtures/solr_documents/metadata_no_provider.json +2 -1
  137. data/spec/fixtures/solr_documents/multiple-downloads.json +3 -2
  138. data/spec/fixtures/solr_documents/no_spatial.json +1 -4
  139. data/spec/fixtures/solr_documents/oembed.json +2 -1
  140. data/spec/fixtures/solr_documents/princeton-child1.json +3 -2
  141. data/spec/fixtures/solr_documents/princeton-child2.json +3 -2
  142. data/spec/fixtures/solr_documents/princeton-child3.json +2 -1
  143. data/spec/fixtures/solr_documents/princeton-child4.json +3 -2
  144. data/spec/fixtures/solr_documents/princeton-parent.json +5 -3
  145. data/spec/fixtures/solr_documents/public_direct_download.json +2 -1
  146. data/spec/fixtures/solr_documents/public_iiif_princeton.json +3 -2
  147. data/spec/fixtures/solr_documents/public_polygon_mit.json +2 -1
  148. data/spec/fixtures/solr_documents/restricted-line.json +2 -1
  149. data/spec/fixtures/solr_documents/tilejson.json +48 -0
  150. data/spec/fixtures/solr_documents/tms.json +15 -18
  151. data/spec/fixtures/solr_documents/umn_metro_result1.json +5 -3
  152. data/spec/fixtures/solr_documents/umn_state_result1.json +3 -2
  153. data/spec/fixtures/solr_documents/umn_state_result2.json +3 -5
  154. data/spec/fixtures/solr_documents/uva_slug_colon.json +2 -1
  155. data/spec/fixtures/solr_documents/wmts-multiple.json +41 -0
  156. data/spec/fixtures/solr_documents/wmts-single-layer.json +48 -0
  157. data/spec/fixtures/solr_documents/xyz.json +46 -0
  158. data/spec/helpers/geoblacklight_helper_spec.rb +14 -37
  159. data/spec/lib/geoblacklight/document_presenter_spec.rb +3 -3
  160. data/spec/lib/geoblacklight/download/geojson_download_spec.rb +1 -1
  161. data/spec/lib/geoblacklight/download/geotiff_download_spec.rb +1 -1
  162. data/spec/lib/geoblacklight/download/kmz_download_spec.rb +1 -1
  163. data/spec/lib/geoblacklight/download/shapefile_download_spec.rb +1 -1
  164. data/spec/lib/geoblacklight/download_spec.rb +2 -2
  165. data/spec/lib/geoblacklight/metadata/base_spec.rb +19 -1
  166. data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +1 -1
  167. data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +1 -1
  168. data/spec/lib/geoblacklight/references_spec.rb +5 -3
  169. data/spec/lib/geoblacklight/relation/relation_response_spec.rb +5 -0
  170. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -10
  171. data/spec/lib/geoblacklight/wms_layer_spec.rb +1 -1
  172. data/spec/models/concerns/geoblacklight/bbox_filter_field_spec.rb +96 -0
  173. data/spec/models/concerns/geoblacklight/bbox_filter_query_spec.rb +105 -0
  174. data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +2 -1
  175. data/spec/models/concerns/geoblacklight/suppressed_records_search_behavior_spec.rb +31 -0
  176. data/spec/presenters/geoblacklight/bbox_item_presenter_spec.rb +36 -0
  177. data/spec/spec_helper.rb +8 -3
  178. data/spec/test_app_templates/Gemfile.extra +1 -0
  179. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -4
  180. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +1 -1
  181. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +6 -6
  182. data/template.rb +2 -4
  183. data/vendor/assets/images/fullscreen.png +0 -0
  184. data/vendor/assets/images/fullscreen@2x.png +0 -0
  185. data/vendor/assets/javascripts/Leaflet.fullscreen.js +152 -0
  186. data/vendor/assets/javascripts/esri-leaflet.js +10 -3
  187. data/vendor/assets/javascripts/esri-leaflet.js.map +1 -1
  188. data/vendor/assets/javascripts/leaflet-iiif.js +39 -18
  189. data/vendor/assets/javascripts/leaflet-src.js.erb +14126 -0
  190. data/vendor/assets/javascripts/leaflet-src.js.map +1 -1
  191. data/vendor/assets/stylesheets/leaflet.css +640 -634
  192. data/vendor/assets/stylesheets/leaflet.fullscreen.css +40 -0
  193. metadata +102 -49
  194. data/app/models/concerns/geoblacklight/spatial_search_behavior.rb +0 -71
  195. data/app/views/catalog/_download_generated_link.html.erb +0 -4
  196. data/app/views/catalog/_download_link.html.erb +0 -3
  197. data/app/views/catalog/_downloads_generated.html.erb +0 -6
  198. data/app/views/catalog/_downloads_primary.html.erb +0 -21
  199. data/app/views/catalog/_downloads_secondary.html.erb +0 -39
  200. data/app/views/catalog/_icon_facet.html.erb +0 -16
  201. data/bin/coverage.rb +0 -36
  202. data/lib/generators/geoblacklight/templates/Procfile +0 -3
  203. data/lib/generators/geoblacklight/templates/package.json +0 -14
  204. data/lib/generators/geoblacklight/templates/webpacker.yml +0 -67
  205. data/lib/generators/geoblacklight/webpacker_generator.rb +0 -36
  206. data/lib/geoblacklight/catalog_helper_override.rb +0 -14
  207. data/spec/models/concerns/geoblacklight/spatial_search_behavior_spec.rb +0 -97
  208. data/vendor/assets/javascripts/leaflet.js.erb +0 -13922
  209. data/vendor/assets/stylesheets/leaflet-label.css +0 -54
@@ -1,39 +0,0 @@
1
- <%# Renders the secondary downloads displayed in the split dropdown %>
2
- <% document ||= @document %>
3
-
4
- <button type='button' class='btn btn-default dropdown-toggle download-dropdown-toggle' data-toggle='dropdown' aria-expanded='false'>
5
- <span class='caret'></span>
6
- <span class='sr-only'>Toggle Download Dropdown</span>
7
- </button>
8
- <ul class='dropdown-menu' role='menu'>
9
- <% if document.hgl_download.present? %>
10
- <li role="presentation" class="dropdown-header">Original</li>
11
- <li>
12
- <%= link_to(download_text(document.download_types.first[0]),
13
- download_hgl_path(id: document), data: {blacklight_modal: 'trigger', download: 'trigger', download_type: 'harvard-hgl', download_id: document.id }) %>
14
- </li>
15
- <% else %>
16
- <% if document.direct_download.present? %>
17
- <li role="presentation" class="dropdown-header">Original</li>
18
- <li>
19
- <%= link_to(download_text(@document.file_format), document.direct_download[:download], 'contentUrl' => document.direct_download[:download], data: { download: 'trigger', download_type: 'direct', download_id: document.id }) %>
20
- </li>
21
- <% end %>
22
- <% if document.download_types.present? || document.iiif_download.present? %>
23
- <li role="presentation" class="dropdown-header">Generated</li>
24
- <% end %>
25
- <% if document.iiif_download.present? %>
26
- <li>
27
- <%= link_to "Download JPG", iiif_jpg_url, download: 'trigger' %>
28
- </li>
29
- <% end %>
30
-
31
- <% if document.download_types.present? %>
32
- <% document.download_types.each do |type| %>
33
- <%= content_tag(:li) do %>
34
- <% link_to(download_text(type[0]), '', data: { download_path: "#{download_path(document.id, type: type[0])}", download: 'trigger', download_type: type[0], download_id: document.id }) %>
35
- <% end %>
36
- <% end %>
37
- <% end %>
38
- <% end %>
39
- </ul>
@@ -1,16 +0,0 @@
1
- <ul class="facet-values list-unstyled">
2
- <% paginator = facet_paginator(facet_field, display_facet) %>
3
- <% paginator.items.each do |item| -%>
4
- <li>
5
- <%= render_facet_item_with_icon(field_name, item) %>
6
- </li>
7
- <% end %>
8
- <% unless paginator.last_page? || params[:action] == "facet" %>
9
- <li class="more_facets">
10
- <%= link_to t("more_#{field_name}_html", scope: 'blacklight.search.facets', default: :more_html, field_name: facet_field.label),
11
- search_facet_path(id: facet_field.key),
12
- data: { blacklight_modal: 'trigger' },
13
- class: 'more_facets_link' %>
14
- </li>
15
- <% end %>
16
- </ul>
data/bin/coverage.rb DELETED
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
- # Borrowed from https://github.com/pulibrary/figgy/blob/master/scripts/combine_coverage.rb
3
- require 'active_support/inflector'
4
- require 'simplecov'
5
-
6
- class SimpleCovHelper
7
- def self.report_coverage(base_dir: './coverage_results')
8
- min_cov = ENV['MINIMUM_COVERAGE'] || 100
9
- SimpleCov.configure do
10
- minimum_coverage(min_cov.to_i)
11
- end
12
- new(base_dir: base_dir).merge_results
13
- end
14
-
15
- attr_reader :base_dir
16
-
17
- def initialize(base_dir:)
18
- @base_dir = base_dir
19
- end
20
-
21
- def all_results
22
- Dir["#{base_dir}/.resultset*.json"]
23
- end
24
-
25
- def merge_results
26
- results = all_results.map { |file| SimpleCov::Result.from_hash(JSON.parse(File.read(file))) }
27
- results = SimpleCov::ResultMerger.merge_results(*results)
28
- results.format!
29
- covered_percent = results.covered_percent.round(2)
30
- return unless covered_percent < SimpleCov.minimum_coverage
31
- $stderr.printf("Coverage (%.2f%%) is below the expected minimum coverage (%.2f%%).\n", covered_percent, SimpleCov.minimum_coverage)
32
- Kernel.exit SimpleCov::ExitCodes::MINIMUM_COVERAGE
33
- end
34
- end
35
-
36
- SimpleCovHelper.report_coverage
@@ -1,3 +0,0 @@
1
- rails: bin/rails server --port=3000
2
- webpack: bin/webpack-dev-server
3
-
@@ -1,14 +0,0 @@
1
- {
2
- "name": "internal",
3
- "private": true,
4
- "dependencies": {
5
- "@rails/webpacker": "https://github.com/rails/webpacker.git"
6
- },
7
- "devDependencies": {
8
- "babel-plugin-syntax-dynamic-import": "^6.18.0",
9
- "babel-plugin-transform-class-properties": "^6.24.1",
10
- "babel-plugin-transform-object-rest-spread": "^6.26.0",
11
- "babel-preset-env": "^1.7.0",
12
- "webpack-dev-server": "^3.6.0"
13
- }
14
- }
@@ -1,67 +0,0 @@
1
- # Note: You must restart bin/webpack-dev-server for changes to take effect
2
-
3
- default: &default
4
- source_path: app/javascript
5
- source_entry_path: packs
6
- public_output_path: packs
7
- cache_path: tmp/cache/webpacker
8
-
9
- # Additional paths webpack should lookup modules
10
- # ['app/assets', 'engine/foo/app/assets']
11
- resolved_paths: []
12
-
13
- # Reload manifest.json on all requests so we reload latest compiled packs
14
- cache_manifest: false
15
-
16
- extensions:
17
- - .js
18
- - .sass
19
- - .scss
20
- - .css
21
- - .module.sass
22
- - .module.scss
23
- - .module.css
24
- - .png
25
- - .svg
26
- - .gif
27
- - .jpeg
28
- - .jpg
29
-
30
- development: &development
31
- <<: *default
32
- compile: true
33
-
34
- # Reference: https://webpack.js.org/configuration/dev-server/
35
- dev_server:
36
- https: false
37
- host: localhost
38
- port: 3035
39
- public: localhost:3035
40
- hmr: false
41
- # Inline should be set to true if using HMR
42
- inline: true
43
- overlay: true
44
- compress: true
45
- disable_host_check: true
46
- use_local_ip: false
47
- quiet: false
48
- headers:
49
- 'Access-Control-Allow-Origin': '*'
50
- watch_options:
51
- ignored: /node_modules/
52
-
53
-
54
- test:
55
- <<: *development
56
-
57
- # Compile test packs to a separate directory
58
- public_output_path: packs-test
59
-
60
- production:
61
- <<: *default
62
-
63
- # Production depends on precompilation of packs prior to booting for performance.
64
- compile: false
65
-
66
- # Cache manifest.json for performance
67
- cache_manifest: true
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'rails/generators'
3
-
4
- module Geoblacklight
5
- class Webpacker < Rails::Generators::Base
6
- source_root File.expand_path('../templates', __FILE__)
7
-
8
- desc 'Integrate Webpacker for GeoBlacklight'
9
-
10
- def webpacker_install
11
- run 'bundle exec rails webpacker:install'
12
- end
13
-
14
- def webpacker_config
15
- copy_file 'webpacker.yml', 'config/webpacker.yml'
16
- end
17
-
18
- def procfile
19
- copy_file 'Procfile', 'Procfile'
20
- end
21
-
22
- def javascript_install
23
- # This overrides the default dependencies specified using
24
- # webpacker:install
25
- copy_file 'package.json', 'package.json'
26
- yarn_available = system('yarn --version')
27
- if yarn_available
28
- run 'yarn install'
29
- run 'yarn upgrade'
30
- else
31
- run 'npm install'
32
- run 'npm update'
33
- end
34
- end
35
- end
36
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
- module Geoblacklight
3
- module CatalogHelperOverride
4
- ##
5
- # Removes spatial query from params
6
- # @param [Symbol] symbol of field to be removed
7
- # @param [Hash] request parameters
8
- def remove_spatial_filter_group(field, source_params = params)
9
- p = source_params.dup.to_h
10
- p.delete(field.to_s)
11
- p
12
- end
13
- end
14
- end
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
- require 'spec_helper'
3
-
4
- describe Geoblacklight::SpatialSearchBehavior do
5
- subject { search_builder.with(user_params) }
6
-
7
- let(:user_params) { {} }
8
- let(:solr_params) { {} }
9
- let(:blacklight_config) { CatalogController.blacklight_config.deep_copy }
10
- let(:context) { CatalogController.new }
11
- let(:search_builder_class) do
12
- Class.new(Blacklight::SearchBuilder).tap do |klass|
13
- include Blacklight::Solr::SearchBuilderBehavior
14
- klass.include(described_class)
15
- end
16
- end
17
- let(:search_builder) { search_builder_class.new(context) }
18
-
19
- describe '#add_spatial_params' do
20
- it 'returns the solr_params when no bbox is given' do
21
- expect(subject.add_spatial_params(solr_params)).to eq solr_params
22
- end
23
-
24
- context 'when given a bounding box' do
25
- let(:params) do
26
- { bbox: '-180 -80 120 80' }
27
- end
28
-
29
- before do
30
- subject.with(params)
31
- end
32
-
33
- it 'returns a spatial search if bbox is given' do
34
- expect(subject.add_spatial_params(solr_params)[:fq].to_s).to include('Intersects')
35
- end
36
-
37
- it 'applies boost based on configured Settings.BBOX_WITHIN_BOOST' do
38
- allow(Settings).to receive(:BBOX_WITHIN_BOOST).and_return 99
39
- expect(subject.add_spatial_params(solr_params)[:bq].to_s).to include('^99')
40
- end
41
-
42
- it 'applies default boost of 10 when Settings.BBOX_WITHIN_BOOST not configured' do
43
- allow(Settings).to receive(:BBOX_WITHIN_BOOST).and_return nil
44
- expect(subject.add_spatial_params(solr_params)[:bq].to_s).to include('^10')
45
- end
46
-
47
- it 'applies overlapRatio when Settings.OVERLAP_RATIO_BOOST is configured' do
48
- allow(Settings).to receive(:OVERLAP_RATIO_BOOST).and_return 2
49
- expect(subject.add_spatial_params(solr_params)[:bf].to_s).to include('$overlap^2')
50
- end
51
-
52
- it 'does not apply overlapRatio when Settings.OVERLAP_RATIO_BOOST not configured' do
53
- allow(Settings).to receive(:OVERLAP_RATIO_BOOST).and_return nil
54
- expect(subject.add_spatial_params(solr_params)).not_to have_key(:overlap)
55
- end
56
-
57
- context 'when local boost parameter is present' do
58
- before do
59
- solr_params[:bf] = ['local_boost^5']
60
- end
61
-
62
- it 'appends overlap and includes the local boost' do
63
- allow(Settings).to receive(:OVERLAP_RATIO_BOOST).and_return 2
64
- expect(subject.add_spatial_params(solr_params)[:bf].to_s).to include('$overlap^2')
65
- expect(solr_params[:bf].to_s).to include('local_boost^5')
66
- end
67
- end
68
-
69
- context 'when the wrong format for the bounding box is used' do
70
- before do
71
- allow(subject).to receive(:bounding_box).and_raise(Geoblacklight::Exceptions::WrongBoundingBoxFormat)
72
- end
73
-
74
- it 'returns the spatial search without the boost or filter queries' do
75
- expect(subject.add_spatial_params(solr_params)).to eq(bq: [])
76
- end
77
- end
78
- end
79
- end
80
- describe '#envelope_bounds' do
81
- let(:bbox) { instance_double(Geoblacklight::BoundingBox) }
82
- before do
83
- allow(bbox).to receive(:to_envelope).and_return('test')
84
- end
85
- it 'calls to_envelope on the bounding box' do
86
- expect(subject).to receive(:bounding_box).and_return bbox
87
- expect(subject.envelope_bounds).to eq 'test'
88
- end
89
- end
90
- describe '#bounding_box' do
91
- it 'creates a bounding box from a Solr lat-lon rectangle format' do
92
- params = { bbox: '-120 -80 120 80' }
93
- subject.with(params)
94
- expect(subject.bounding_box).to be_an Geoblacklight::BoundingBox
95
- end
96
- end
97
- end