geoblacklight 2.3.0

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 (418) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +195 -0
  3. data/.github/ISSUE_TEMPLATE.md +17 -0
  4. data/.gitignore +21 -0
  5. data/.gitmodules +0 -0
  6. data/.hound.yml +8 -0
  7. data/.jshintignore +2 -0
  8. data/.jshintrc +67 -0
  9. data/.rubocop.yml +99 -0
  10. data/.rubocop_todo.yml +196 -0
  11. data/.solr_wrapper +5 -0
  12. data/CODE_OF_CONDUCT.md +76 -0
  13. data/CONTRIBUTING.md +49 -0
  14. data/Gemfile +39 -0
  15. data/LICENSE.txt +13 -0
  16. data/README.md +39 -0
  17. data/Rakefile +125 -0
  18. data/app/assets/images/blacklight/arrow-circle-down.svg +4 -0
  19. data/app/assets/images/blacklight/baruch-cuny.svg +6 -0
  20. data/app/assets/images/blacklight/berkeley.svg +7 -0
  21. data/app/assets/images/blacklight/book.svg +6 -0
  22. data/app/assets/images/blacklight/bookmark.svg +6 -0
  23. data/app/assets/images/blacklight/cd-rom.svg +6 -0
  24. data/app/assets/images/blacklight/chicago.svg +7 -0
  25. data/app/assets/images/blacklight/columbia.svg +6 -0
  26. data/app/assets/images/blacklight/cornell.svg +8 -0
  27. data/app/assets/images/blacklight/dvd-rom.svg +6 -0
  28. data/app/assets/images/blacklight/email.svg +6 -0
  29. data/app/assets/images/blacklight/esri-globe.svg +34 -0
  30. data/app/assets/images/blacklight/geoblacklight-icons.json +2079 -0
  31. data/app/assets/images/blacklight/globe.svg +4 -0
  32. data/app/assets/images/blacklight/harvard.svg +6 -0
  33. data/app/assets/images/blacklight/home.svg +4 -0
  34. data/app/assets/images/blacklight/illinois.svg +7 -0
  35. data/app/assets/images/blacklight/image.svg +6 -0
  36. data/app/assets/images/blacklight/indiana.svg +6 -0
  37. data/app/assets/images/blacklight/iowa.svg +6 -0
  38. data/app/assets/images/blacklight/leaf.svg +6 -0
  39. data/app/assets/images/blacklight/lewis-clark.svg +8 -0
  40. data/app/assets/images/blacklight/line.svg +7 -0
  41. data/app/assets/images/blacklight/logo.svg +1 -0
  42. data/app/assets/images/blacklight/map-marker.svg +6 -0
  43. data/app/assets/images/blacklight/map.svg +6 -0
  44. data/app/assets/images/blacklight/maryland.svg +6 -0
  45. data/app/assets/images/blacklight/massgis.svg +6 -0
  46. data/app/assets/images/blacklight/metadata.svg +6 -0
  47. data/app/assets/images/blacklight/michigan-state.svg +7 -0
  48. data/app/assets/images/blacklight/michigan.svg +6 -0
  49. data/app/assets/images/blacklight/minnesota.svg +6 -0
  50. data/app/assets/images/blacklight/mit.svg +6 -0
  51. data/app/assets/images/blacklight/mixed.svg +8 -0
  52. data/app/assets/images/blacklight/multilinestring.svg +9 -0
  53. data/app/assets/images/blacklight/multipoint.svg +6 -0
  54. data/app/assets/images/blacklight/multipolygon.svg +9 -0
  55. data/app/assets/images/blacklight/nyu.svg +9 -0
  56. data/app/assets/images/blacklight/ohio-state.svg +8 -0
  57. data/app/assets/images/blacklight/pagelines-brands.svg +6 -0
  58. data/app/assets/images/blacklight/paper-map.svg +6 -0
  59. data/app/assets/images/blacklight/penn-state.svg +7 -0
  60. data/app/assets/images/blacklight/point.svg +6 -0
  61. data/app/assets/images/blacklight/polygon.svg +7 -0
  62. data/app/assets/images/blacklight/polyline.svg +9 -0
  63. data/app/assets/images/blacklight/princeton.svg +6 -0
  64. data/app/assets/images/blacklight/public.svg +6 -0
  65. data/app/assets/images/blacklight/purdue.svg +7 -0
  66. data/app/assets/images/blacklight/raster.svg +6 -0
  67. data/app/assets/images/blacklight/restricted.svg +6 -0
  68. data/app/assets/images/blacklight/sms.svg +6 -0
  69. data/app/assets/images/blacklight/stanford.svg +6 -0
  70. data/app/assets/images/blacklight/table.svg +6 -0
  71. data/app/assets/images/blacklight/tags.svg +4 -0
  72. data/app/assets/images/blacklight/texas.svg +6 -0
  73. data/app/assets/images/blacklight/tufts.svg +6 -0
  74. data/app/assets/images/blacklight/ucla.svg +6 -0
  75. data/app/assets/images/blacklight/uva.svg +6 -0
  76. data/app/assets/images/blacklight/web_services.svg +6 -0
  77. data/app/assets/images/blacklight/wisconsin.svg +6 -0
  78. data/app/assets/javascripts/geoblacklight/basemaps.js +85 -0
  79. data/app/assets/javascripts/geoblacklight/controls.js +1 -0
  80. data/app/assets/javascripts/geoblacklight/controls/opacity.js +6 -0
  81. data/app/assets/javascripts/geoblacklight/downloaders.js +1 -0
  82. data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +61 -0
  83. data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +32 -0
  84. data/app/assets/javascripts/geoblacklight/geoblacklight.js +42 -0
  85. data/app/assets/javascripts/geoblacklight/modules.js +1 -0
  86. data/app/assets/javascripts/geoblacklight/modules/collapse.js +7 -0
  87. data/app/assets/javascripts/geoblacklight/modules/download.js +11 -0
  88. data/app/assets/javascripts/geoblacklight/modules/geosearch.js +133 -0
  89. data/app/assets/javascripts/geoblacklight/modules/help_text.js +7 -0
  90. data/app/assets/javascripts/geoblacklight/modules/home.js +16 -0
  91. data/app/assets/javascripts/geoblacklight/modules/item.js +13 -0
  92. data/app/assets/javascripts/geoblacklight/modules/layer_opacity.js +68 -0
  93. data/app/assets/javascripts/geoblacklight/modules/metadata.js +15 -0
  94. data/app/assets/javascripts/geoblacklight/modules/metadata_download_button.js +53 -0
  95. data/app/assets/javascripts/geoblacklight/modules/relations.js +14 -0
  96. data/app/assets/javascripts/geoblacklight/modules/results.js +82 -0
  97. data/app/assets/javascripts/geoblacklight/modules/util.js +38 -0
  98. data/app/assets/javascripts/geoblacklight/templates/index_map_download.hbs +19 -0
  99. data/app/assets/javascripts/geoblacklight/templates/index_map_info.hbs +40 -0
  100. data/app/assets/javascripts/geoblacklight/viewers.js +1 -0
  101. data/app/assets/javascripts/geoblacklight/viewers/esri.js +77 -0
  102. data/app/assets/javascripts/geoblacklight/viewers/esri/dynamic_map_layer.js +85 -0
  103. data/app/assets/javascripts/geoblacklight/viewers/esri/feature_layer.js +76 -0
  104. data/app/assets/javascripts/geoblacklight/viewers/esri/image_map_layer.js +14 -0
  105. data/app/assets/javascripts/geoblacklight/viewers/esri/tiled_map_layer.js +50 -0
  106. data/app/assets/javascripts/geoblacklight/viewers/iiif.js +25 -0
  107. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +70 -0
  108. data/app/assets/javascripts/geoblacklight/viewers/map.js +67 -0
  109. data/app/assets/javascripts/geoblacklight/viewers/oembed.js +13 -0
  110. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +65 -0
  111. data/app/assets/javascripts/geoblacklight/viewers/wms.js +74 -0
  112. data/app/assets/stylesheets/geoblacklight/_blacklight_overrides.scss +51 -0
  113. data/app/assets/stylesheets/geoblacklight/_geoblacklight.scss +36 -0
  114. data/app/assets/stylesheets/geoblacklight/_styles.scss +4 -0
  115. data/app/assets/stylesheets/geoblacklight/application.scss +2 -0
  116. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +93 -0
  117. data/app/assets/stylesheets/geoblacklight/modules/facets.scss +5 -0
  118. data/app/assets/stylesheets/geoblacklight/modules/geosearch.scss +29 -0
  119. data/app/assets/stylesheets/geoblacklight/modules/home.scss +28 -0
  120. data/app/assets/stylesheets/geoblacklight/modules/icon-customization.scss +50 -0
  121. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +7 -0
  122. data/app/assets/stylesheets/geoblacklight/modules/item.scss +26 -0
  123. data/app/assets/stylesheets/geoblacklight/modules/layer_opacity.scss +87 -0
  124. data/app/assets/stylesheets/geoblacklight/modules/metadata.scss +31 -0
  125. data/app/assets/stylesheets/geoblacklight/modules/metadata_content.scss +43 -0
  126. data/app/assets/stylesheets/geoblacklight/modules/metadata_markup.scss +9 -0
  127. data/app/assets/stylesheets/geoblacklight/modules/metadata_missing.scss +7 -0
  128. data/app/assets/stylesheets/geoblacklight/modules/mixins.scss +5 -0
  129. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +14 -0
  130. data/app/assets/stylesheets/geoblacklight/modules/relations.scss +15 -0
  131. data/app/assets/stylesheets/geoblacklight/modules/results.scss +68 -0
  132. data/app/assets/stylesheets/geoblacklight/modules/search_widgets.scss +5 -0
  133. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +60 -0
  134. data/app/assets/stylesheets/geoblacklight/modules/toolbar.scss +70 -0
  135. data/app/assets/stylesheets/geoblacklight/modules/web_services.scss +5 -0
  136. data/app/controllers/download_controller.rb +114 -0
  137. data/app/controllers/relation_controller.rb +20 -0
  138. data/app/controllers/wms_controller.rb +15 -0
  139. data/app/helpers/arcgis_helper.rb +12 -0
  140. data/app/helpers/blacklight_helper.rb +9 -0
  141. data/app/helpers/carto_helper.rb +29 -0
  142. data/app/helpers/geoblacklight_helper.rb +323 -0
  143. data/app/models/concerns/geoblacklight/solr_document.rb +113 -0
  144. data/app/models/concerns/geoblacklight/solr_document/arcgis.rb +10 -0
  145. data/app/models/concerns/geoblacklight/solr_document/carto.rb +28 -0
  146. data/app/models/concerns/geoblacklight/solr_document/finder.rb +38 -0
  147. data/app/models/concerns/geoblacklight/solr_document/inspection.rb +15 -0
  148. data/app/models/concerns/geoblacklight/spatial_search_behavior.rb +69 -0
  149. data/app/presenters/geoblacklight/document_presenter.rb +23 -0
  150. data/app/views/catalog/_data_dictionary.html.erb +6 -0
  151. data/app/views/catalog/_document_action.html.erb +6 -0
  152. data/app/views/catalog/_document_split.html.erb +6 -0
  153. data/app/views/catalog/_download_generated_link.html.erb +4 -0
  154. data/app/views/catalog/_download_link.html.erb +3 -0
  155. data/app/views/catalog/_downloads_generated.html.erb +6 -0
  156. data/app/views/catalog/_downloads_primary.html.erb +14 -0
  157. data/app/views/catalog/_downloads_secondary.html.erb +39 -0
  158. data/app/views/catalog/_exports.html.erb +3 -0
  159. data/app/views/catalog/_facet_tag_item.html.erb +3 -0
  160. data/app/views/catalog/_facet_tag_layout.html.erb +2 -0
  161. data/app/views/catalog/_header_icons.html.erb +3 -0
  162. data/app/views/catalog/_home_text.html.erb +43 -0
  163. data/app/views/catalog/_icon_facet.html.erb +16 -0
  164. data/app/views/catalog/_index_split_default.html.erb +22 -0
  165. data/app/views/catalog/_metadata.html.erb +27 -0
  166. data/app/views/catalog/_relations_container.html.erb +1 -0
  167. data/app/views/catalog/_results_pagination.html.erb +12 -0
  168. data/app/views/catalog/_show_default_attribute_table.html.erb +19 -0
  169. data/app/views/catalog/_show_default_viewer_container.html.erb +12 -0
  170. data/app/views/catalog/_show_default_viewer_information.html.erb +4 -0
  171. data/app/views/catalog/_show_downloads.html.erb +34 -0
  172. data/app/views/catalog/_show_header_default.html.erb +4 -0
  173. data/app/views/catalog/_show_sidebar.html.erb +12 -0
  174. data/app/views/catalog/_show_tools.html.erb +25 -0
  175. data/app/views/catalog/_web_services.html.erb +8 -0
  176. data/app/views/catalog/_web_services_default.html.erb +8 -0
  177. data/app/views/catalog/_web_services_wfs.html.erb +8 -0
  178. data/app/views/catalog/_web_services_wms.html.erb +8 -0
  179. data/app/views/catalog/index.html.erb +13 -0
  180. data/app/views/catalog/metadata.html.erb +11 -0
  181. data/app/views/catalog/metadata/_content.html.erb +3 -0
  182. data/app/views/catalog/metadata/_markup.html.erb +8 -0
  183. data/app/views/catalog/metadata/_missing.html.erb +6 -0
  184. data/app/views/catalog/web_services.html.erb +10 -0
  185. data/app/views/download/hgl.html.erb +25 -0
  186. data/app/views/relation/_ancestors.html.erb +11 -0
  187. data/app/views/relation/_descendants.html.erb +18 -0
  188. data/app/views/relation/index.html.erb +13 -0
  189. data/app/views/relation/index.json.jbuilder +3 -0
  190. data/app/views/shared/_header_navbar.html.erb +38 -0
  191. data/config/initializers/rails_config.rb +3 -0
  192. data/config/locales/geoblacklight.en.yml +163 -0
  193. data/geoblacklight.gemspec +49 -0
  194. data/lib/generators/geoblacklight/install_generator.rb +105 -0
  195. data/lib/generators/geoblacklight/templates/Procfile +3 -0
  196. data/lib/generators/geoblacklight/templates/catalog_controller.rb +272 -0
  197. data/lib/generators/geoblacklight/templates/geoblacklight.js +10 -0
  198. data/lib/generators/geoblacklight/templates/geoblacklight.scss +4 -0
  199. data/lib/generators/geoblacklight/templates/package.json +14 -0
  200. data/lib/generators/geoblacklight/templates/settings.yml +127 -0
  201. data/lib/generators/geoblacklight/templates/webpacker.yml +67 -0
  202. data/lib/generators/geoblacklight/webpacker_generator.rb +35 -0
  203. data/lib/geoblacklight.rb +50 -0
  204. data/lib/geoblacklight/bounding_box.rb +45 -0
  205. data/lib/geoblacklight/catalog_helper_override.rb +13 -0
  206. data/lib/geoblacklight/constants.rb +28 -0
  207. data/lib/geoblacklight/download.rb +108 -0
  208. data/lib/geoblacklight/download/geojson_download.rb +22 -0
  209. data/lib/geoblacklight/download/geotiff_download.rb +20 -0
  210. data/lib/geoblacklight/download/hgl_download.rb +18 -0
  211. data/lib/geoblacklight/download/kmz_download.rb +22 -0
  212. data/lib/geoblacklight/download/shapefile_download.rb +20 -0
  213. data/lib/geoblacklight/engine.rb +27 -0
  214. data/lib/geoblacklight/exceptions.rb +27 -0
  215. data/lib/geoblacklight/geoblacklight_helper_behavior.rb +14 -0
  216. data/lib/geoblacklight/item_viewer.rb +54 -0
  217. data/lib/geoblacklight/metadata.rb +18 -0
  218. data/lib/geoblacklight/metadata/base.rb +93 -0
  219. data/lib/geoblacklight/metadata/fgdc.rb +14 -0
  220. data/lib/geoblacklight/metadata/html.rb +13 -0
  221. data/lib/geoblacklight/metadata/iso19139.rb +14 -0
  222. data/lib/geoblacklight/metadata_transformer.rb +33 -0
  223. data/lib/geoblacklight/metadata_transformer/base.rb +42 -0
  224. data/lib/geoblacklight/metadata_transformer/fgdc.rb +8 -0
  225. data/lib/geoblacklight/metadata_transformer/iso19139.rb +8 -0
  226. data/lib/geoblacklight/reference.rb +45 -0
  227. data/lib/geoblacklight/references.rb +132 -0
  228. data/lib/geoblacklight/relation/ancestors.rb +27 -0
  229. data/lib/geoblacklight/relation/descendants.rb +27 -0
  230. data/lib/geoblacklight/relation/relation_response.rb +24 -0
  231. data/lib/geoblacklight/routes.rb +7 -0
  232. data/lib/geoblacklight/routes/downloadable.rb +14 -0
  233. data/lib/geoblacklight/routes/exportable.rb +17 -0
  234. data/lib/geoblacklight/routes/wms.rb +13 -0
  235. data/lib/geoblacklight/version.rb +3 -0
  236. data/lib/geoblacklight/view_helper_override.rb +40 -0
  237. data/lib/geoblacklight/wms_layer.rb +35 -0
  238. data/lib/geoblacklight/wms_layer/feature_info_response.rb +32 -0
  239. data/lib/tasks/geoblacklight.rake +108 -0
  240. data/package.json +4 -0
  241. data/schema/format-values.md +50 -0
  242. data/schema/geoblacklight-schema-deprecated.md +39 -0
  243. data/schema/geoblacklight-schema.json +214 -0
  244. data/schema/geoblacklight-schema.md +323 -0
  245. data/schema/geometry-type-values.md +11 -0
  246. data/schema/references.md +23 -0
  247. data/schema/schema-commentary.md +198 -0
  248. data/schema/subjects.md +41 -0
  249. data/schema/type-values.md +10 -0
  250. data/solr/conf/_rest_managed.json +3 -0
  251. data/solr/conf/admin-extra.html +31 -0
  252. data/solr/conf/core.properties +5 -0
  253. data/solr/conf/elevate.xml +36 -0
  254. data/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  255. data/solr/conf/protwords.txt +21 -0
  256. data/solr/conf/schema.xml +198 -0
  257. data/solr/conf/scripts.conf +24 -0
  258. data/solr/conf/solrconfig.xml +243 -0
  259. data/solr/conf/spellings.txt +2 -0
  260. data/solr/conf/stopwords.txt +58 -0
  261. data/solr/conf/stopwords_en.txt +58 -0
  262. data/solr/conf/synonyms.txt +31 -0
  263. data/solr/conf/xslt/example.xsl +132 -0
  264. data/solr/conf/xslt/example_atom.xsl +67 -0
  265. data/solr/conf/xslt/example_rss.xsl +66 -0
  266. data/solr/conf/xslt/luke.xsl +337 -0
  267. data/spec/controllers/catalog_controller_spec.rb +82 -0
  268. data/spec/controllers/download_controller_spec.rb +120 -0
  269. data/spec/controllers/relation_controller_spec.rb +11 -0
  270. data/spec/controllers/wms_controller_spec.rb +34 -0
  271. data/spec/factories/user.rb +7 -0
  272. data/spec/features/bookmarks_spec.rb +10 -0
  273. data/spec/features/configurable_basemap_spec.rb +35 -0
  274. data/spec/features/data_dictionary_download_spec.rb +16 -0
  275. data/spec/features/download_layer_spec.rb +93 -0
  276. data/spec/features/empty_search_spec.rb +11 -0
  277. data/spec/features/esri_viewer_spec.rb +42 -0
  278. data/spec/features/exports_spec.rb +36 -0
  279. data/spec/features/help_text_spec.rb +8 -0
  280. data/spec/features/home_page_spec.rb +40 -0
  281. data/spec/features/iiif_viewer_spec.rb +8 -0
  282. data/spec/features/index_map_spec.rb +31 -0
  283. data/spec/features/layer_inspection_spec.rb +10 -0
  284. data/spec/features/layer_opacity_spec.rb +20 -0
  285. data/spec/features/layer_preview_spec.rb +17 -0
  286. data/spec/features/layer_with_no_references_spec.rb +8 -0
  287. data/spec/features/linkified_attribute_table_spec.rb +11 -0
  288. data/spec/features/metadata_panel_spec.rb +78 -0
  289. data/spec/features/missing_metadata_spec.rb +24 -0
  290. data/spec/features/oembed_spec.rb +9 -0
  291. data/spec/features/relations_spec.rb +51 -0
  292. data/spec/features/saved_searches_spec.rb +13 -0
  293. data/spec/features/search_bar_spec.rb +12 -0
  294. data/spec/features/search_results_map_spec.rb +55 -0
  295. data/spec/features/search_results_overlap_ratio_spec.rb +55 -0
  296. data/spec/features/search_spec.rb +14 -0
  297. data/spec/features/show_page_metadata_spec.rb +12 -0
  298. data/spec/features/sms_spec.rb +15 -0
  299. data/spec/features/split_view.html.erb_spec.rb +75 -0
  300. data/spec/features/suppressed_records_spec.rb +14 -0
  301. data/spec/features/web_services_modal_spec.rb +25 -0
  302. data/spec/fixtures/fgdc/harvard-g7064-s2-1834-k3.xml +1 -0
  303. data/spec/fixtures/iso19139/stanford-cg357zz0321.xml +581 -0
  304. data/spec/fixtures/mods/fb897vt9938.mods +111 -0
  305. data/spec/fixtures/mods/stanford-cg357zz0321.mods +113 -0
  306. data/spec/fixtures/solr_documents/README.md +40 -0
  307. data/spec/fixtures/solr_documents/actual-papermap1.json +23 -0
  308. data/spec/fixtures/solr_documents/actual-point1.json +37 -0
  309. data/spec/fixtures/solr_documents/actual-polygon1.json +23 -0
  310. data/spec/fixtures/solr_documents/actual-raster1.json +38 -0
  311. data/spec/fixtures/solr_documents/baruch_ancestor1.json +46 -0
  312. data/spec/fixtures/solr_documents/baruch_ancestor2.json +46 -0
  313. data/spec/fixtures/solr_documents/baruch_documentation_download.json +49 -0
  314. data/spec/fixtures/solr_documents/bbox-spans-180.json +20 -0
  315. data/spec/fixtures/solr_documents/cornell_html_metadata.json +42 -0
  316. data/spec/fixtures/solr_documents/esri-dynamic-layer-all-layers.json +38 -0
  317. data/spec/fixtures/solr_documents/esri-dynamic-layer-single-layer.json +40 -0
  318. data/spec/fixtures/solr_documents/esri-feature-layer.json +46 -0
  319. data/spec/fixtures/solr_documents/esri-image-map-layer.json +42 -0
  320. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +22 -0
  321. data/spec/fixtures/solr_documents/esri-wms-layer.json +33 -0
  322. data/spec/fixtures/solr_documents/harvard_raster.json +44 -0
  323. data/spec/fixtures/solr_documents/iiif-eastern-hemisphere.json +30 -0
  324. data/spec/fixtures/solr_documents/index-map-polygon-no-downloadurl.json +37 -0
  325. data/spec/fixtures/solr_documents/index-map-polygon.json +37 -0
  326. data/spec/fixtures/solr_documents/index-map-stanford.json +37 -0
  327. data/spec/fixtures/solr_documents/index_map_point.json +27 -0
  328. data/spec/fixtures/solr_documents/metadata_no_dct_provenance_s.json +30 -0
  329. data/spec/fixtures/solr_documents/metadata_no_layer_geom_type_s.json +17 -0
  330. data/spec/fixtures/solr_documents/metadata_no_solr_geom.json +23 -0
  331. data/spec/fixtures/solr_documents/no_spatial.json +21 -0
  332. data/spec/fixtures/solr_documents/oembed.json +24 -0
  333. data/spec/fixtures/solr_documents/princeton-child1.json +30 -0
  334. data/spec/fixtures/solr_documents/princeton-child2.json +30 -0
  335. data/spec/fixtures/solr_documents/princeton-child3.json +30 -0
  336. data/spec/fixtures/solr_documents/princeton-child4.json +30 -0
  337. data/spec/fixtures/solr_documents/princeton-parent.json +25 -0
  338. data/spec/fixtures/solr_documents/public_direct_download.json +34 -0
  339. data/spec/fixtures/solr_documents/public_iiif_princeton.json +36 -0
  340. data/spec/fixtures/solr_documents/public_polygon_mit.json +27 -0
  341. data/spec/fixtures/solr_documents/restricted-line.json +37 -0
  342. data/spec/fixtures/solr_documents/umn_metro_result1.json +41 -0
  343. data/spec/fixtures/solr_documents/umn_state_result1.json +38 -0
  344. data/spec/fixtures/solr_documents/umn_state_result2.json +38 -0
  345. data/spec/fixtures/solr_documents/uva_slug_colon.json +25 -0
  346. data/spec/helpers/arcgis_helper_spec.rb +14 -0
  347. data/spec/helpers/carto_helper_spec.rb +11 -0
  348. data/spec/helpers/geoblacklight_helper_spec.rb +329 -0
  349. data/spec/javascripts/geoblacklight_spec.js +21 -0
  350. data/spec/javascripts/metadata_download_button_spec.js +14 -0
  351. data/spec/javascripts/spec_helper.js +32 -0
  352. data/spec/javascripts/util_spec.js +12 -0
  353. data/spec/lib/geoblacklight/bounding_box_spec.rb +27 -0
  354. data/spec/lib/geoblacklight/controller_override_spec.rb +1 -0
  355. data/spec/lib/geoblacklight/document_presenter_spec.rb +61 -0
  356. data/spec/lib/geoblacklight/download/geojson_download_spec.rb +19 -0
  357. data/spec/lib/geoblacklight/download/geotiff_download_spec.rb +20 -0
  358. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +60 -0
  359. data/spec/lib/geoblacklight/download/kmz_download_spec.rb +20 -0
  360. data/spec/lib/geoblacklight/download/shapefile_download_spec.rb +19 -0
  361. data/spec/lib/geoblacklight/download_spec.rb +177 -0
  362. data/spec/lib/geoblacklight/geoblacklight_helper_behavior_spec.rb +30 -0
  363. data/spec/lib/geoblacklight/item_viewer_spec.rb +63 -0
  364. data/spec/lib/geoblacklight/metadata/base_spec.rb +157 -0
  365. data/spec/lib/geoblacklight/metadata/html_spec.rb +18 -0
  366. data/spec/lib/geoblacklight/metadata_spec.rb +42 -0
  367. data/spec/lib/geoblacklight/metadata_transformer/base_spec.rb +35 -0
  368. data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +23 -0
  369. data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +23 -0
  370. data/spec/lib/geoblacklight/metadata_transformer_spec.rb +69 -0
  371. data/spec/lib/geoblacklight/reference_spec.rb +64 -0
  372. data/spec/lib/geoblacklight/references_spec.rb +216 -0
  373. data/spec/lib/geoblacklight/relation/ancestors_spec.rb +32 -0
  374. data/spec/lib/geoblacklight/relation/descendants_spec.rb +32 -0
  375. data/spec/lib/geoblacklight/relation/relation_response_spec.rb +43 -0
  376. data/spec/lib/geoblacklight/view_helper_override_spec.rb +37 -0
  377. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +50 -0
  378. data/spec/lib/geoblacklight/wms_layer_spec.rb +99 -0
  379. data/spec/models/concerns/geoblacklight/solr_document/carto_spec.rb +61 -0
  380. data/spec/models/concerns/geoblacklight/solr_document/finder_spec.rb +40 -0
  381. data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +16 -0
  382. data/spec/models/concerns/geoblacklight/solr_document_spec.rb +251 -0
  383. data/spec/models/concerns/geoblacklight/spatial_search_behavior_spec.rb +84 -0
  384. data/spec/routing/catalog_routing_spec.rb +8 -0
  385. data/spec/spec_helper.rb +79 -0
  386. data/spec/support/backport_test_helpers.rb +45 -0
  387. data/spec/support/features.rb +5 -0
  388. data/spec/support/features/session_helpers.rb +20 -0
  389. data/spec/teaspoon_env.rb +213 -0
  390. data/spec/test_app_templates/Gemfile.extra +1 -0
  391. data/spec/test_app_templates/lib/generators/test_app_generator.rb +49 -0
  392. data/spec/test_app_templates/metadata/fgdc.html +129 -0
  393. data/spec/test_app_templates/metadata/fgdc.xml +145 -0
  394. data/spec/test_app_templates/metadata/iso.html +275 -0
  395. data/spec/test_app_templates/metadata/iso.xml +511 -0
  396. data/spec/test_app_templates/solr_documents +1 -0
  397. data/spec/views/catalog/_document_split.html.erb_spec.rb +5 -0
  398. data/spec/views/catalog/_index_split.html.erb_spec.rb +5 -0
  399. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +9 -0
  400. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +41 -0
  401. data/spec/views/catalog/_show_tools.html.erb_spec.rb +39 -0
  402. data/template.rb +19 -0
  403. data/vendor/assets/images/layers-2x.png +0 -0
  404. data/vendor/assets/images/layers.png +0 -0
  405. data/vendor/assets/images/marker-icon-2x.png +0 -0
  406. data/vendor/assets/images/marker-icon.png +0 -0
  407. data/vendor/assets/images/marker-shadow.png +0 -0
  408. data/vendor/assets/javascripts/esri-leaflet.js +5 -0
  409. data/vendor/assets/javascripts/esri-leaflet.js.map +1 -0
  410. data/vendor/assets/javascripts/leaflet-iiif.js +302 -0
  411. data/vendor/assets/javascripts/leaflet-src.js.map +1 -0
  412. data/vendor/assets/javascripts/leaflet.js.erb +13922 -0
  413. data/vendor/assets/javascripts/native.history.js +1 -0
  414. data/vendor/assets/javascripts/readmore.js +618 -0
  415. data/vendor/assets/javascripts/readmore.js.map +1 -0
  416. data/vendor/assets/stylesheets/leaflet-label.css +54 -0
  417. data/vendor/assets/stylesheets/leaflet.css +635 -0
  418. metadata +967 -0
