# frozen_string_literal: true require "spec_helper" describe GeoblacklightHelper, type: :helper do include BlacklightHelper include ActionView::Helpers::UrlHelper include ActionView::Helpers::TranslationHelper describe "#geoblacklight_icon" do it "supports in use cases" do { "Paper map" => "paper-map", "Michigan State" => "michigan-state", "CD ROM" => "cd-rom", "Lewis & Clark" => "lewis-clark" }.each_key do |key| html = Capybara.string(geoblacklight_icon(key)) expect(html).to have_xpath "//*[local-name() = 'svg']" end end it "handles nil values" do html = Capybara.string(geoblacklight_icon(nil)) expect(html).to have_css ".icon-missing" end end describe "#proper_case_format" do it "returns a properly cased format" do expect(proper_case_format("GEOJSON")).to eq "GeoJSON" end end describe "#download_text" do it "returns download text concatenated with proper case format" do expect(download_text("GEOJSON")).to eq "Original GeoJSON" end end describe "#download_text" do it "returns download text concatenated with proper case format" do expect(download_text("GEOJSON")).to eq "Original GeoJSON" end end describe "#download_link_file" do let(:label) { "Test Link Text" } let(:id) { "test-id" } let(:url) { "http://example.com/urn:hul.harvard.edu:HARVARD.SDE2.TG10USAIANNH/data.zip" } it "generates a link to download the original file" do expect(download_link_file(label, id, url)).to eq 'Test Link Text' end end describe "#download_link_hgl" do let(:text) { "Test Link Text" } let(:document) { instance_double(SolrDocument) } before do allow(document).to receive(:id).and_return("test-id") allow(document).to receive(:to_s).and_return("test-id") end it "generates a link to the HGL route" do expect(download_link_hgl(text, document)).to eq 'Test Link Text' end end describe "#download_link_iiif" do let(:references_field) { Settings.FIELDS.REFERENCES } let(:document_attributes) do { references_field => { "http://iiif.io/api/image" => "https://example.edu/image/info.json" }.to_json } end let(:document) { SolrDocument.new(document_attributes) } before do allow_any_instance_of(Geoblacklight::Reference).to receive(:to_hash).and_return(iiif: "https://example.edu/image/info.json") end it "generates a link to download the JPG file from the IIIF server" do assign(:document, document) expect(helper.download_link_iiif).to eq 'Original JPG' end end describe "#download_link_generated" do let(:download_type) { "SHAPEFILE" } let(:document) { instance_double(SolrDocument) } before do allow(document).to receive(:id).and_return("test-id") allow(document).to receive(:to_s).and_return("test-id") end it "generates a link to download the JPG file from the IIIF server" do # Stub I18n to ensure the link can be customized via `export_` labels. allow(helper).to receive(:t).and_call_original allow(helper).to receive(:t).with("geoblacklight.download.export_shapefile_link").and_return("Shapefile Export Customization") expect(helper.download_link_generated(download_type, document)).to eq 'Export Shapefile Export Customization' end end describe "#geoblacklight_basemap" do let(:blacklight_config) { double } it "without configuration" do expect(blacklight_config).to receive(:basemap_provider).and_return(nil) expect(geoblacklight_basemap).to eq "positron" end it "with custom configuration" do expect(blacklight_config).to receive(:basemap_provider).and_return("positron") expect(geoblacklight_basemap).to eq "positron" end end describe "#iiif_jpg_url" do let(:document) { SolrDocument.new(document_attributes) } let(:references_field) { Settings.FIELDS.REFERENCES } let(:document_attributes) do { references_field => { "http://iiif.io/api/image" => "https://example.edu/image/info.json" }.to_json } end it "returns JPG download URL when given URL to a IIIF info.json" do assign(:document, document) expect(helper.iiif_jpg_url).to eq "https://example.edu/image/full/full/0/default.jpg" end end describe "#snippit" do let(:document) { SolrDocument.new(document_attributes) } let(:references_field) { Settings.FIELDS.REFERENCES } context "as a String" do let(:document_attributes) do { value: "This is a really long string that should get truncated when it gets rendered" \ "in the index view to give a brief description of the contents of a particular document" \ "indexed into Solr" } end it "truncates longer strings to 150 characters" do expect(helper.snippit(document).length).to eq 150 end it "truncated string ends with ..." do expect(helper.snippit(document)[-3..]).to eq "..." end end context "as an Array" do let(:document_attributes) do { value: ["This is a really long string that should get truncated when it gets rendered" \ "in the index view to give a brief description of the contents of a particular document" \ "indexed into Solr"] } end it "truncates longer strings to 150 characters" do expect(helper.snippit(document).length).to eq 150 end it "truncated string ends with ..." do expect(helper.snippit(document)[-3..]).to eq "..." end end context "as a multivalued Array" do let(:document_attributes) do { value: %w[short description] } end it "uses both values" do expect(helper.snippit(document)).to eq "short description" end it "does not truncate" do expect(helper.snippit(document)[-3..]).not_to eq "..." end end end describe "#render_web_services" do let(:reference) { instance_double(Geoblacklight::Reference, type: "wms") } it "with a reference to a defined partial" do expect(helper).to receive(:render) .with(partial: "web_services_wms", locals: {reference: reference}) helper.render_web_services(reference) end context "when the partial is missing" do let(:reference) { instance_double(Geoblacklight::Reference, type: "iiif") } it "with a reference to a missing partial" do expect(helper).to receive(:render) .with(partial: "web_services_iiif", locals: {reference: reference}) .and_raise ActionView::MissingTemplate.new({}, "", "", "", "") expect(helper).to receive(:render) .with(partial: "web_services_default", locals: {reference: reference}) helper.render_web_services(reference) end end end describe "#leaflet_options" do it "returns a hash of options for leaflet" do expect(leaflet_options[:VIEWERS][:WMS][:CONTROLS]).to eq(%w[Opacity Fullscreen]) end end describe "#render_value_as_truncate_abstract" do context "with multiple values" do let(:document) { SolrDocument.new(value: %w[short description]) } it "wraps in correct DIV class" do expect(helper.render_value_as_truncate_abstract(document)).to eq '