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
@@ -6,7 +6,7 @@ describe DownloadController, type: :controller do
6
6
  describe 'restricted file' do
7
7
  it 'redirects to login for authentication' do
8
8
  get :file, params: { id: 'stanford-cg357zz0321-shapefile', format: 'zip' }
9
- expect(response.status).to eq 401
9
+ expect(response).to have_http_status :unauthorized
10
10
  end
11
11
  end
12
12
  describe 'public file' do
@@ -21,7 +21,7 @@ describe DownloadController, type: :controller do
21
21
  describe 'restricted file' do
22
22
  it 'redirects to login for authentication' do
23
23
  get :show, params: { id: 'stanford-cg357zz0321', format: 'json' }
24
- expect(response.status).to eq 401
24
+ expect(response).to have_http_status :unauthorized
25
25
  end
26
26
  end
27
27
  describe 'public file' do
@@ -34,7 +34,7 @@ describe DownloadController, type: :controller do
34
34
  it 'initiates download creation' do
35
35
  allow(shapefile_download).to receive(:get).and_return('success')
36
36
  get :show, params: { id: 'mit-f6rqs4ucovjk2', type: 'shapefile' }
37
- expect(response.status).to eq 200
37
+ expect(response).to have_http_status :ok
38
38
  end
39
39
  end
40
40
 
@@ -85,7 +85,7 @@ describe DownloadController, type: :controller do
85
85
  allow(Geoblacklight::HglDownload).to receive(:new).and_return(hgl_download)
86
86
 
87
87
  get :hgl, params: { id: 'harvard-g7064-s2-1834-k3', email: 'foo@example.com' }
88
- expect(response.status).to eq 200
88
+ expect(response).to have_http_status :ok
89
89
  end
90
90
 
91
91
  it 'renders form' do
@@ -5,7 +5,7 @@ describe RelationController, type: :controller do
5
5
  describe '#index' do
6
6
  it 'returns a listing of related documents for a record' do
7
7
  get :index, params: { id: 'nyu_2451_34502' }
8
- expect(response.status).to eq 200
8
+ expect(response).to have_http_status :ok
9
9
  expect(assigns(:relations)).not_to be_nil
10
10
  end
11
11
  end
@@ -2,10 +2,10 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe WmsController, type: :controller do
5
- let(:wms_layer) { instance_double('Geoblacklight::WmsLayer') }
5
+ let(:wms_layer) { instance_double(Geoblacklight::WmsLayer) }
6
6
  let(:feature_info) { { values: ['fid', 'layer:example'] } }
7
7
  let(:params) do
