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,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::GeoblacklightHelperBehavior do
4
+ let(:dummy_class) do
5
+ Class.new.extend(described_class)
6
+ end
7
+ let(:presenter) { instance_double(MyPresenter, fake_name: 'druid:abc123') }
8
+
9
+ before do
10
+ class MyPresenter < Blacklight::ShowPresenter
11
+ def fake_name; end
12
+ end
13
+ end
14
+
15
+ describe '#geoblacklight_present' do
16
+ before do
17
+ expect(dummy_class).to receive(:presenter).and_return(presenter)
18
+ end
19
+ context 'as a Symbol' do
20
+ it 'calls defined presenter class' do
21
+ expect(dummy_class.geoblacklight_present(:fake_name)).to eq 'druid:abc123'
22
+ end
23
+ end
24
+ context 'as a String' do
25
+ it 'calls defined presenter class' do
26
+ expect(dummy_class.geoblacklight_present('fake_name')).to eq 'druid:abc123'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::ItemViewer do
4
+ let(:document) { SolrDocument.new(document_attributes) }
5
+ let(:document_attributes) { {} }
6
+ let(:references) { document.references }
7
+ let(:references_field) { Settings.FIELDS.REFERENCES }
8
+ let(:item_viewer) { described_class.new(references) }
9
+ describe 'viewer_preference' do
10
+ describe 'for no references' do
11
+ it 'returns nil' do
12
+ expect(item_viewer.viewer_preference).to be_nil
13
+ end
14
+ end
15
+ describe 'for wms reference' do
16
+ let(:document_attributes) do
17
+ {
18
+ references_field => {
19
+ 'http://www.opengis.net/def/serviceType/ogc/wms' => 'http://www.example.com/wms',
20
+ 'http://iiif.io/api/image' => 'http://www.example.com/iiif'
21
+ }.to_json
22
+ }
23
+ end
24
+ it 'wms if wms is present' do
25
+ expect(item_viewer.viewer_preference).to eq wms: 'http://www.example.com/wms'
26
+ end
27
+ end
28
+ describe 'for iiif only reference' do
29
+ let(:document_attributes) do
30
+ {
31
+ references_field => {
32
+ 'http://iiif.io/api/image' => 'http://www.example.com/iiif'
33
+ }.to_json
34
+ }
35
+ end
36
+ it 'returns iiif' do
37
+ expect(item_viewer.viewer_preference).to eq iiif: 'http://www.example.com/iiif'
38
+ end
39
+ end
40
+ describe 'for tiled map layer reference' do
41
+ let(:document_attributes) do
42
+ {
43
+ references_field => {
44
+ 'urn:x-esri:serviceType:ArcGIS#TiledMapLayer' => 'http://www.example.com/MapServer'
45
+ }.to_json
46
+ }
47
+ end
48
+ it 'returns mapservice' do
49
+ expect(item_viewer.viewer_preference).to eq tiled_map_layer: 'http://www.example.com/MapServer'
50
+ end
51
+ end
52
+ context 'index map' do
53
+ let(:document_attributes) do
54
+ {
55
+ references_field => {
56
+ 'https://openindexmaps.org' => 'http://www.example.com/index_map'
57
+ }.to_json
58
+ }
59
+ end
60
+ it { expect(item_viewer.viewer_preference).to eq index_map: 'http://www.example.com/index_map' }
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,157 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::Metadata::Base do
4
+ subject(:metadata) { described_class.new(reference) }
5
+
6
+ let(:connection) { instance_double(Faraday::Connection) }
7
+ let(:response) { instance_double(Faraday::Response) }
8
+ let(:reference) do
9
+ Geoblacklight::Reference.new(['http://www.loc.gov/mods/v3', 'http://purl.stanford.edu/cg357zz0321.mods'])
10
+ end
11
+
12
+ before do
13
+ allow(Faraday).to receive(:new).with(url: 'http://purl.stanford.edu/cg357zz0321.mods').and_return(connection)
14
+ end
15
+
16
+ describe '#document' do
17
+ context 'with valid XML data at an endpoint URL' do
18
+ before do
19
+ allow(response).to receive(:status).and_return(200)
20
+ allow(response).to receive(:body).and_return('<test>data</test>')
21
+ allow(connection).to receive(:get).and_return(response)
22
+ end
23
+
24
+ it 'returns an XML Document containing the payload from an endpoint url' do
25
+ expect(metadata.document).to be_a Nokogiri::XML::Document
26
+ end
27
+ end
28
+
29
+ context 'when attempts to connect to an endpoint URL fail' do
30
+ subject { metadata.document }
31
+
32
+ before do
33
+ allow(connection).to receive(:get).and_raise(Faraday::ConnectionFailed, 'test connection failures')
34
+ end
35
+
36
+ it 'returns nil when a connection error' do
37
+ expect(subject).to be_a Nokogiri::XML::Document
38
+ expect(subject.children.empty?).to be true
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'when attempts to connect to an endpoint URL raise an OpenSSL error' do
44
+ subject { metadata.document }
45
+
46
+ before do
47
+ expect(Geoblacklight.logger).to receive(:error).with(/dh key too small/)
48
+ allow(connection).to receive(:get).and_raise(OpenSSL::SSL::SSLError, 'dh key too small')
49
+ end
50
+
51
+ it 'returns nil when a connection error' do
52
+ expect(subject).to be_a Nokogiri::XML::Document
53
+ expect(subject.children.empty?).to be true
54
+ end
55
+ end
56
+
57
+ describe '#blank?' do
58
+ before do
59
+ allow(Faraday).to receive(:new).with(url: 'http://purl.stanford.edu/cg357zz0321.mods').and_return(connection)
60
+ end
61
+
62
+ context 'with valid XML data at an endpoint URL' do
63
+ before do
64
+ allow(response).to receive(:status).and_return(200)
65
+ allow(response).to receive(:body).and_return('<test>data</test>')
66
+ allow(connection).to receive(:get).and_return(response)
67
+ end
68
+
69
+ it 'returns false' do
70
+ expect(metadata.blank?).to be false
71
+ end
72
+ end
73
+
74
+ context 'when attempts to connect to an endpoint URL fail' do
75
+ before do
76
+ allow(connection).to receive(:get).and_raise(Faraday::ConnectionFailed, 'test connection failures')
77
+ end
78
+
79
+ it 'returns true' do
80
+ expect(metadata.blank?).to be true
81
+ end
82
+ end
83
+ end
84
+
85
+ describe '#endpoint' do
86
+ before do
87
+ allow(Faraday).to receive(:new).with(url: 'http://purl.stanford.edu/cg357zz0321.mods').and_return(connection)
88
+ allow(response).to receive(:status).and_return(200)
89
+ allow(response).to receive(:body).and_return('<test>data</test>')
90
+ allow(connection).to receive(:get).and_return(response)
91
+ end
92
+
93
+ it 'returns the URI' do
94
+ expect(metadata.endpoint).to eq 'http://purl.stanford.edu/cg357zz0321.mods'
95
+ end
96
+ end
97
+
98
+ describe '#to_html' do
99
+ let(:ns) { 'http://www.opengis.net/cat/csw/csdgm' }
100
+ let(:url) { 'https://raw.githubusercontent.com/OpenGeoMetadata/edu.tufts/master/165/242/110/132/fgdc.xml' }
101
+ let(:reference) do
102
+ Geoblacklight::Reference.new([ns, url])
103
+ end
104
+ let(:connection) { instance_double(Faraday::Connection) }
105
+ let(:response) { instance_double(Faraday::Response) }
106
+ let(:geocombine_metadata) { instance_double(GeoCombine::Iso19139) }
107
+ let(:html) { '<!DOCTYPE html><html></html>' }
108
+ let(:status) { 200 }
109
+
110
+ before do
111
+ allow(GeoCombine::Metadata).to receive(:new).and_return(geocombine_metadata)
112
+
113
+ allow(connection).to receive(:use)
114
+ allow(connection).to receive(:adapter)
115
+ allow(Faraday).to receive(:new).and_yield(connection).and_return(connection)
116
+
117
+ allow(response).to receive(:status).and_return(status)
118
+ allow(response).to receive(:body).and_return('<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE metadata SYSTEM "http://www.fgdc.gov/metadata/fgdc-std-001-1998.dtd"><metadata></metadata>')
119
+ end
120
+
121
+ it 'retrieves the metadata and transforms it into the HTML' do
122
+ allow(geocombine_metadata).to receive(:to_html).and_return(html)
123
+ allow(connection).to receive(:get).and_return(response)
124
+
125
+ expect(metadata.to_html).to eq html
126
+ end
127
+
128
+ context 'when the metadata resource cannot be found' do
129
+ let(:status) { 404 }
130
+
131
+ before do
132
+ allow(Geoblacklight.logger).to receive(:error).with("Could not reach #{url}")
133
+ end
134
+
135
+ it 'logs an error and returns an empty String' do
136
+ allow(geocombine_metadata).to receive(:to_html).and_return('')
137
+ allow(connection).to receive(:get).and_return(response)
138
+
139
+ expect(Geoblacklight.logger).to receive(:error)
140
+ expect(metadata.to_html).to be_empty
141
+ end
142
+ end
143
+
144
+ context 'when requesting the metadata resource times out' do
145
+ before do
146
+ allow(geocombine_metadata).to receive(:to_html).and_return('')
147
+ allow(connection).to receive(:get).and_raise(Faraday::TimeoutError)
148
+ allow(Geoblacklight.logger).to receive(:error).with('#<Faraday::TimeoutError #<Faraday::TimeoutError: timeout>>')
149
+ end
150
+
151
+ it 'logs an error and returns an empty String' do
152
+ expect(Geoblacklight.logger).to receive(:error)
153
+ expect(metadata.to_html).to be_empty
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::Metadata::Html do
4
+ let(:url) { 'https://s3.amazonaws.com/cugir-data/00/77/41/fgdc.html' }
5
+ let(:metadata) do
6
+ described_class.new(
7
+ Geoblacklight::Reference.new(
8
+ ['http://www.w3.org/1999/xhtml', url]
9
+ )
10
+ )
11
+ end
12
+
13
+ describe '#transform' do
14
+ it 'renders an iframe with the html endpoint' do
15
+ expect(metadata.transform).to include('iframe', url)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::Metadata do
4
+ describe '.instance' do
5
+ let(:reference) { instance_double(Geoblacklight::Reference) }
6
+ context 'with an FGDC metadata reference' do
7
+ before do
8
+ allow(reference).to receive(:type).and_return('fgdc')
9
+ end
10
+ it 'constructs an Geoblacklight::Metadata::Fgdc instance' do
11
+ expect(described_class.instance(reference)).to be_a Geoblacklight::Metadata::Fgdc
12
+ end
13
+ end
14
+
15
+ context 'with an ISO19139 metadata reference' do
16
+ before do
17
+ allow(reference).to receive(:type).and_return('iso19139')
18
+ end
19
+ it 'constructs an Geoblacklight::Metadata::Iso19139 instance' do
20
+ expect(described_class.instance(reference)).to be_a Geoblacklight::Metadata::Iso19139
21
+ end
22
+ end
23
+
24
+ context 'with an html metadata reference' do
25
+ before do
26
+ allow(reference).to receive(:type).and_return('html')
27
+ end
28
+ it 'constructs an Geoblacklight::Metadata::Html instance' do
29
+ expect(described_class.instance(reference)).to be_a Geoblacklight::Metadata::Html
30
+ end
31
+ end
32
+
33
+ context 'with another metadata reference' do
34
+ before do
35
+ allow(reference).to receive(:type).and_return('unsupported')
36
+ end
37
+ it 'constructs an Geoblacklight::Metadata::Base instance' do
38
+ expect(described_class.instance(reference)).to be_a Geoblacklight::Metadata::Base
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::MetadataTransformer::Base do
4
+ describe '.new' do
5
+ it 'raises an error for empty XML' do
6
+ expect { described_class.new(nil) }.to raise_error Geoblacklight::MetadataTransformer::EmptyMetadataError
7
+ end
8
+ end
9
+
10
+ context 'with metadata types without XSL Stylesheets' do
11
+ let(:metadata) { instance_double(GeoCombine::Metadata) }
12
+ subject { described_class.new(metadata) }
13
+ describe '#transform' do
14
+ before do
15
+ allow(metadata).to receive(:to_html).and_raise(NoMethodError, 'undefined method `to_html\'')
16
+ end
17
+ it 'raises a transform error' do
18
+ expect { subject.transform }.to raise_error Geoblacklight::MetadataTransformer::TransformError, /undefined method `to_html'/
19
+ end
20
+ end
21
+ end
22
+
23
+ context 'with metadata types with XSL Stylesheets but invalid HTML' do
24
+ let(:metadata) { instance_double(GeoCombine::Metadata) }
25
+ subject { described_class.new(metadata) }
26
+ describe '#transform' do
27
+ before do
28
+ allow(metadata).to receive(:to_html).and_return('<invalid-html></invalid-html>')
29
+ end
30
+ it 'raises a transform error' do
31
+ expect { subject.transform }.to raise_error Geoblacklight::MetadataTransformer::TransformError, 'Failed to extract the <body> child elements from the transformed metadata'
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::MetadataTransformer::Fgdc do
4
+ let(:fgdc_html) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'metadata', 'fgdc.html')) }
5
+ let(:metadata) { instance_double('Geoblacklight::Metadata::Fgdc') }
6
+ subject do
7
+ described_class.new(metadata)
8
+ end
9
+
10
+ describe '#transform' do
11
+ before do
12
+ allow(metadata).to receive(:blank?).and_return(false)
13
+ allow(metadata).to receive(:to_html).and_return(fgdc_html)
14
+ end
15
+
16
+ it 'transforms FGDC Documents in the XML into the HTML' do
17
+ transformed = Nokogiri::XML.fragment(subject.transform)
18
+ expect(transformed.at_xpath('.//h1').text.strip).to eq('Custom Link Sample')
19
+ expect(transformed.at_xpath('.//div/dl/dd/dl/dd/dl/dt').text).to eq('Originator')
20
+ expect(transformed.at_xpath('.//div/dl/dd/dl/dd/dl/dd').text.strip).to eq('Esri')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::MetadataTransformer::Iso19139 do
4
+ let(:iso_html) { File.read(File.join(Rails.root, 'spec', 'fixtures', 'metadata', 'iso.html')) }
5
+ let(:metadata) { instance_double('Geoblacklight::Metadata::Iso19139') }
6
+ subject do
7
+ described_class.new(metadata)
8
+ end
9
+
10
+ describe '#transform' do
11
+ before do
12
+ expect(metadata).to receive(:blank?).and_return(false)
13
+ expect(metadata).to receive(:to_html).and_return(iso_html)
14
+ end
15
+
16
+ it 'transforms ISO19139 Documents in the XML into the HTML' do
17
+ transformed = Nokogiri::XML.fragment(subject.transform)
18
+ expect(transformed.at_xpath('.//h1').text.strip).to eq('Abandoned Mine Land Inventory Polygons: Pennsylvania, 2016')
19
+ expect(transformed.at_xpath('(.//div)[1]/dl/dd/dl/dd/dl/dt').text).to eq('Title')
20
+ expect(transformed.at_xpath('(.//div)[1]/dl/dd/dl/dd/dl/dd').text.strip).to eq('Abandoned Mine Land Inventory Polygons: Pennsylvania, 2016')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe Geoblacklight::MetadataTransformer do
4
+ let(:klass) { instance_double(Class) }
5
+ before do
6
+ allow(metadata).to receive(:blank?).and_return(false)
7
+ allow(metadata).to receive(:class).and_return(klass)
8
+ end
9
+
10
+ describe '.instance' do
11
+ context 'with FGDC metadata' do
12
+ let(:metadata) { instance_double(Geoblacklight::Metadata::Fgdc) }
13
+ subject do
14
+ described_class.instance(metadata)
15
+ end
16
+
17
+ before do
18
+ allow(klass).to receive(:name).and_return('Geoblacklight::Metadata::Fgdc')
19
+ end
20
+
21
+ it 'initializes a Fgdc Object' do
22
+ expect(subject).to be_a Geoblacklight::MetadataTransformer::Fgdc
23
+ end
24
+ end
25
+
26
+ context 'with ISO19139 metadata' do
27
+ let(:metadata) { instance_double(Geoblacklight::Metadata::Iso19139) }
28
+ subject do
29
+ described_class.instance(metadata)
30
+ end
31
+
32
+ before do
33
+ allow(klass).to receive(:name).and_return('Geoblacklight::Metadata::Iso19139')
34
+ end
35
+
36
+ it 'initializes a Iso19139 Object' do
37
+ expect(subject).to be_a Geoblacklight::MetadataTransformer::Iso19139
38
+ end
39
+ end
40
+
41
+ context 'without a metadata type' do
42
+ let(:metadata) { instance_double(Geoblacklight::Metadata::Base) }
43
+ subject do
44
+ described_class.instance(metadata)
45
+ end
46
+
47
+ before do
48
+ allow(klass).to receive(:name).and_return('Geoblacklight::Metadata::Base')
49
+ end
50
+
51
+ it 'defaults to the BaseTransformer Class' do
52
+ expect(subject).to be_a Geoblacklight::MetadataTransformer::Base
53
+ end
54
+ end
55
+
56
+ context 'with an invalid metadata type' do
57
+ let(:metadata) { instance_double(Geoblacklight::Metadata::Base) }
58
+
59
+ before do
60
+ allow(klass).to receive(:name).and_return('Geoblacklight::Metadata::Invalid')
61
+ end
62
+
63
+ it 'raises a TypeError' do
64
+ expect { described_class.instance(metadata) }.to \
65
+ raise_error Geoblacklight::MetadataTransformer::TypeError, /Metadata type .+ is not supported/
66
+ end
67
+ end
68
+ end
69
+ end