@@ -0,0 +1,21 @@
1
+ //= require geoblacklight
2
+
3
+ describe('GeoBlacklight', function() {
4
+ describe('loads and makes available libraries', function() {
5
+ it('Leaflet is defined', function() {
6
+ expect(L).toBeDefined();
7
+ });
8
+
9
+ it('History.js is defined', function() {
10
+ expect(History).toBeDefined();
11
+ });
12
+
13
+ it('MetadataDownloadButton is defined', function() {
14
+ expect(GeoBlacklight.MetadataDownloadButton).toBeDefined();
15
+ });
16
+
17
+ it ('Readmore is defined', function() {
18
+ expect(Readmore).toBeDefined();
19
+ });
20
+ });
21
+ });
@@ -0,0 +1,14 @@
1
+ //= require geoblacklight
2
+
3
+ describe('MetadataDownloadButton', function() {
4
+ describe('initialize', function() {
5
+ fixture.set('<button id="foo" data-ref-endpoint="http://testdomain" data-ref-download="#bar">test element</button><a href="http://testdomain" id="bar">another test element</a>');
6
+
7
+ it('creates a new instance and sets the download button @href value', function() {
8
+ var button = new GeoBlacklight.MetadataDownloadButton('#foo');
9
+ expect(button.$el.attr('id')).toBe('foo');
10
+ expect(button.$download.attr('id')).toBe('bar');
11
+ expect(button.$download.attr('href')).toBe('http://testdomain');
12
+ });
13
+ });
14
+ });
@@ -0,0 +1,32 @@
1
+ // Teaspoon includes some support files, but you can use anything from your own support path too.
2
+ // require support/jasmine-jquery-1.7.0
3
+ // require support/jasmine-jquery-2.0.0
4
+ // require support/jasmine-jquery-2.1.0
5
+ // require support/sinon
6
+ // require support/your-support-file
7
+ //
8
+ // PhantomJS (Teaspoons default driver) doesn't have support for Function.prototype.bind, which has caused confusion.
9
+ // Use this polyfill to avoid the confusion.
10
+ //= require support/bind-poly
11
+ //
12
+ // You can require your own javascript files here. By default this will include everything in application, however you
13
+ // may get better load performance if you require the specific files that are being used in the spec that tests them.
14
+ //= require application
15
+ //
16
+ // Deferring execution
17
+ // If you're using CommonJS, RequireJS or some other asynchronous library you can defer execution. Call
18
+ // Teaspoon.execute() after everything has been loaded. Simple example of a timeout:
19
+ //
20
+ // Teaspoon.defer = true
21
+ // setTimeout(Teaspoon.execute, 1000)
22
+ //
23
+ // Matching files
24
+ // By default Teaspoon will look for files that match _spec.{js,js.coffee,.coffee}. Add a filename_spec.js file in your
25
+ // spec path and it'll be included in the default suite automatically. If you want to customize suites, check out the
26
+ // configuration in teaspoon_env.rb
27
+ //
28
+ // Manifest
29
+ // If you'd rather require your spec files manually (to control order for instance) you can disable the suite matcher in
30
+ // the configuration and use this file as a manifest.
31
+ //
32
+ // For more information: http://github.com/modeset/teaspoon
@@ -0,0 +1,12 @@
1
+ //= require geoblacklight
2
+
3
+ 'use strict';
4
+
5
+ describe('GeoBlacklight.Util', function() {
6
+ describe('linkify', function() {
7
+ it('returns a linkified string', function() {
8
+ expect(GeoBlacklight.Util.linkify('http://www.example.com'))
9
+ .toEqual("<a href='http://www.example.com'>http://www.example.com</a>");
10
+ });
11
+ });
12
+ });
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::BoundingBox do
4
+ describe '#initialize' do
5
+ it 'handles multiple input types as arguments' do
6
+ expect(described_class.new('1', '1', '1', '1')).to be_an described_class
7
+ expect(described_class.new(1, 2, 3, 3)).to be_an described_class
8
+ expect(described_class.new(1.1, 2.1, 3.1, 3.1)).to be_an described_class
9
+ end
10
+ end
11
+ describe '#to_envelope' do
12
+ let(:example_box) { described_class.new(-160, -80, 120, 70) }
13
+ it 'creates an envelope syntax version of the bounding box' do
14
+ expect(example_box.to_envelope).to eq 'ENVELOPE(-160, 120, 70, -80)'
15
+ end
16
+ end
17
+ describe '#from_rectangle' do
18
+ let(:example_box) { described_class.from_rectangle('-160 -80 120 70') }
19
+ it 'parses and creates a Geoblacklight::BoundingBox from a Solr lat-lon' do
20
+ expect(example_box).to be_an described_class
21
+ expect(example_box.to_envelope).to eq 'ENVELOPE(-160, 120, 70, -80)'
22
+ end
23
+ it 'checks for valididity' do
24
+ expect { described_class.from_rectangle('-160 -80 120') }.to raise_error Geoblacklight::Exceptions::WrongBoundingBoxFormat
25
+ end
26
+ end
27
+ end
@@ -0,0 +1 @@
1
+ require 'spec_helper'
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::DocumentPresenter do
4
+ # Please see https://github.com/projectblacklight/blacklight/blob/v6.15.0/spec/presenters/index_presenter_spec.rb#L4
5
+ let(:request_context) { double(document_index_view_type: 'list') }
6
+ let(:blacklight_config) do
7
+ Blacklight::Configuration.new.configure do |config|
8
+ config.add_index_field 'layer_id_s'
9
+ config.add_index_field 'index_display'
10
+ config.add_index_field 'period'
11
+ config.add_index_field 'multi_display'
12
+ end
13
+ end
14
+ let(:solr_fields) { Settings.FIELDS }
15
+ subject { presenter }
16
+ let(:presenter) do
17
+ described_class.new(document, request_context, blacklight_config)
18
+ end
19
+
20
+ let(:document) do
21
+ SolrDocument.new(
22
+ id: 1,
23
+ layer_id_s: 'druid:abc123',
24
+ non_index_field: 'do not render',
25
+ period: 'Ends with period.',
26
+ multi_display: %w(blue blah)
27
+ )
28
+ end
29
+
30
+ describe '#index_fields_display' do
31
+ let(:rendered_index_text) { subject.index_fields_display }
32
+ let(:multi_valued_text) { document['multi_display'].join(' and ') }
33
+ let(:combined_fields) { document['layer_id_s'] + '. ' + document['period'] }
34
+
35
+ context 'with multi-valued field' do
36
+ it 'each value is separated by comma' do
37
+ expect(rendered_index_text).to include(multi_valued_text)
38
+ end
39
+ end
40
+ context 'with document fields not configured as index field' do
41
+ it 'does not render' do
42
+ expect(rendered_index_text).not_to include(document['non_index_field'])
43
+ end
44
+ end
45
+ context 'with multiple document index fields present' do
46
+ it 'separates fields by period followed by a space' do
47
+ expect(rendered_index_text).to include(combined_fields)
48
+ end
49
+ context 'with index field ending in period' do
50
+ it 'renders only 1 period' do
51
+ expect(rendered_index_text).to include(document['period'] + ' ')
52
+ end
53
+ end
54
+ end
55
+ context 'with document empty configured index field' do
56
+ it 'does not render a period followed by a space' do
57
+ expect(rendered_index_text).not_to include('. .')
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::GeojsonDownload do
4
+ let(:document) { SolrDocument.new(layer_slug_s: 'test', solr_wfs_url: 'http://www.example.com/wfs', layer_id_s: 'stanford-test', solr_geom: 'ENVELOPE(-180, 180, 90, -90)') }
5
+ let(:download) { described_class.new(document) }
6
+ describe '#initialize' do
7
+ it 'initializes as a GeojsonDownload object with specific options' do
8
+ expect(download).to be_an described_class
9
+ options = download.instance_variable_get(:@options)
10
+ expect(options[:content_type]).to eq 'application/json'
11
+ expect(options[:request_params][:typeName]).to eq 'stanford-test'
12
+ end
13
+ it 'merges custom options' do
14
+ download = described_class.new(document, timeout: 33)
15
+ options = download.instance_variable_get(:@options)
16
+ expect(options[:timeout]).to eq 33
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::GeotiffDownload do
4
+ let(:document) { SolrDocument.new(layer_slug_s: 'test', layer_id_s: 'stanford-test', solr_geom: 'ENVELOPE(-180, 180, 90, -90)') }
5
+ let(:download) { described_class.new(document) }
6
+ describe '#initialize' do
7
+ it 'initializes as a GeotiffDownload object with specific options' do
8
+ expect(download).to be_an described_class
9
+ options = download.instance_variable_get(:@options)
10
+ expect(options[:content_type]).to eq 'image/geotiff'
11
+ expect(options[:request_params][:layers]).to eq 'stanford-test'
12
+ expect(options[:reflect]).to be_truthy
13
+ end
14
+ it 'merges custom options' do
15
+ download = described_class.new(document, timeout: 33)
16
+ options = download.instance_variable_get(:@options)
17
+ expect(options[:timeout]).to eq 33
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::HglDownload do
4
+ subject(:download) { described_class.new(document, options) }
5
+
6
+ let(:document) { SolrDocument.new(layer_slug_s: 'test', layer_id_s: 'cite:harvard-test') }
7
+ let(:options) { 'foo@example.com' }
8
+
9
+ describe '#initialize' do
10
+ it 'initializes as an HglDownload object with specific options' do
11
+ expect(download).to be_an described_class
12
+ options = download.instance_variable_get(:@options)
13
+ expect(options[:request_params]['LayerName']).to eq 'harvard-test'
14
+ expect(options[:request_params]['UserEmail']).to eq 'foo@example.com'
15
+ end
16
+ it 'merges custom options' do
17
+ download = described_class.new(document, 'foo@example.com', timeout: 33)
18
+ options = download.instance_variable_get(:@options)
19
+ expect(options[:timeout]).to eq 33
20
+ end
21
+ end
22
+
23
+ describe '#get' do
24
+ let(:references_field) { Settings.FIELDS.REFERENCES }
25
+ let(:references_values) do
26
+ {
27
+ 'http://www.opengis.net/def/serviceType/ogc/wms' => 'http://www.example.com/wms'
28
+ }
29
+ end
30
+ let(:options) do
31
+ {
32
+ service_type: 'wms',
33
+ references_field => references_values.to_json
34
+ }
35
+ end
36
+ let(:faraday_connection) { instance_double(Faraday::Connection) }
37
+ let(:faraday_response) { instance_double(Faraday::Response) }
38
+ let(:faraday_request) { instance_double(Faraday::Request) }
39
+ let(:faraday_request_options) { OpenStruct.new(timeout: nil, open_timeout: nil) }
40
+ let(:reference) { instance_double(Geoblacklight::Reference) }
41
+ # Methods cannot be stubbed which are automatically generated from Hash keys
42
+ let(:references) { double('references') }
43
+ let(:endpoint) { 'http://www.example.com/wms' }
44
+
45
+ before do
46
+ allow(reference).to receive(:endpoint).and_return(endpoint)
47
+ allow(references).to receive(:hgl).and_return(reference)
48
+ allow(document).to receive(:references).and_return(references)
49
+ allow(faraday_request).to receive(:params=)
50
+ allow(faraday_request).to receive(:options).and_return(faraday_request_options)
51
+ end
52
+
53
+ it 'downloads the file and generates a message for the client' do
54
+ allow(faraday_connection).to receive(:get).and_yield(faraday_request).and_return(faraday_response)
55
+ allow(Faraday).to receive(:new).with(url: endpoint).and_return(faraday_connection)
56
+
57
+ expect(download.get).to eq faraday_response
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::KmzDownload do
4
+ let(:document) { SolrDocument.new(layer_slug_s: 'test', solr_wfs_url: 'http://www.example.com/wfs', layer_id_s: 'stanford-test', solr_geom: 'ENVELOPE(-180, 180, 90, -90)') }
5
+ let(:download) { described_class.new(document) }
6
+ describe '#initialize' do
7
+ it 'initializes as a KmzDownload object with specific options' do
8
+ expect(download).to be_an described_class
9
+ options = download.instance_variable_get(:@options)
10
+ expect(options[:content_type]).to eq 'application/vnd.google-earth.kmz'
11
+ expect(options[:request_params][:layers]).to eq 'stanford-test'
12
+ expect(options[:request_params][:bbox]).to eq '-180, -90, 180, 90'
13
+ end
14
+ it 'merges custom options' do
15
+ download = described_class.new(document, timeout: 33)
16
+ options = download.instance_variable_get(:@options)
17
+ expect(options[:timeout]).to eq 33
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::ShapefileDownload do
4
+ let(:document) { SolrDocument.new(layer_slug_s: 'test', solr_wfs_url: 'http://www.example.com/wfs', layer_id_s: 'stanford-test', solr_geom: 'ENVELOPE(-180, 180, 90, -90)') }
5
+ let(:download) { described_class.new(document) }
6
+ describe '#initialize' do
7
+ it 'initializes as a ShapefileDownload object with specific options' do
8
+ expect(download).to be_an described_class
9
+ options = download.instance_variable_get(:@options)
10
+ expect(options[:content_type]).to eq 'application/zip'
11
+ expect(options[:request_params][:typeName]).to eq 'stanford-test'
12
+ end
13
+ it 'merges custom options' do
14
+ download = described_class.new(document, timeout: 33)
15
+ options = download.instance_variable_get(:@options)
16
+ expect(options[:timeout]).to eq 33
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,177 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::Download do
4
+ subject(:download) { described_class.new(document, options) }
5
+
6
+ let(:faraday_connection) { instance_double(Faraday::Connection) }
7
+ let(:faraday_response) { instance_double(Faraday::Response) }
8
+ let(:references_field) { Settings.FIELDS.REFERENCES }
9
+ let(:document) { SolrDocument.new(layer_slug_s: 'test', references_field => { 'http://www.opengis.net/def/serviceType/ogc/wms' => 'http://www.example.com/wms' }.to_json) }
10
+ let(:options) { { type: 'shapefile', extension: 'zip', service_type: 'wms', content_type: 'application/zip' } }
11
+
12
+ describe '#initialize' do
13
+ it 'initializes as a Download object' do
14
+ expect(download).to be_a described_class
15
+ end
16
+ end
17
+
18
+ describe '#downloadable?' do
19
+ before do
20
+ allow(document).to receive(:downloadable?).and_return(true)
21
+ end
22
+ it 'determines whether or not the resource can be downloaded' do
23
+ expect(download.downloadable?).to be true
24
+ end
25
+ end
26
+
27
+ describe '#file_name' do
28
+ it 'gives the file name with path and extension' do
29
+ expect(download.file_name).to eq 'test-shapefile.zip'
30
+ end
31
+ end
32
+ describe '#file_path' do
33
+ it 'returns the path with name and extension' do
34
+ expect(download.class.file_path).to eq "#{Rails.root}/tmp/cache/downloads"
35
+ end
36
+ it 'is configurable' do
37
+ expect(Settings).to receive(:DOWNLOAD_PATH).and_return('configured/path')
38
+ expect(download.class.file_path).to eq 'configured/path'
39
+ end
40
+ end
41
+ describe '#download_exists?' do
42
+ it 'returns false if file does not exist' do
43
+ expect(File).to receive(:file?).and_return(false)
44
+ expect(download.download_exists?).to be_falsey
45
+ end
46
+ it 'returns true if file does not exist' do
47
+ expect(File).to receive(:file?).and_return(true)
48
+ expect(download.download_exists?).to be_truthy
49
+ end
50
+ end
51
+ describe '#get' do
52
+ before do
53
+ allow(File).to receive(:file?).and_return(true)
54
+ end
55
+
56
+ it 'returns filename if download exists' do
57
+ expect(download.get).to eq download.file_name
58
+ end
59
+
60
+ context 'when the file has not already been downloaded' do
61
+ let(:connection) { instance_double(Faraday::Connection) }
62
+ let(:response) { instance_double(Faraday::Response) }
63
+
64
+ before do
65
+ allow(File).to receive(:file?).and_return(false)
66
+ allow(connection).to receive(:get).and_return(object: 'file')
67
+ allow(Faraday).to receive(:new).and_return(connection)
68
+ end
69
+
70
+ it 'calls create_download_file if it does not exist' do
71
+ allow(File).to receive(:open).with("#{download.file_path_and_name}.tmp", 'wb').and_return('')
72
+ allow(File).to receive(:rename)
73
+
74
+ expect(download.get).to eq 'test-shapefile.zip'
75
+ end
76
+ end
77
+ end
78
+ describe '#create_download_file' do
79
+ let(:file) { instance_double(File) }
80
+ let(:shapefile) { OpenStruct.new(headers: { 'content-type' => 'application/zip' }) }
81
+ let(:connection) { instance_double(Faraday::Connection) }
82
+ let(:response) { instance_double(Faraday::Response) }
83
+
84
+ before do
85
+ allow(file).to receive(:write)
86
+ allow(Faraday).to receive(:new).and_return(connection)
87
+ allow(connection).to receive(:get).and_return(shapefile)
88
+ end
89
+
90
+ it 'creates the file, write it, and then rename from tmp if everything is ok' do
91
+ allow(File).to receive(:open).with("#{download.file_path_and_name}.tmp", 'wb').and_yield(file).and_return('')
92
+ allow(File).to receive(:rename)
93
+
94
+ expect(download.create_download_file).to eq download.file_name
95
+ end
96
+
97
+ context 'when the file received is not of the type requested' do
98
+ let(:bad_file) { OpenStruct.new(headers: { 'content-type' => 'bad/file' }) }
99
+
100
+ before do
101
+ allow(connection).to receive(:get).and_return(bad_file)
102
+ end
103
+
104
+ it 'creates the file in fs and delete it if the content headers are not correct' do
105
+ allow(File).to receive(:delete).with("#{download.file_path_and_name}.tmp").and_return(nil)
106
+
107
+ expect { download.create_download_file }.to raise_error(Geoblacklight::Exceptions::ExternalDownloadFailed, 'Wrong download type')
108
+ end
109
+ end
110
+
111
+ context 'when the MIME type has more information encoded' do
112
+ let(:geojson) { OpenStruct.new(headers: { 'content-type' => 'application/json;charset=utf-8' }) }
113
+
114
+ before do
115
+ allow(connection).to receive(:get).and_return(geojson)
116
+ end
117
+
118
+ it 'accepts response MIME type that is more complex than requested' do
119
+ allow(File).to receive(:open).with("#{download.file_path_and_name}.tmp", 'wb').and_return('')
120
+ allow(File).to receive(:rename)
121
+
122
+ expect(download.create_download_file).to eq download.file_name
123
+ end
124
+ end
125
+ end
126
+ describe '#initiate_download' do
127
+ let(:faraday_request) { instance_double(Faraday::Request) }
128
+ let(:faraday_request_options) { OpenStruct.new(timeout: nil, open_timeout: nil) }
129
+
130
+ before do
131
+ allow(faraday_request).to receive(:params=)
132
+ allow(faraday_request).to receive(:options).and_return(faraday_request_options)
133
+ end
134
+
135
+ it 'request download from server' do
136
+ allow(faraday_connection).to receive(:get).and_yield(faraday_request).and_return(faraday_response)
137
+ allow(Faraday).to receive(:new).with(url: 'http://www.example.com/wms').and_return(faraday_connection)
138
+
139
+ expect(download.initiate_download).to eq faraday_response
140
+ end
141
+
142
+ it 'raises Geoblacklight::Exceptions::ExternalDownloadFailed with a connection failure' do
143
+ expect(faraday_connection).to receive(:url_prefix).and_return 'http://www.example.com/wms'
144
+ expect(faraday_connection).to receive(:get).and_raise(Faraday::ConnectionFailed.new('Failed'))
145
+ expect(Faraday).to receive(:new).with(url: 'http://www.example.com/wms').and_return(faraday_connection)
146
+ expect { download.initiate_download }.to raise_error(Geoblacklight::Exceptions::ExternalDownloadFailed)
147
+ end
148
+
149
+ it 'raises Geoblacklight::Exceptions::ExternalDownloadFailed with a connection timout' do
150
+ expect(faraday_connection).to receive(:url_prefix).and_return 'http://www.example.com/wms'
151
+ expect(faraday_connection).to receive(:get).and_raise(Faraday::TimeoutError)
152
+ expect(Faraday).to receive(:new).with(url: 'http://www.example.com/wms').and_return(faraday_connection)
153
+ expect { download.initiate_download }.to raise_error(Geoblacklight::Exceptions::ExternalDownloadFailed)
154
+ end
155
+ end
156
+ describe '#url_with_params' do
157
+ let(:options) do
158
+ {
159
+ service_type: 'wms',
160
+ request_params: {
161
+ service: 'wfs',
162
+ version: '2.0.0',
163
+ request: 'GetFeature',
164
+ srsName: 'EPSG:4326',
165
+ outputformat: 'SHAPE-ZIP',
166
+ typeName: ''
167
+ }
168
+ }
169
+ end
170
+
171
+ it 'creates a download url with params' do
172
+ expect(download.url_with_params).to eq 'http://www.example.com/wms/?ser' \
173
+ 'vice=wfs&version=2.0.0&request=GetFeature&srsName=EPSG%3A4326&output' \
174
+ 'format=SHAPE-ZIP&typeName='
175
+ end
176
+ end
177
+ end