8
- { format: 'json', 'URL' => 'http://www.example.com/', 'LAYERS' => 'layer:example',
8
+ { 'format' => 'json', 'URL' => 'http://www.example.com/', 'LAYERS' => 'layer:example',
9
9
  'BBOX' => '-74, 40, -68, 43', 'WIDTH' => '500', 'HEIGHT' => '400',
10
10
  'QUERY_LAYERS' => 'layer:example', 'X' => '277', 'Y' => '195' }
11
11
  end
@@ -27,8 +27,6 @@ describe WmsController, type: :controller do
27
27
 
28
28
  it 'returns only permitted params' do
29
29
  get :handle, params: params
30
- expect(wms_params.to_h).not_to eq(params)
31
- params.delete(:format)
32
30
  expect(wms_params.to_h).to eq(params)
33
31
  end
34
32
  end
@@ -13,71 +13,88 @@ feature 'Download layer' do
13
13
  scenario 'clicking initial shapefile download button should trigger download', js: true do
14
14
  expect(shapefile_download).to receive(:get).and_return('mit-f6rqs4ucovjk2-shapefile.zip')
15
15
  visit solr_document_path('mit-f6rqs4ucovjk2')
16
- find('a[data-download-type="shapefile"]', text: 'Export').click
16
+ find('#downloads-button').click
17
+ find('a[data-download-type="shapefile"]', text: 'Export Shapefile').click
17
18
  expect(page).to have_css(
18
19
  'a[href="/download/file/mit-f6rqs4ucovjk2-shapefile.zip"]',
19
20
  text: 'Your file mit-f6rqs4ucovjk2-shapefile.zip is ready for download'
20
21
  )
21
22
  end
23
+
22
24
  scenario 'failed download should return message with link to layer', js: true do
23
25
  expect(shapefile_download).to receive(:get).and_raise(Geoblacklight::Exceptions::ExternalDownloadFailed.new(message: 'Failed', url: 'http://www.example.com/failed'))
24
26
  visit solr_document_path('mit-f6rqs4ucovjk2')
25
- find('a[data-download-type="shapefile"]', text: 'Export').click
27
+ find('#downloads-button').click
28
+ find('#downloads-collapse a[data-download-type="shapefile"]', text: 'Export Shapefile').click
26
29
  expect(page).to have_css 'div.alert.alert-danger', text: 'Sorry, the requested file could not be downloaded. Try downloading it directly from:'
27
30
  expect(page).to have_css 'a', text: 'http://www.example.com/failed'
28
31
  end
32
+
29
33
  scenario 'clicking kmz download button should trigger download', js: true do
30
34
  expect(kmz_download).to receive(:get).and_return('mit-f6rqs4ucovjk2-kmz.kmz')
31
35
  visit solr_document_path('mit-f6rqs4ucovjk2')
32
- find('a[data-download-type="kmz"]', text: 'Export').click
36
+ find('#downloads-button').click
37
+ find('#downloads-collapse a[data-download-type="kmz"]', text: 'Export KMZ').click
33
38
  expect(page).to have_css(
34
39
  'a[href="/download/file/mit-f6rqs4ucovjk2-kmz.kmz"]',
35
40
  text: 'Your file mit-f6rqs4ucovjk2-kmz.kmz is ready for download'
36
41
  )
37
42
  end
43
+
38
44
  scenario 'jpg download option should be present under toggle' do
39
45
  visit solr_document_path('princeton-02870w62c')
40
- expect(page).to have_css('li a', text: 'Original JPG')
46
+ find('#downloads-button').click
47
+ expect(page).to have_css('#downloads-collapse a', text: 'Original JPG')
41
48
  end
49
+
42
50
  scenario 'clicking jpg download button should redirect to external image' do
43
51
  visit solr_document_path('princeton-02870w62c')
44
- expect(page).to have_css("a.btn.btn-default[href='https://libimages.princeton.edu/loris/pudl0076/map_pownall/00000001.jp2/full/full/0/default.jpg']", text: 'Original JPG')
52
+ find('#downloads-button').click
53
+ expect(page).to have_css("#downloads-collapse a[href='https://iiif-cloud.princeton.edu/iiif/2/6c%2F52%2F12%2F6c5212e81bc845f59bb1cdc740a88bad%2Fintermediate_file/full/full/0/default.jpg']", text: 'Original JPG')
45
54
  end
55
+
46
56
  scenario 'options should be available under toggle' do
47
57
  visit solr_document_path('mit-f6rqs4ucovjk2')
48
- expect(page).to have_css('li a[data-download-type="shapefile"]', text: 'Export')
49
- expect(page).to have_css('li a[data-download-type="kmz"]', text: 'Export')
58
+ find('#downloads-button').click
59
+ expect(page).to have_css('#downloads-collapse a[data-download-type="shapefile"]', text: 'Export Shapefile')
60
+ expect(page).to have_css('#downloads-collapse a[data-download-type="kmz"]', text: 'Export KMZ')
50
61
  end
62
+
51
63
  scenario 'restricted layer should not have download available to non logged in user' do
52
64
  visit solr_document_path('stanford-cg357zz0321')
53
65
  expect(page).to have_css 'a', text: 'Login to View and Download'
54
- expect(page).not_to have_css 'button', text: 'Download Shapefile'
66
+ expect(page).not_to have_css 'button', text: 'Download'
55
67
  end
68
+
56
69
  scenario 'restricted layer should have download available to logged in user' do
57
70
  sign_in
58
71
  visit solr_document_path('stanford-cg357zz0321')
59
72
  expect(page).not_to have_css 'a', text: 'Login to view and download'
60
- expect(page).to have_css 'a[data-download-type="shapefile"]', text: 'Export'
73
+ expect(page).to have_css 'button', text: 'Download'
61
74
  end
75
+
62
76
  scenario 'layer with direct download and wms/wfs should include all download types' do
63
77
  sign_in
64
78
  visit solr_document_path('stanford-cg357zz0321')
65
- expect(page).to have_css 'h2', text: 'Downloads'
66
- expect(page).to have_css 'a', text: 'Original Shapefile'
67
- expect(page).to have_css 'h2', text: 'Export Formats'
68
- expect(page).to have_css 'a', text: 'Export'
79
+ find('#downloads-button').click
80
+ expect(page).to have_css('#downloads-collapse a', text: 'Original')
81
+ expect(page).to have_css('#downloads-collapse a', text: 'Export')
69
82
  end
70
- scenario 'clicking GeoTIFF button for Harvard layer should show email form', js: true do
83
+
84
+ scenario 'clicking download GeoTIFF for Harvard layer should show email form', js: true do
71
85
  visit solr_document_path('harvard-g7064-s2-1834-k3')
86
+ find('#downloads-button').click
72
87
  find('a[data-download-type="harvard-hgl"]', text: 'GeoTIFF').click
73
88
  expect(page).to have_css('#hglRequest')
74
89
  end
90
+
75
91
  context 'with a successful request to the server' do
76
92
  let(:hgl_download) { instance_double(Geoblacklight::HglDownload) }
77
93
 
78
94
  xscenario 'submitting email form should trigger HGL request', js: true do
79
95
  # There are currently difficulties with testing the HGL downloader
80
96
  visit solr_document_path('harvard-g7064-s2-1834-k3')
97
+ find('#downloads-button').click
81
98
  find('a[data-download-type="harvard-hgl"]', text: 'Original GeoTIFF').click
82
99
 
83
100
  allow_any_instance_of(Geoblacklight::HglDownload).to receive(:new).and_return(hgl_download)
@@ -3,17 +3,19 @@ require 'spec_helper'
3
3
 
4
4
  feature 'feature_layer reference', js: true do
5
5
  scenario 'displays image map layer' do
6
- skip 'CORS error - Purdue web services are down'
6
+ skip 'spec depend on potentially flaky external services'
7
7
  visit solr_document_path '32653ed6-8d83-4692-8a06-bf13ffe2c018'
8
8
  expect(page).to have_css '.leaflet-control-zoom', visible: true
9
9
  expect(page).to have_css 'img.leaflet-image-layer', visible: true
10
10
  end
11
11
  scenario 'displays dynamic layer (all layers)' do
12
+ skip 'spec depend on potentially flaky external services'
12
13
  visit solr_document_path '90f14ff4-1359-4beb-b931-5cb41d20ab90'
13
14
  expect(page).to have_css '.leaflet-control-zoom', visible: true
14
15
  expect(page).to have_css 'img.leaflet-image-layer', visible: true
15
16
  end
16
17
  scenario 'displays dynamic layer (single layer)' do
18
+ skip 'spec depend on potentially flaky external services'
17
19
  visit solr_document_path '4669301e-b4b2-4c8b-bf40-01b968a2865b'
18
20
  expect(page).to have_css '.leaflet-control-zoom', visible: true
19
21
  expect(page).to have_css 'img.leaflet-image-layer', visible: true
@@ -26,11 +28,13 @@ feature 'feature_layer reference', js: true do
26
28
  fail
27
29
  end
28
30
  scenario 'displays tiled map layer' do
31
+ skip 'spec depend on potentially flaky external services'
29
32
  visit solr_document_path 'nyu-test-soil-survey-map'
30
33
  expect(page).to have_css '.leaflet-control-zoom', visible: true
31
34
  expect(page).to have_css 'img.leaflet-tile.leaflet-tile-loaded', visible: true
32
35
  end
33
36
  scenario 'displays Esri WMS layer' do
37
+ skip 'spec depend on potentially flaky external services'
34
38
  visit solr_document_path 'purdue-urn-f082acb1-b01e-4a08-9126-fd62a23fd9aa'
35
39
  expect(page).to have_css '.leaflet-control-zoom', visible: true
36
40
  expect(page).to have_css 'img.leaflet-tile.leaflet-tile-loaded', visible: true
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ feature 'Leaflet fullscreen control', js: true do
6
+ scenario 'IIIF layer should have full screen control' do
7
+ visit solr_document_path('princeton-sx61dn82p')
8
+ expect(page).to have_css('.leaflet-control-fullscreen-button')
9
+ end
10
+
11
+ scenario 'WMS layer should have full screen control' do
12
+ visit solr_document_path('stanford-cz128vq0535')
13
+ expect(page).to have_css('.leaflet-control-fullscreen-button')
14
+ end
15
+ end
@@ -21,9 +21,9 @@ feature 'Home page', js: true do # use js: true for tests which require js, but
21
21
  expect(page).to have_css '.category-block', count: 4
22
22
  expect(page).to have_css '.home-facet-link', count: 36
23
23
  expect(page).to have_css 'a.more_facets_link', count: 4
24
- click_link 'Topography'
24
+ click_link 'Counties'
25
25
  expect(page).to have_css '.filter-name', text: 'Subject'
26
- expect(page).to have_css '.filter-value', text: 'Topography'
26
+ expect(page).to have_css '.filter-value', text: 'Counties'
27
27
  end
28
28
  scenario 'map should be visible' do
29
29
  within '#main-container' do
@@ -3,8 +3,8 @@ require 'spec_helper'
3
3
 
4
4
  feature 'Index map' do
5
5
  # Colors
6
- default_color = '#1eb300'
7
- selected_color = '#006bde'
6
+ default_color = '#7FCDBB'
7
+ selected_color = '#2C7FB8'
8
8
  scenario 'displays index map viewer (polygon)', js: true do
9
9
  visit solr_document_path('stanford-fb897vt9938')
10
10
  # Wait until SVG elements are added
@@ -18,7 +18,7 @@ feature 'Missing metadata', js: true do
18
18
  visit solr_document_path('99-0001-noprovider')
19
19
  expect(page).to have_css('#map')
20
20
  end
21
- scenario 'Yields error free show page for no solr_geom' do
21
+ scenario 'Yields error free show page for no locn_geometry' do
22
22
  visit solr_document_path('05d-p16022coll246-noGeo')
23
23
  expect(page).to have_css('#map')
24
24
  end
@@ -5,7 +5,8 @@ feature 'Multiple downloads' do
5
5
  feature 'when item has multiple downloads in dct_references_s' do
6
6
  scenario 'downloads are listed in download card' do
7
7
  visit solr_document_path 'cugir-007950'
8
- within '.card.downloads' do
8
+ find('#downloads-button').click
9
+ within '#downloads-collapse' do
9
10
  expect(page).to have_link 'Shapefile', href: 'https://cugir-data.s3.amazonaws.com/00/79/50/cugir-007950.zip'
10
11
  expect(page).to have_link 'PDF', href: 'https://cugir-data.s3.amazonaws.com/00/79/50/agBROO.pdf'
11
12
  expect(page).to have_link 'KMZ', href: 'https://cugir-data.s3.amazonaws.com/00/79/50/agBROO2011.kmz'
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  feature 'Display related documents' do
5
- scenario 'Record with dc_source_sm value(s) should have parent(s)' do
5
+ scenario 'Record with dct_source_sm value(s) should have parent(s)' do
6
6
  visit relations_solr_document_path('nyu_2451_34502')
7
7
  expect(page).to have_css('.relations .card-header h2', text: 'Source Datasets')
8
8
  end
@@ -30,4 +30,15 @@ feature 'Display related documents' do
30
30
  visit solr_document_path('harvard-g7064-s2-1834-k3')
31
31
  expect(page).to have_no_css('.card.relations')
32
32
  end
33
+
34
+ scenario 'Relationship browse link returns relationship-scoped results', js: true do
35
+ # Wabash Topo parent record
36
+ visit solr_document_path('88cc9b19-3294-4da9-9edd-775c81fb1c59')
37
+
38
+ expect(page).to have_content('Has part...')
39
+ expect(page).to have_link('Browse all 4 records...')
40
+ click_link('Browse all 4 records...')
41
+
42
+ expect(page).not_to have_content('No results found for your search')
43
+ end
33
44
  end
@@ -9,6 +9,6 @@ feature 'saved searches' do
9
9
  expect(page.current_url).to match(/bbox=/)
10
10
  end
11
11
  visit blacklight.search_history_path
12
- expect(page).to have_css 'td.query a', text: /#{I18n.t('geoblacklight.bbox_label')}:/
12
+ expect(page).to have_css 'td.query a', text: /#{I18n.t('geoblacklight.bbox_label')}/
13
13
  end
14
14
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'spatial search results with an WKT bounding box that crosses the anti-meridian' do
5
+ scenario 'when searching within the covered area' do
6
+ # BBox param is in China
7
+ visit search_catalog_path(
8
+ q: 'A new & accurate map of Asia',
9
+ bbox: '98.4375 31.765537 117.202148 45.429299'
10
+ )
11
+ result_id = page.all('div.documentHeader.row').first['data-layer-id']
12
+ expect(result_id).to eq '57f0f116-b64e-4773-8684-96ba09afb549'
13
+ end
14
+
15
+ scenario 'when searching outside the covered area' do
16
+ # BBox param is in Oklahoma
17
+ visit search_catalog_path(
18
+ q: 'A new & accurate map of Asia',
19
+ bbox: '-98.717651 34.40691 -96.37207 36.199958'
20
+ )
21
+ results = page.all('div.documentHeader.row')
22
+ expect(results.count).to eq 0
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'search results display document iconography' do
5
+ scenario 'when viewing result row' do
6
+ # Search returns fixture stanford-cg357zz0321
7
+ visit search_catalog_path(
8
+ search_field: 'all_fields',
9
+ q: 'stanford-cg357zz0321'
10
+ )
11
+ first_result = page.all('span.status-icons > span')
12
+ expect(first_result[0][:class]).to include 'blacklight-icon-dataset'
13
+ expect(first_result[1][:class]).to include 'blacklight-icon-stanford'
14
+ expect(first_result[2][:class]).to include 'blacklight-icon-restricted'
15
+ end
16
+ end
@@ -6,8 +6,8 @@ feature 'search results map', js: true do
6
6
  visit search_catalog_path(q: 'Minnesota')
7
7
  expect(page).to have_css '#map'
8
8
  end
9
- scenario 'view is scoped to Minnesota' do
10
- pending 'Minnesota fixtures have changed.'
9
+ xscenario 'view is scoped to Minnesota' do
10
+ # pending 'Minnesota fixtures have changed.'
11
11
  visit root_path
12
12
  click_link 'Minnesota, United States'
13
13
  expect(page).to have_css '#map'
@@ -17,4 +17,21 @@ feature 'Search' do
17
17
  click_link 'Browse all 4 records...'
18
18
  expect(page).to have_css '.document', count: 4
19
19
  end
20
+
21
+ scenario 'When sorting by year desc, highest value sorts first' do
22
+ visit '/?f%5Bschema_provider_s%5D%5B%5D=University+of+Minnesota&sort=gbl_indexYear_im+desc%2C+dct_title_sort+asc'
23
+
24
+ first_doc = find('.document', match: :first)
25
+
26
+ # Doc with gbl_indexYear_im value: [2014, 2030]
27
+ expect(first_doc['data-document-id']).to eq('02236876-9c21-42f6-9870-d2562da8e44f')
28
+ end
29
+
30
+ scenario 'When sorting by year, missing values sort last' do
31
+ visit '/?f%5Bschema_provider_s%5D%5B%5D=University+of+Minnesota&sort=gbl_indexYear_im+desc%2C+dct_title_sort+asc'
32
+ last_doc = find_all('.document').last
33
+
34
+ # Doc without gbl_indexYear_im value
35
+ expect(last_doc['data-document-id']).to eq('05d-03-nogeomtype')
36
+ end
20
37
  end
@@ -4,14 +4,16 @@ require 'spec_helper'
4
4
  feature 'Download display on show page' do
5
5
  scenario 'with download String' do
6
6
  visit solr_document_path '2eddde2f-c222-41ca-bd07-2fd74a21f4de'
7
- within '.downloads' do
7
+ find('#downloads-button').click
8
+ within '#downloads-collapse' do
8
9
  expect(page).to have_selector(:css, 'a[href="ftp://gdrs.dnr.state.mn.us/gdrs/data/pub/us_mn_state_dnr/fgdb_base_usgs_scanned_topo_100k_drg.zip"]')
9
10
  end
10
11
  end
11
12
 
12
13
  scenario 'with download Array' do
13
14
  visit solr_document_path 'princeton-sx61dn82p'
14
- within '.downloads' do
15
+ find('#downloads-button').click
16
+ within '#downloads-collapse' do
15
17
  expect(page).to have_selector(:css, 'a[href="https://figgy.princeton.edu/downloads/a990e1b4-7f0e-44b8-ae2a-de7e93cdd74a/file/36a2274c-e0c6-4901-a14f-7c422d15e194"]')
16
18
  expect(page).to have_selector(:css, 'a[href="https://libimages1.princeton.edu/loris/figgy_prod/2e%2Fa9%2F43%2F2ea943b0bd4348fc9954b299f1b359f6%2Fintermediate_file.jp2/full/full/0/default.jpg"]')
17
19
  end
@@ -19,7 +21,8 @@ feature 'Download display on show page' do
19
21
 
20
22
  scenario 'with Harvard hgl_download' do
21
23
  visit solr_document_path 'harvard-g7064-s2-1834-k3'
22
- within '.downloads' do
24
+ find('#downloads-button').click
25
+ within '#downloads-collapse' do
23
26
  expect(page).to have_selector(:css, 'a[href="/download/hgl/harvard-g7064-s2-1834-k3"][data-download-type="harvard-hgl"]')
24
27
  end
25
28
  end
@@ -5,8 +5,8 @@ feature 'Metadata display on show page' do
5
5
  scenario 'with default CatalogController specified fields' do
6
6
  visit solr_document_path 'stanford-dp018hs9766'
7
7
  within '.document-metadata' do
8
- expect(page).to have_css 'dt', count: 8
9
- expect(page).to have_css 'dd', count: 8
8
+ expect(page).to have_css 'dt', count: 16
9
+ expect(page).to have_css 'dd', count: 16
10
10
  expect(page).to have_css 'div.truncate-abstract', count: 1
11
11
  end
12
12
  end
@@ -40,7 +40,7 @@ feature 'Index view', js: true do
40
40
  expect(page).to have_css('a.facet-select', text: 'University of Minnesota', visible: true)
41
41
  expect(page).to have_css('a.facet-select', text: 'MIT', visible: true)
42
42
  expect(page).to have_css('a.facet-select', text: 'Stanford', visible: true)
43
- expect(page).to have_css('a.more_facets_link', text: /more\sProvider\s»/, visible: true)
43
+ expect(page).to have_css('.more_facets a', text: /more\sProvider\s»/, visible: true)
44
44
  end
45
45
  end
46
46
 
@@ -77,4 +77,15 @@ feature 'Index view', js: true do
77
77
  expect(page).to have_css 'span.filter-name', text: 'Bounding Box'
78
78
  end
79
79
  end
80
+
81
+ scenario 'should have schema.org props listed' do
82
+ visit search_catalog_path(f: { Settings.FIELDS.PROVIDER => ['Stanford'] })
83
+ within('.documentHeader', match: :first) do
84
+ expect(page).to have_css("a[itemprop='name']")
85
+ find('.caret-toggle').click
86
+ end
87
+ within('.more-info-area', match: :first) do
88
+ expect(page).to have_css("small[itemprop='description']")
89
+ end
90
+ end
80
91
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'tilejson layer' do
5
+ before do
6
+ WebMock.disable_net_connect!(allow_localhost: true, allow: 'chromedriver.storage.googleapis.com')
7
+ end
8
+
9
+ after do
10
+ WebMock.allow_net_connect!
11
+ end
12
+
13
+ scenario 'displays tilejson layer', js: true do
14
+ # Mock tilejson manifest url
15
+ stub_request(:get, 'https://map-tiles-staging.princeton.edu/mosaicjson/tilejson.json?id=2a91d82c541c426cb787cc62afe8f248')
16
+ .to_return(status: 200, body: read_fixture('manifests/tilejson.json'))
17
+
18
+ visit solr_document_path('princeton-fk4544658v-tilejson')
19
+ expect(page).to have_css '.leaflet-control-zoom', visible: :visible
20
+ expect(page).to have_css "img[src*='https://map-tiles-staging.princeton.edu/mosaicjson/tiles/WebMercatorQuad']"
21
+ end
22
+ end
@@ -3,8 +3,8 @@ require 'spec_helper'
3
3
 
4
4
  feature 'tms layer' do
5
5
  scenario 'displays tms layer', js: true do
6
- visit solr_document_path('6f47b103-9955-4bbe-a364-387039623106')
6
+ visit solr_document_path('cugir-007957')
7
7
  expect(page).to have_css '.leaflet-control-zoom', visible: true
8
- expect(page).to have_css "img[src*='earthquake.usgs.gov']"
8
+ expect(page).to have_css "img[src*='cugir.library.cornell.edu']"
9
9
  end
10
10
  end
@@ -5,7 +5,7 @@ feature 'web services tools' do
5
5
  feature 'when wms/wfs are provided', js: true do
6
6
  scenario 'shows up in tools' do
7
7
  visit solr_document_path 'stanford-cg357zz0321'
8
- expect(page).to have_css 'li.web_services a', text: 'Web services'
8
+ expect(page).to have_css 'div.web-services-sidebar a', text: 'Web services'
9
9
  click_link 'Web services'
10
10
  within '.modal-body' do
11
11
  expect(page).to have_css 'input', count: 4
@@ -20,7 +20,40 @@ feature 'web services tools' do
20
20
  feature 'no wms or wfs provided' do
21
21
  scenario 'does not show up in tools' do
22
22
  visit solr_document_path 'mit-001145244'
23
- expect(page).not_to have_css 'li.web_services a', text: 'Web services'
23
+ expect(page).not_to have_css 'div.web-services-sidebar a', text: 'Web services'
24
+ end
25
+ end
26
+ feature 'when xyz tile reference is provided', js: true do
27
+ scenario 'shows up in tools' do
28
+ visit solr_document_path '6f47b103-9955-4bbe-a364-387039623106-xyz'
29
+ expect(page).to have_css 'div.web-services-sidebar a', text: 'Web services'
30
+ click_link 'Web services'
31
+ within '.modal-body' do
32
+ expect(page).to have_css 'label', text: 'XYZ Tiles'
33
+ expect(page).to have_css 'input[value="https://earthquake.usgs.gov/basemap/tiles/faults/{z}/{x}/{y}.png"]'
34
+ end
35
+ end
36
+ end
37
+ feature 'when wmts tile reference is provided', js: true do
38
+ scenario 'shows up in tools' do
39
+ visit solr_document_path 'princeton-fk4544658v-wmts'
40
+ expect(page).to have_css 'div.web-services-sidebar a', text: 'Web services'
41
+ click_link 'Web services'
42
+ within '.modal-body' do
43
+ expect(page).to have_css 'label', text: 'Web Map Tile Service'
44
+ expect(page).to have_css 'input[value="https://map-tiles-staging.princeton.edu/mosaicjson/WMTSCapabilities.xml?id=2a91d82c541c426cb787cc62afe8f248"]'
45
+ end
46
+ end
47
+ end
48
+ feature 'when tilejson reference is provided', js: true do
49
+ scenario 'shows up in tools' do
50
+ visit solr_document_path 'princeton-fk4544658v-tilejson'
51
+ expect(page).to have_css 'div.web-services-sidebar a', text: 'Web services'
52
+ click_link 'Web services'
53
+ within '.modal-body' do
54
+ expect(page).to have_css 'label', text: 'TileJSON Document'
55
+ expect(page).to have_css 'input[value="https://map-tiles-staging.princeton.edu/mosaicjson/tilejson.json?id=2a91d82c541c426cb787cc62afe8f248"]'
56
+ end
24
57
  end
25
58
  end
26
59
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'wmts layer' do
5
+ before do
6
+ WebMock.disable_net_connect!(allow_localhost: true, allow: 'chromedriver.storage.googleapis.com')
7
+ end
8
+
9
+ after do
10
+ WebMock.allow_net_connect!
11
+ end
12
+
13
+ context 'when referencing a WMTSCapabilities document with a single layer' do
14
+ scenario 'displays the layer', js: true do
15
+ # Mock wmts manifest url
16
+ stub_request(:get, 'https://map-tiles-staging.princeton.edu/mosaicjson/WMTSCapabilities.xml?id=2a91d82c541c426cb787cc62afe8f248')
17
+ .to_return(status: 200, body: read_fixture('manifests/wmts-single.xml'))
18
+
19
+ visit solr_document_path('princeton-fk4544658v-wmts')
20
+ expect(page).to have_css '.leaflet-control-zoom', visible: :visible
21
+ expect(page).to have_css "img[src*='map-tiles-staging.princeton.edu/mosaicjson/tiles/WebMercatorQuad']"
22
+ end
23
+ end
24
+ context 'when referencing a WMTSCapabilities document with a multiple layers' do
25
+ scenario 'displays the layer referenced in the layer_id field', js: true do
26
+ # Mock wmts manifest url
27
+ stub_request(:get, 'https://maps.wien.gv.at/wmts/1.0.0/WMTSCapabilities.xml')
28
+ .to_return(status: 200, body: read_fixture('manifests/wmts-multiple.xml'))
29
+ visit solr_document_path('princeton-fk4db9hn29')
30
+ expect(page).to have_css '.leaflet-control-zoom', visible: :visible
31
+ expect(page).to have_css "img[src*='http://maps1.wien.gv.at/wmts/lb2016/farbe/google3857']"
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'xyz layer' do
5
+ scenario 'displays tms layer', js: true do
6
+ visit solr_document_path('6f47b103-9955-4bbe-a364-387039623106-xyz')
7
+ expect(page).to have_css '.leaflet-control-zoom', visible: :visible
8
+ expect(page).to have_css "img[src*='earthquake.usgs.gov']"
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ {
2
+ "tilejson": "2.2.0",
3
+ "version": "1.0.0",
4
+ "scheme": "xyz",
5
+ "tiles": [
6
+ "https://map-tiles-staging.princeton.edu/mosaicjson/tiles/WebMercatorQuad/{z}/{x}/{y}@1x?url=s3%3A%2F%2Ffiggy-geo-staging%2F2a%2F91%2Fd8%2F2a91d82c541c426cb787cc62afe8f248%2Fmosaic-6c5b32bfe4cb8e4fb07d32cd6656d024.json&rescale=0%2C255"
7
+ ],
8
+ "minzoom": 8,
9
+ "maxzoom": 13,
10
+ "bounds": [
11
+ 19.22222222200001,
12
+ 39.74997750505241,
13
+ 29.356941715411907,
14
+ 43.083333000050004
15
+ ],
16
+ "center": [
17
+ 24.28958196870596,
18
+ 41.41665525255121,
19
+ 8
20
+ ]
21
+ }