newspaper_works 0.1.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.
- checksums.yaml +7 -0
- data/.fcrepo_wrapper +4 -0
- data/.gitignore +43 -0
- data/.rubocop.yml +143 -0
- data/.solr_wrapper +8 -0
- data/.travis.yml +50 -0
- data/Gemfile +47 -0
- data/LICENSE +203 -0
- data/README.md +159 -0
- data/Rakefile +38 -0
- data/app/actors/hyrax/actors/newspaper_article_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_container_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_issue_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_page_actor.rb +8 -0
- data/app/actors/hyrax/actors/newspaper_title_actor.rb +8 -0
- data/app/actors/newspaper_works/actors/newspaper_works_upload_actor.rb +88 -0
- data/app/assets/config/newspaper_works_manifest.js +2 -0
- data/app/assets/images/newspaper_works/.keep +0 -0
- data/app/assets/javascripts/newspaper_works/autocomplete_fix.js +33 -0
- data/app/assets/javascripts/newspaper_works/ocr_search.js.erb +6 -0
- data/app/assets/javascripts/newspaper_works/thumbnail_highlights.js.erb +102 -0
- data/app/assets/javascripts/newspaper_works.js +4 -0
- data/app/assets/stylesheets/newspaper_works/_issue_search.scss +13 -0
- data/app/assets/stylesheets/newspaper_works/_issues_calendar.scss +18 -0
- data/app/assets/stylesheets/newspaper_works/_newspaper_works.scss +4 -0
- data/app/assets/stylesheets/newspaper_works/_newspapers_search.scss +38 -0
- data/app/assets/stylesheets/newspaper_works/_search_results.scss +12 -0
- data/app/controllers/hyrax/newspaper_articles_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_containers_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_issues_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_pages_controller.rb +14 -0
- data/app/controllers/hyrax/newspaper_titles_controller.rb +13 -0
- data/app/controllers/newspaper_works/newspapers_controller.rb +117 -0
- data/app/controllers/newspaper_works/newspapers_search_controller.rb +26 -0
- data/app/forms/hyrax/newspaper_article_form.rb +11 -0
- data/app/forms/hyrax/newspaper_container_form.rb +11 -0
- data/app/forms/hyrax/newspaper_issue_form.rb +11 -0
- data/app/forms/hyrax/newspaper_page_form.rb +15 -0
- data/app/forms/hyrax/newspaper_title_form.rb +12 -0
- data/app/forms/newspaper_works/newspaper_core_form_data.rb +17 -0
- data/app/helpers/hyrax/newspaper_articles_helper.rb +5 -0
- data/app/helpers/hyrax/newspaper_containers_helper.rb +5 -0
- data/app/helpers/hyrax/newspaper_issues_helper.rb +5 -0
- data/app/helpers/hyrax/newspaper_pages_helper.rb +5 -0
- data/app/helpers/newspaper_works/application_helper.rb +5 -0
- data/app/helpers/newspaper_works/breadcrumb_helper.rb +92 -0
- data/app/helpers/newspaper_works/newspaper_works_helper_behavior.rb +103 -0
- data/app/helpers/newspaper_works/newspapers_helper.rb +5 -0
- data/app/indexers/concerns/newspaper_works/indexes_full_text.rb +17 -0
- data/app/indexers/concerns/newspaper_works/indexes_place_of_publication.rb +67 -0
- data/app/indexers/concerns/newspaper_works/indexes_publication_date_range.rb +35 -0
- data/app/indexers/concerns/newspaper_works/indexes_relationships.rb +125 -0
- data/app/indexers/newspaper_article_indexer.rb +16 -0
- data/app/indexers/newspaper_container_indexer.rb +18 -0
- data/app/indexers/newspaper_issue_indexer.rb +26 -0
- data/app/indexers/newspaper_page_indexer.rb +9 -0
- data/app/indexers/newspaper_title_indexer.rb +19 -0
- data/app/indexers/newspaper_works/newspaper_core_indexer.rb +21 -0
- data/app/jobs/newspaper_works/application_job.rb +4 -0
- data/app/jobs/newspaper_works/compose_issue_pdf_job.rb +13 -0
- data/app/jobs/newspaper_works/create_issue_pages_job.rb +19 -0
- data/app/mailers/newspaper_works/application_mailer.rb +8 -0
- data/app/models/concerns/newspaper_works/blacklight_iiif_search/annotation_behavior.rb +82 -0
- data/app/models/concerns/newspaper_works/blacklight_iiif_search/search_behavior.rb +27 -0
- data/app/models/concerns/newspaper_works/newspaper_core_metadata.rb +67 -0
- data/app/models/concerns/newspaper_works/place_of_publication_behavior.rb +15 -0
- data/app/models/concerns/newspaper_works/scanned_media_metadata.rb +43 -0
- data/app/models/concerns/newspaper_works/solr/document.rb +25 -0
- data/app/models/file_set.rb +10 -0
- data/app/models/newspaper_article.rb +158 -0
- data/app/models/newspaper_container.rb +86 -0
- data/app/models/newspaper_issue.rb +115 -0
- data/app/models/newspaper_page.rb +70 -0
- data/app/models/newspaper_title.rb +111 -0
- data/app/models/newspaper_works/application_record.rb +6 -0
- data/app/models/newspaper_works/derivative_attachment.rb +8 -0
- data/app/models/newspaper_works/ingest_file_relation.rb +14 -0
- data/app/presenters/hyrax/newspaper_article_presenter.rb +38 -0
- data/app/presenters/hyrax/newspaper_container_presenter.rb +11 -0
- data/app/presenters/hyrax/newspaper_issue_presenter.rb +62 -0
- data/app/presenters/hyrax/newspaper_page_presenter.rb +72 -0
- data/app/presenters/hyrax/newspaper_title_presenter.rb +86 -0
- data/app/presenters/newspaper_works/iiif_manifest_presenter_behavior.rb +29 -0
- data/app/presenters/newspaper_works/issue_info_presenter.rb +29 -0
- data/app/presenters/newspaper_works/newspaper_core_presenter.rb +9 -0
- data/app/presenters/newspaper_works/persistent_url_presenter_behavior.rb +16 -0
- data/app/presenters/newspaper_works/place_of_publication_presenter_behavior.rb +8 -0
- data/app/presenters/newspaper_works/scanned_media_presenter.rb +7 -0
- data/app/presenters/newspaper_works/title_info_presenter.rb +13 -0
- data/app/search_builders/concerns/newspaper_works/exclude_models.rb +16 -0
- data/app/search_builders/concerns/newspaper_works/highlight_search_params.rb +14 -0
- data/app/search_builders/newspaper_works/newspapers_search_builder.rb +26 -0
- data/app/services/hyrax/article_genre_service.rb +9 -0
- data/app/services/newspaper_works/jp2_derivative_service.rb +120 -0
- data/app/services/newspaper_works/newspaper_page_derivative_service.rb +91 -0
- data/app/services/newspaper_works/pdf_derivative_service.rb +45 -0
- data/app/services/newspaper_works/pluggable_derivative_service.rb +114 -0
- data/app/services/newspaper_works/text_extraction_derivative_service.rb +56 -0
- data/app/services/newspaper_works/text_formats_from_alto_service.rb +77 -0
- data/app/services/newspaper_works/tiff_derivative_service.rb +54 -0
- data/app/validators/newspaper_works/publication_date_start_end_validator.rb +48 -0
- data/app/validators/newspaper_works/publication_date_validator.rb +16 -0
- data/app/views/catalog/_index_gallery_newspaper_article_wrapper.html.erb +9 -0
- data/app/views/catalog/_index_gallery_newspaper_page_wrapper.html.erb +9 -0
- data/app/views/catalog/_index_header_gallery_newspaper_article.html.erb +23 -0
- data/app/views/catalog/_index_header_gallery_newspaper_page.html.erb +23 -0
- data/app/views/catalog/_index_header_list_newspaper_article.html.erb +7 -0
- data/app/views/catalog/_index_header_list_newspaper_page.html.erb +7 -0
- data/app/views/catalog/_snippets_more.html.erb +16 -0
- data/app/views/catalog/_thumbnail_list_newspaper_article.html.erb +6 -0
- data/app/views/catalog/_thumbnail_list_newspaper_page.html.erb +6 -0
- data/app/views/hyrax/file_sets/_actions.html.erb +45 -0
- data/app/views/hyrax/newspaper_articles/_newspaper_article.html.erb +2 -0
- data/app/views/hyrax/newspaper_articles/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_containers/_newspaper_container.html.erb +2 -0
- data/app/views/hyrax/newspaper_containers/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_issues/_newspaper_issue.html.erb +2 -0
- data/app/views/hyrax/newspaper_issues/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_pages/_newspaper_page.html.erb +2 -0
- data/app/views/hyrax/newspaper_pages/show.html.erb +1 -0
- data/app/views/hyrax/newspaper_titles/_all_front_pages_form.html.erb +5 -0
- data/app/views/hyrax/newspaper_titles/_issue_search_form.html.erb +33 -0
- data/app/views/hyrax/newspaper_titles/_issues_calendar.html.erb +63 -0
- data/app/views/hyrax/newspaper_titles/_newspaper_title.html.erb +2 -0
- data/app/views/hyrax/newspaper_titles/show.html.erb +54 -0
- data/app/views/newspaper_works/base/_attribute_rows.html.erb +42 -0
- data/app/views/newspaper_works/base/_attributes.html.erb +16 -0
- data/app/views/newspaper_works/base/_metadata.html.erb +6 -0
- data/app/views/newspaper_works/base/_newspaper_hierarchy.html.erb +14 -0
- data/app/views/newspaper_works/base/_persistent_url.html.erb +1 -0
- data/app/views/newspaper_works/base/_show.html.erb +45 -0
- data/app/views/newspaper_works/newspapers_search/_date_fields.html.erb +29 -0
- data/app/views/newspaper_works/newspapers_search/_facet_layout.html.erb +8 -0
- data/app/views/newspaper_works/newspapers_search/_facet_limit.html.erb +17 -0
- data/app/views/newspaper_works/newspapers_search/_front_pages_input.html.erb +5 -0
- data/app/views/newspaper_works/newspapers_search/_keyword_input.html.erb +18 -0
- data/app/views/newspaper_works/newspapers_search/_newspapers_facets.html.erb +5 -0
- data/app/views/newspaper_works/newspapers_search/_newspapers_search_form.html.erb +13 -0
- data/app/views/newspaper_works/newspapers_search/_newspapers_search_help.html.erb +8 -0
- data/app/views/newspaper_works/newspapers_search/search.html.erb +13 -0
- data/app/views/records/edit_fields/_alternate_title.html.erb +4 -0
- data/app/views/records/edit_fields/_genre.html.erb +4 -0
- data/app/views/records/edit_fields/_place_of_publication.html.erb +14 -0
- data/app/views/records/edit_fields/_subtitle.html.erb +4 -0
- data/bin/rails +13 -0
- data/config/fcrepo_wrapper_test.yml +5 -0
- data/config/initializers/assets.rb +2 -0
- data/config/locales/newspaper_article.de.yml +12 -0
- data/config/locales/newspaper_article.en.yml +12 -0
- data/config/locales/newspaper_article.es.yml +12 -0
- data/config/locales/newspaper_article.fr.yml +12 -0
- data/config/locales/newspaper_article.it.yml +12 -0
- data/config/locales/newspaper_article.pt-BR.yml +12 -0
- data/config/locales/newspaper_article.zh.yml +12 -0
- data/config/locales/newspaper_container.de.yml +8 -0
- data/config/locales/newspaper_container.en.yml +8 -0
- data/config/locales/newspaper_container.es.yml +8 -0
- data/config/locales/newspaper_container.fr.yml +8 -0
- data/config/locales/newspaper_container.it.yml +8 -0
- data/config/locales/newspaper_container.pt-BR.yml +8 -0
- data/config/locales/newspaper_container.zh.yml +8 -0
- data/config/locales/newspaper_issue.de.yml +8 -0
- data/config/locales/newspaper_issue.en.yml +8 -0
- data/config/locales/newspaper_issue.es.yml +8 -0
- data/config/locales/newspaper_issue.fr.yml +8 -0
- data/config/locales/newspaper_issue.it.yml +8 -0
- data/config/locales/newspaper_issue.pt-BR.yml +8 -0
- data/config/locales/newspaper_issue.zh.yml +8 -0
- data/config/locales/newspaper_page.de.yml +15 -0
- data/config/locales/newspaper_page.en.yml +15 -0
- data/config/locales/newspaper_page.es.yml +15 -0
- data/config/locales/newspaper_page.fr.yml +15 -0
- data/config/locales/newspaper_page.it.yml +15 -0
- data/config/locales/newspaper_page.pt-BR.yml +15 -0
- data/config/locales/newspaper_page.zh.yml +15 -0
- data/config/locales/newspaper_title.de.yml +8 -0
- data/config/locales/newspaper_title.en.yml +8 -0
- data/config/locales/newspaper_title.es.yml +8 -0
- data/config/locales/newspaper_title.fr.yml +8 -0
- data/config/locales/newspaper_title.it.yml +8 -0
- data/config/locales/newspaper_title.pt-BR.yml +8 -0
- data/config/locales/newspaper_title.zh.yml +8 -0
- data/config/locales/newspaper_works.de.yml +50 -0
- data/config/locales/newspaper_works.en.yml +52 -0
- data/config/locales/newspaper_works.es.yml +52 -0
- data/config/locales/newspaper_works.fr.yml +52 -0
- data/config/locales/newspaper_works.it.yml +52 -0
- data/config/locales/newspaper_works.pt-BR.yml +52 -0
- data/config/locales/newspaper_works.zh.yml +52 -0
- data/config/routes.rb +9 -0
- data/config/solr_wrapper_test.yml +9 -0
- data/config/test-fixture/solr-config/_rest_managed.json +3 -0
- data/config/test-fixture/solr-config/admin-extra.html +31 -0
- data/config/test-fixture/solr-config/elevate.xml +36 -0
- data/config/test-fixture/solr-config/mapping-ISOLatin1Accent.txt +246 -0
- data/config/test-fixture/solr-config/protwords.txt +21 -0
- data/config/test-fixture/solr-config/schema.xml +366 -0
- data/config/test-fixture/solr-config/scripts.conf +24 -0
- data/config/test-fixture/solr-config/solrconfig.xml +322 -0
- data/config/test-fixture/solr-config/spellings.txt +2 -0
- data/config/test-fixture/solr-config/stopwords.txt +58 -0
- data/config/test-fixture/solr-config/stopwords_en.txt +58 -0
- data/config/test-fixture/solr-config/synonyms.txt +31 -0
- data/config/test-fixture/solr-config/xslt/example.xsl +132 -0
- data/config/test-fixture/solr-config/xslt/example_atom.xsl +67 -0
- data/config/test-fixture/solr-config/xslt/example_rss.xsl +66 -0
- data/config/test-fixture/solr-config/xslt/luke.xsl +337 -0
- data/config/vendor/imagemagick-6-policy.xml +76 -0
- data/db/migrate/20181214181358_create_newspaper_works_derivative_attachments.rb +12 -0
- data/db/migrate/20190107165909_create_newspaper_works_ingest_file_relations.rb +11 -0
- data/lib/generators/newspaper_works/assets_generator.rb +29 -0
- data/lib/generators/newspaper_works/blacklight_advanced_search_generator.rb +44 -0
- data/lib/generators/newspaper_works/blacklight_iiif_search_generator.rb +41 -0
- data/lib/generators/newspaper_works/catalog_controller_generator.rb +60 -0
- data/lib/generators/newspaper_works/install_generator.rb +97 -0
- data/lib/generators/newspaper_works/templates/annotation_behavior.rb +6 -0
- data/lib/generators/newspaper_works/templates/config/authorities/newspaper_article_genres.yml +86 -0
- data/lib/generators/newspaper_works/templates/config/initializers/newspaper_works.rb +12 -0
- data/lib/generators/newspaper_works/templates/config/initializers/patch_blacklight_advanced_search.rb +74 -0
- data/lib/generators/newspaper_works/templates/custom_search_builder.rb +23 -0
- data/lib/generators/newspaper_works/templates/newspaper_works.scss +1 -0
- data/lib/generators/newspaper_works/templates/newspaper_works_helper.rb +3 -0
- data/lib/generators/newspaper_works/templates/search_behavior.rb +6 -0
- data/lib/newspaper_works/configuration.rb +14 -0
- data/lib/newspaper_works/data/fileset_helper.rb +25 -0
- data/lib/newspaper_works/data/path_helper.rb +40 -0
- data/lib/newspaper_works/data/work_derivatives.rb +314 -0
- data/lib/newspaper_works/data/work_file.rb +92 -0
- data/lib/newspaper_works/data/work_files.rb +181 -0
- data/lib/newspaper_works/data.rb +35 -0
- data/lib/newspaper_works/engine.rb +42 -0
- data/lib/newspaper_works/errors.rb +14 -0
- data/lib/newspaper_works/ingest/base_ingest.rb +69 -0
- data/lib/newspaper_works/ingest/base_publication_info.rb +35 -0
- data/lib/newspaper_works/ingest/batch_ingest_helper.rb +44 -0
- data/lib/newspaper_works/ingest/batch_issue_ingester.rb +129 -0
- data/lib/newspaper_works/ingest/chronam_publication_info.rb +133 -0
- data/lib/newspaper_works/ingest/from_command.rb +52 -0
- data/lib/newspaper_works/ingest/image_ingest_issues.rb +43 -0
- data/lib/newspaper_works/ingest/issue_images.rb +51 -0
- data/lib/newspaper_works/ingest/lc_publication_info.rb +144 -0
- data/lib/newspaper_works/ingest/named_issue_metadata.rb +60 -0
- data/lib/newspaper_works/ingest/ndnp/batch_ingester.rb +64 -0
- data/lib/newspaper_works/ingest/ndnp/batch_xml_ingest.rb +72 -0
- data/lib/newspaper_works/ingest/ndnp/container_ingest.rb +99 -0
- data/lib/newspaper_works/ingest/ndnp/container_ingester.rb +84 -0
- data/lib/newspaper_works/ingest/ndnp/container_metadata.rb +87 -0
- data/lib/newspaper_works/ingest/ndnp/issue_ingest.rb +81 -0
- data/lib/newspaper_works/ingest/ndnp/issue_ingester.rb +101 -0
- data/lib/newspaper_works/ingest/ndnp/issue_metadata.rb +96 -0
- data/lib/newspaper_works/ingest/ndnp/ndnp_asset_helper.rb +20 -0
- data/lib/newspaper_works/ingest/ndnp/ndnp_mets_helper.rb +70 -0
- data/lib/newspaper_works/ingest/ndnp/page_ingest.rb +47 -0
- data/lib/newspaper_works/ingest/ndnp/page_ingester.rb +157 -0
- data/lib/newspaper_works/ingest/ndnp/page_metadata.rb +112 -0
- data/lib/newspaper_works/ingest/ndnp.rb +21 -0
- data/lib/newspaper_works/ingest/newspaper_issue_ingest.rb +56 -0
- data/lib/newspaper_works/ingest/newspaper_page_ingest.rb +6 -0
- data/lib/newspaper_works/ingest/page_image.rb +52 -0
- data/lib/newspaper_works/ingest/path_enumeration.rb +52 -0
- data/lib/newspaper_works/ingest/pdf_images.rb +85 -0
- data/lib/newspaper_works/ingest/pdf_issue.rb +20 -0
- data/lib/newspaper_works/ingest/pdf_issues.rb +39 -0
- data/lib/newspaper_works/ingest/pdf_pages.rb +114 -0
- data/lib/newspaper_works/ingest/pub_finder.rb +89 -0
- data/lib/newspaper_works/ingest/publication_info.rb +44 -0
- data/lib/newspaper_works/ingest.rb +90 -0
- data/lib/newspaper_works/issue_pdf_composer.rb +111 -0
- data/lib/newspaper_works/logging.rb +54 -0
- data/lib/newspaper_works/page_finder.rb +62 -0
- data/lib/newspaper_works/resource_fetcher.rb +78 -0
- data/lib/newspaper_works/text_extraction/alto_reader.rb +122 -0
- data/lib/newspaper_works/text_extraction/page_ocr.rb +100 -0
- data/lib/newspaper_works/text_extraction/render_alto.rb +84 -0
- data/lib/newspaper_works/text_extraction/word_coords_builder.rb +30 -0
- data/lib/newspaper_works/text_extraction.rb +10 -0
- data/lib/newspaper_works/version.rb +3 -0
- data/lib/newspaper_works.rb +19 -0
- data/lib/tasks/newspaper_works_tasks.rake +39 -0
- data/newspaper_works.gemspec +49 -0
- data/spec/.keep.txt +1 -0
- data/spec/actors/newspaper_works/actors/newspaper_works_upload_actor_spec.rb +69 -0
- data/spec/controllers/catalog_controller_spec.rb +63 -0
- data/spec/controllers/newspaper_works/newspapers_controller_spec.rb +114 -0
- data/spec/controllers/newspaper_works/newspapers_search_controller_spec.rb +21 -0
- data/spec/factories/ability.rb +6 -0
- data/spec/factories/newspaper_issue.rb +7 -0
- data/spec/factories/newspaper_issue_ingest.rb +6 -0
- data/spec/factories/newspaper_page.rb +7 -0
- data/spec/factories/newspaper_page_ingest.rb +6 -0
- data/spec/factories/newspaper_page_solr_document.rb +12 -0
- data/spec/factories/newspaper_title.rb +8 -0
- data/spec/factories/uploaded_pdf_file.rb +9 -0
- data/spec/factories/user.rb +13 -0
- data/spec/features/front_pages_for_title_spec.rb +19 -0
- data/spec/features/newspaper_title_search_spec.rb +30 -0
- data/spec/features/newspapers_search_spec.rb +49 -0
- data/spec/features/search_results_thumbnail_highlights_spec.rb +33 -0
- data/spec/features_shared.rb +71 -0
- data/spec/fixtures/files/4.1.07.jp2 +0 -0
- data/spec/fixtures/files/4.1.07.tiff +0 -0
- data/spec/fixtures/files/README.md +7 -0
- data/spec/fixtures/files/alto-2-0.xsd +714 -0
- data/spec/fixtures/files/broken-truncated.pdf +0 -0
- data/spec/fixtures/files/credits.md +16 -0
- data/spec/fixtures/files/lowres-gray-via-ndnp-sample.tiff +0 -0
- data/spec/fixtures/files/minimal-1-page.pdf +0 -0
- data/spec/fixtures/files/minimal-2-page.pdf +0 -0
- data/spec/fixtures/files/minimal-alto.xml +31 -0
- data/spec/fixtures/files/ndnp-alto-sample.xml +24 -0
- data/spec/fixtures/files/ndnp-sample1-json.json +1 -0
- data/spec/fixtures/files/ndnp-sample1-txt.txt +1 -0
- data/spec/fixtures/files/ndnp-sample1.pdf +0 -0
- data/spec/fixtures/files/ocr_alto.xml +202 -0
- data/spec/fixtures/files/ocr_alto_scaled_4pts_per_px.xml +202 -0
- data/spec/fixtures/files/ocr_color.tiff +0 -0
- data/spec/fixtures/files/ocr_gray.jp2 +0 -0
- data/spec/fixtures/files/ocr_gray.tiff +0 -0
- data/spec/fixtures/files/ocr_mono.tiff +0 -0
- data/spec/fixtures/files/page1.tiff +0 -0
- data/spec/fixtures/files/resource_mocks/chronam/http404-expected +0 -0
- data/spec/fixtures/files/resource_mocks/chronam/sn84038814.rdf +1028 -0
- data/spec/fixtures/files/resource_mocks/chronam/sn93059126.rdf +36 -0
- data/spec/fixtures/files/resource_mocks/chronam/sn94051019.rdf +37 -0
- data/spec/fixtures/files/resource_mocks/geonames/Chicopee +1104 -0
- data/spec/fixtures/files/resource_mocks/geonames/Denver +1104 -0
- data/spec/fixtures/files/resource_mocks/geonames/Marysville +279 -0
- data/spec/fixtures/files/resource_mocks/geonames/Marysville2 +279 -0
- data/spec/fixtures/files/resource_mocks/geonames/SLC +1104 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn2099999999 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn82014496 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn83020109 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn83021453 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn83045396 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn84038814 +2 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn93059126 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn94051019 +1 -0
- data/spec/fixtures/files/resource_mocks/lccn/sn99999999 +1 -0
- data/spec/fixtures/files/resource_mocks/urls.json +82 -0
- data/spec/fixtures/files/sample-4page-issue.pdf +0 -0
- data/spec/fixtures/files/sample-color-newsletter.pdf +0 -0
- data/spec/fixtures/files/thumbnail.jpg +0 -0
- data/spec/forms/hyrax/newspaper_article_form_spec.rb +33 -0
- data/spec/forms/hyrax/newspaper_container_form_spec.rb +30 -0
- data/spec/forms/hyrax/newspaper_issue_form_spec.rb +31 -0
- data/spec/forms/hyrax/newspaper_page_form_spec.rb +28 -0
- data/spec/forms/hyrax/newspaper_title_form_spec.rb +31 -0
- data/spec/forms/newspaper_works/newspaper_core_form_data_spec.rb +12 -0
- data/spec/helpers/newspaper_works/breadcrumb_helper_spec.rb +82 -0
- data/spec/helpers/newspaper_works_helper_spec.rb +57 -0
- data/spec/indexers/concerns/newspaper_works/indexes_full_text_spec.rb +31 -0
- data/spec/indexers/concerns/newspaper_works/indexes_place_of_publication_spec.rb +53 -0
- data/spec/indexers/concerns/newspaper_works/indexes_publication_date_range_spec.rb +39 -0
- data/spec/indexers/concerns/newspaper_works/indexes_relationships_spec.rb +86 -0
- data/spec/indexers/newspaper_article_indexer_spec.rb +29 -0
- data/spec/indexers/newspaper_issue_indexer_spec.rb +19 -0
- data/spec/indexers/newspaper_title_indexer_spec.rb +22 -0
- data/spec/indexers/newspaper_works/newspaper_core_indexer_spec.rb +23 -0
- data/spec/lib/newspaper_works/configuration_spec.rb +18 -0
- data/spec/lib/newspaper_works/data/work_derivatives_spec.rb +245 -0
- data/spec/lib/newspaper_works/data/work_file_spec.rb +99 -0
- data/spec/lib/newspaper_works/data/work_files_spec.rb +224 -0
- data/spec/lib/newspaper_works/ingest/batch_issue_ingester_spec.rb +158 -0
- data/spec/lib/newspaper_works/ingest/chronam_publication_info_spec.rb +35 -0
- data/spec/lib/newspaper_works/ingest/from_command_spec.rb +75 -0
- data/spec/lib/newspaper_works/ingest/image_ingest_issues_spec.rb +62 -0
- data/spec/lib/newspaper_works/ingest/ingest_shared.rb +75 -0
- data/spec/lib/newspaper_works/ingest/issue_images_spec.rb +65 -0
- data/spec/lib/newspaper_works/ingest/lc_publication_info_spec.rb +34 -0
- data/spec/lib/newspaper_works/ingest/ndnp/batch_ingester_spec.rb +131 -0
- data/spec/lib/newspaper_works/ingest/ndnp/batch_xml_ingest_spec.rb +64 -0
- data/spec/lib/newspaper_works/ingest/ndnp/container_ingest_spec.rb +44 -0
- data/spec/lib/newspaper_works/ingest/ndnp/container_ingester_spec.rb +126 -0
- data/spec/lib/newspaper_works/ingest/ndnp/container_metadata_spec.rb +36 -0
- data/spec/lib/newspaper_works/ingest/ndnp/issue_ingest_spec.rb +108 -0
- data/spec/lib/newspaper_works/ingest/ndnp/issue_ingester_spec.rb +155 -0
- data/spec/lib/newspaper_works/ingest/ndnp/issue_metadata_spec.rb +84 -0
- data/spec/lib/newspaper_works/ingest/ndnp/page_ingest_spec.rb +79 -0
- data/spec/lib/newspaper_works/ingest/ndnp/page_ingester_spec.rb +184 -0
- data/spec/lib/newspaper_works/ingest/ndnp/page_metadata_spec.rb +85 -0
- data/spec/lib/newspaper_works/ingest/newspaper_issue_ingest_spec.rb +83 -0
- data/spec/lib/newspaper_works/ingest/newspaper_page_ingest_spec.rb +77 -0
- data/spec/lib/newspaper_works/ingest/page_image_spec.rb +29 -0
- data/spec/lib/newspaper_works/ingest/pdf_images_spec.rb +32 -0
- data/spec/lib/newspaper_works/ingest/pdf_issue_spec.rb +29 -0
- data/spec/lib/newspaper_works/ingest/pdf_issues_spec.rb +62 -0
- data/spec/lib/newspaper_works/ingest/pdf_pages_spec.rb +110 -0
- data/spec/lib/newspaper_works/ingest/pub_finder_spec.rb +58 -0
- data/spec/lib/newspaper_works/ingest/publication_info_spec.rb +61 -0
- data/spec/lib/newspaper_works/ingest_spec.rb +45 -0
- data/spec/lib/newspaper_works/issue_pdf_composer_spec.rb +101 -0
- data/spec/lib/newspaper_works/logging_spec.rb +53 -0
- data/spec/lib/newspaper_works/page_finder_spec.rb +53 -0
- data/spec/lib/newspaper_works/resource_fetcher_spec.rb +65 -0
- data/spec/lib/newspaper_works/text_extraction/alto_reader_spec.rb +49 -0
- data/spec/lib/newspaper_works/text_extraction/page_ocr_spec.rb +84 -0
- data/spec/lib/newspaper_works/text_extraction/render_alto_spec.rb +54 -0
- data/spec/lib/newspaper_works/text_extraction/word_coords_builder_spec.rb +30 -0
- data/spec/lib/tasks/newspaper_works_rake_spec.rb +124 -0
- data/spec/misc_shared.rb +109 -0
- data/spec/model_shared.rb +134 -0
- data/spec/models/concerns/newspaper_works/blacklight_iiif_search/annotation_behavior_spec.rb +45 -0
- data/spec/models/concerns/newspaper_works/blacklight_iiif_search/search_behavior_spec.rb +27 -0
- data/spec/models/concerns/newspaper_works/newspaper_core_metadata_spec.rb +45 -0
- data/spec/models/concerns/newspaper_works/place_of_publication_behavior_spec.rb +17 -0
- data/spec/models/concerns/newspaper_works/scanned_media_metadata_spec.rb +35 -0
- data/spec/models/newspaper_article_spec.rb +73 -0
- data/spec/models/newspaper_container_spec.rb +111 -0
- data/spec/models/newspaper_issue_spec.rb +91 -0
- data/spec/models/newspaper_page_spec.rb +44 -0
- data/spec/models/newspaper_title_spec.rb +116 -0
- data/spec/models/newspaper_works/derivative_attachment_spec.rb +37 -0
- data/spec/models/newspaper_works/ingest_file_relation_spec.rb +56 -0
- data/spec/models/solr_document_spec.rb +14 -0
- data/spec/ndnp_shared.rb +48 -0
- data/spec/presenters/hyrax/newspaper_article_presenter_spec.rb +53 -0
- data/spec/presenters/hyrax/newspaper_container_presenter_spec.rb +20 -0
- data/spec/presenters/hyrax/newspaper_issue_presenter_spec.rb +65 -0
- data/spec/presenters/hyrax/newspaper_page_presenter_spec.rb +75 -0
- data/spec/presenters/hyrax/newspaper_title_presenter_spec.rb +153 -0
- data/spec/presenters/newspaper_works/iiif_manifest_presenter_behavior_spec.rb +32 -0
- data/spec/presenters/newspaper_works/issue_info_presenter_spec.rb +51 -0
- data/spec/presenters/newspaper_works/newspaper_core_presenter_spec.rb +22 -0
- data/spec/presenters/newspaper_works/persistent_url_presenter_behavior_spec.rb +24 -0
- data/spec/presenters/newspaper_works/place_of_publication_presenter_behavior_spec.rb +17 -0
- data/spec/presenters/newspaper_works/scanned_media_presenter_spec.rb +18 -0
- data/spec/presenters/newspaper_works/title_info_presenter_spec.rb +23 -0
- data/spec/routing/route_spec.rb +52 -0
- data/spec/search_builders/custom_search_builder_spec.rb +34 -0
- data/spec/search_builders/newspaper_works/newspapers_search_builder_spec.rb +33 -0
- data/spec/services/hyrax/article_genre_service_spec.rb +12 -0
- data/spec/services/hyrax/resource_types_service_spec.rb +12 -0
- data/spec/services/newspaper_works/jp2_derivative_service_spec.rb +62 -0
- data/spec/services/newspaper_works/newspaper_page_derivative_service_spec.rb +125 -0
- data/spec/services/newspaper_works/pdf_derivative_service_spec.rb +62 -0
- data/spec/services/newspaper_works/pluggable_derivative_service_spec.rb +204 -0
- data/spec/services/newspaper_works/text_extraction_derivative_service_spec.rb +82 -0
- data/spec/services/newspaper_works/text_formats_from_alto_service_spec.rb +129 -0
- data/spec/services/newspaper_works/tiff_derivative_service_spec.rb +58 -0
- data/spec/spec_helper.rb +261 -0
- data/spec/support/controller_level_helpers.rb +28 -0
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +22 -0
- data/spec/views/catalog/_index_gallery_newspaper_page_wrapper.html.erb_spec.rb +36 -0
- data/spec/views/catalog/_index_header_list_newspaper_page.html.erb_spec.rb +26 -0
- data/spec/views/catalog/_thumbnail_list_newspaper_page.html.erb_spec.rb +35 -0
- data/spec/views/hyrax/newspaper_titles/_all_front_pages_form.html.erb_spec.rb +16 -0
- data/spec/views/hyrax/newspaper_titles/_issue_search_form.html.erb_spec.rb +33 -0
- data/spec/views/hyrax/newspaper_titles/_issues_calendar.html.erb_spec.rb +37 -0
- data/spec/views/hyrax/newspaper_titles/show.html.erb_spec.rb +87 -0
- data/spec/views/newspaper_works/base/_attribute_rows.html.erb_spec.rb +60 -0
- data/spec/views/newspaper_works/base/_newspaper_hierarchy.html.erb_spec.rb +80 -0
- data/spec/views/newspaper_works/base/_show.html.erb_spec.rb +78 -0
- data/spec/views/newspaper_works/newspapers_search/search.html.erb_spec.rb +54 -0
- data/spec/views/records/edit_fields/_place_of_publication.html.erb_spec.rb +26 -0
- data/tasks/newspaperworks_dev.rake +26 -0
- data/test/integration/navigation_test.rb +7 -0
- data/test/lib/generators/newspaper_works/install_generator_test.rb +16 -0
- data/test/newspaper_works_test.rb +7 -0
- data/test/test_helper.rb +17 -0
- data/tmp/.keep +0 -0
- metadata +1037 -0
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
# testing environent:
|
|
4
|
+
ENV['RAILS_ENV'] ||= 'test'
|
|
5
|
+
|
|
6
|
+
require 'coveralls'
|
|
7
|
+
Coveralls.wear!
|
|
8
|
+
|
|
9
|
+
require 'shoulda/matchers'
|
|
10
|
+
Shoulda::Matchers.configure do |config|
|
|
11
|
+
config.integrate do |with|
|
|
12
|
+
with.test_framework :rspec
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# engine_cart:
|
|
17
|
+
require 'bundler/setup'
|
|
18
|
+
require 'engine_cart'
|
|
19
|
+
EngineCart.load_application!
|
|
20
|
+
|
|
21
|
+
# webmock
|
|
22
|
+
require 'webmock'
|
|
23
|
+
# include WebMock API makes stub_request available in initial config, not
|
|
24
|
+
# just inside tests:
|
|
25
|
+
include WebMock::API
|
|
26
|
+
# Allow connections to pass through by default, so that any before(:suite)
|
|
27
|
+
# hook that runs before WebMock config isn't affected:
|
|
28
|
+
WebMock.allow_net_connect!
|
|
29
|
+
|
|
30
|
+
# test account for Geonames-related specs
|
|
31
|
+
Qa::Authorities::Geonames.username = 'newspaper_works'
|
|
32
|
+
|
|
33
|
+
require 'rails-controller-testing'
|
|
34
|
+
require 'rspec/rails'
|
|
35
|
+
require 'support/controller_level_helpers'
|
|
36
|
+
require 'rspec/active_model/mocks'
|
|
37
|
+
require 'selenium-webdriver'
|
|
38
|
+
require 'webdrivers'
|
|
39
|
+
|
|
40
|
+
# @note In January 2018, TravisCI disabled Chrome sandboxing in its Linux
|
|
41
|
+
# container build environments to mitigate Meltdown/Spectre
|
|
42
|
+
# vulnerabilities, at which point Hyrax could no longer use the
|
|
43
|
+
# Capybara-provided :selenium_chrome_headless driver (which does not
|
|
44
|
+
# include the `--no-sandbox` argument).
|
|
45
|
+
Capybara.register_driver :selenium_chrome_headless_sandboxless do |app|
|
|
46
|
+
browser_options = ::Selenium::WebDriver::Chrome::Options.new
|
|
47
|
+
browser_options.args << '--headless'
|
|
48
|
+
browser_options.args << '--disable-gpu'
|
|
49
|
+
browser_options.args << '--no-sandbox'
|
|
50
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, options: browser_options)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Capybara.default_driver = :rack_test # This is a faster driver
|
|
54
|
+
Capybara.javascript_driver = :selenium_chrome_headless_sandboxless # This is slower
|
|
55
|
+
|
|
56
|
+
# FIXME: Pin to older version of chromedriver to avoid issue with clicking non-visible elements
|
|
57
|
+
Webdrivers::Chromedriver.required_version = '72.0.3626.69'
|
|
58
|
+
|
|
59
|
+
ActiveJob::Base.queue_adapter = :test
|
|
60
|
+
|
|
61
|
+
module EngineRoutes
|
|
62
|
+
def self.included(base)
|
|
63
|
+
base.routes { NewspaperWorks::Engine.routes }
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
RSpec.configure do |config|
|
|
68
|
+
# enable FactoryBot:
|
|
69
|
+
require 'factory_bot'
|
|
70
|
+
config.include FactoryBot::Syntax::Methods
|
|
71
|
+
# auto-detect and load all factories in spec/factories:
|
|
72
|
+
FactoryBot.find_definitions
|
|
73
|
+
|
|
74
|
+
config.infer_spec_type_from_file_location!
|
|
75
|
+
|
|
76
|
+
# Transactional
|
|
77
|
+
config.use_transactional_fixtures = false
|
|
78
|
+
config.include Devise::Test::ControllerHelpers, type: :controller
|
|
79
|
+
|
|
80
|
+
# require shared examples
|
|
81
|
+
require 'lib/newspaper_works/ingest/ingest_shared'
|
|
82
|
+
|
|
83
|
+
config.include(ControllerLevelHelpers, type: :helper)
|
|
84
|
+
config.before(:each, type: :helper) { initialize_controller_helpers(helper) }
|
|
85
|
+
|
|
86
|
+
config.include(ControllerLevelHelpers, type: :view)
|
|
87
|
+
config.before(:each, type: :view) { initialize_controller_helpers(view) }
|
|
88
|
+
|
|
89
|
+
config.before(:all, type: :feature) do
|
|
90
|
+
# Assets take a long time to compile. This causes two problems:
|
|
91
|
+
# 1) the profile will show the first feature test taking much longer than it
|
|
92
|
+
# normally would.
|
|
93
|
+
# 2) The first feature test will trigger rack-timeout
|
|
94
|
+
#
|
|
95
|
+
# Precompile the assets to prevent these issues.
|
|
96
|
+
visit "/assets/application.css"
|
|
97
|
+
visit "/assets/application.js"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
config.include EngineRoutes, type: :controller
|
|
101
|
+
|
|
102
|
+
# ensure Hyrax has active sipity workflow for default admin set:
|
|
103
|
+
config.before(:suite) do
|
|
104
|
+
begin
|
|
105
|
+
# ensure permission template actually exists in RDBMS:
|
|
106
|
+
id = 'admin_set/default'
|
|
107
|
+
no_template = Hyrax::PermissionTemplate.find_by(source_id: id).nil?
|
|
108
|
+
Hyrax::PermissionTemplate.create!(source_id: id) if no_template
|
|
109
|
+
# ensure workflows exist, presumes permission template does first:
|
|
110
|
+
Hyrax::Workflow::WorkflowImporter.load_workflows
|
|
111
|
+
# Default admin set needs to exist in Fedora, with relation to its
|
|
112
|
+
# PermissionTemplate object:
|
|
113
|
+
begin
|
|
114
|
+
admin_set = AdminSet.find(AdminSet.find_or_create_default_admin_set_id)
|
|
115
|
+
admin_set.save!
|
|
116
|
+
rescue ActiveRecord::RecordNotUnique
|
|
117
|
+
admin_set = AdminSet.find(AdminSet::DEFAULT_ID)
|
|
118
|
+
end
|
|
119
|
+
permission_template = admin_set.permission_template
|
|
120
|
+
workflow = permission_template.available_workflows.where(
|
|
121
|
+
name: 'default'
|
|
122
|
+
).first
|
|
123
|
+
Sipity::Workflow.activate!(
|
|
124
|
+
permission_template: permission_template,
|
|
125
|
+
workflow_id: workflow.id
|
|
126
|
+
)
|
|
127
|
+
rescue Faraday::ConnectionFailed
|
|
128
|
+
STDERR.puts "Attempting to run test suite without Fedora and/or Solr..."
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# enable WebMock, but make sure it is opt-in for stubs, allowing non-stubbed
|
|
133
|
+
# HTTP requests to proceed normally
|
|
134
|
+
config.before(:suite) do
|
|
135
|
+
WebMock.enable!
|
|
136
|
+
WebMock.allow_net_connect!
|
|
137
|
+
# Load stubs from manifest
|
|
138
|
+
fixtures = File.join(NewspaperWorks::GEM_PATH, 'spec', 'fixtures', 'files')
|
|
139
|
+
manifest_path = File.join(fixtures, 'resource_mocks', 'urls.json')
|
|
140
|
+
manifest = JSON.parse(File.read(manifest_path))
|
|
141
|
+
manifest['urls'].each do |r|
|
|
142
|
+
path = File.join(fixtures, 'resource_mocks', r['local'])
|
|
143
|
+
status = r['status'] || 200
|
|
144
|
+
stub_request(:any, r['url']).to_return(
|
|
145
|
+
body: File.open(path),
|
|
146
|
+
status: status
|
|
147
|
+
)
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
# ensure HTTP connections allowed by webmock between/before tests:
|
|
151
|
+
config.before { WebMock.allow_net_connect! }
|
|
152
|
+
|
|
153
|
+
# :perform_enqueued config setting below copied from Hyrax spec_helper.rb
|
|
154
|
+
config.before(:example, :perform_enqueued) do |example|
|
|
155
|
+
ActiveJob::Base.queue_adapter.filter = example.metadata[:perform_enqueued].try(:to_a)
|
|
156
|
+
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
|
|
157
|
+
ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = true
|
|
158
|
+
end
|
|
159
|
+
config.after(:example, :perform_enqueued) do
|
|
160
|
+
ActiveJob::Base.queue_adapter.filter = nil
|
|
161
|
+
ActiveJob::Base.queue_adapter.enqueued_jobs = []
|
|
162
|
+
ActiveJob::Base.queue_adapter.performed_jobs = []
|
|
163
|
+
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = false
|
|
164
|
+
ActiveJob::Base.queue_adapter.perform_enqueued_at_jobs = false
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
# rspec-expectations config goes here. You can use an alternate
|
|
168
|
+
# assertion/expectation library such as wrong or the stdlib/minitest
|
|
169
|
+
# assertions if you prefer.
|
|
170
|
+
config.expect_with :rspec do |expectations|
|
|
171
|
+
# This option will default to `true` in RSpec 4. It makes the `description`
|
|
172
|
+
# and `failure_message` of custom matchers include text for helper methods
|
|
173
|
+
# defined using `chain`, e.g.:
|
|
174
|
+
# be_bigger_than(2).and_smaller_than(4).description
|
|
175
|
+
# # => "be bigger than 2 and smaller than 4"
|
|
176
|
+
# ...rather than:
|
|
177
|
+
# # => "be bigger than 2"
|
|
178
|
+
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
# rspec-mocks config goes here. You can use an alternate test double
|
|
182
|
+
# library (such as bogus or mocha) by changing the `mock_with` option here.
|
|
183
|
+
config.mock_with :rspec do |mocks|
|
|
184
|
+
# Prevents you from mocking or stubbing a method that does not exist on
|
|
185
|
+
# a real object. This is generally recommended, and will default to
|
|
186
|
+
# `true` in RSpec 4.
|
|
187
|
+
mocks.verify_partial_doubles = true
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
|
|
191
|
+
# have no way to turn it off -- the option exists only for backwards
|
|
192
|
+
# compatibility in RSpec 3). It causes shared context metadata to be
|
|
193
|
+
# inherited by the metadata hash of host groups and examples, rather than
|
|
194
|
+
# triggering implicit auto-inclusion in groups with matching metadata.
|
|
195
|
+
config.shared_context_metadata_behavior = :apply_to_host_groups
|
|
196
|
+
|
|
197
|
+
# The settings below are suggested to provide a good initial experience
|
|
198
|
+
# with RSpec, but feel free to customize to your heart's content.
|
|
199
|
+
|
|
200
|
+
# This allows you to limit a spec run to individual examples or groups
|
|
201
|
+
# you care about by tagging them with `:focus` metadata. When nothing
|
|
202
|
+
# is tagged with `:focus`, all examples get run. RSpec also provides
|
|
203
|
+
# aliases for `it`, `describe`, and `context` that include `:focus`
|
|
204
|
+
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
|
205
|
+
# config.filter_run_when_matching :focus
|
|
206
|
+
|
|
207
|
+
# Allows RSpec to persist some state between runs in order to support
|
|
208
|
+
# the `--only-failures` and `--next-failure` CLI options. We recommend
|
|
209
|
+
# you configure your source control system to ignore this file.
|
|
210
|
+
# config.example_status_persistence_file_path = "spec/examples.txt"
|
|
211
|
+
|
|
212
|
+
# Limits the available syntax to the non-monkey patched syntax that is
|
|
213
|
+
# recommended. For more details, see:
|
|
214
|
+
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
|
|
215
|
+
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
|
|
216
|
+
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
|
|
217
|
+
# config.disable_monkey_patching!
|
|
218
|
+
|
|
219
|
+
# Many RSpec users commonly either run the entire suite or an individual
|
|
220
|
+
# file, and it's useful to allow more verbose output when running an
|
|
221
|
+
# individual spec file.
|
|
222
|
+
# if config.files_to_run.one?
|
|
223
|
+
# Use the documentation formatter for detailed output,
|
|
224
|
+
# unless a formatter has already been configured
|
|
225
|
+
# (e.g. via a command-line flag).
|
|
226
|
+
# config.default_formatter = "doc"
|
|
227
|
+
# end
|
|
228
|
+
|
|
229
|
+
# Print the 10 slowest examples and example groups at the
|
|
230
|
+
# end of the spec run, to help surface which specs are running
|
|
231
|
+
# particularly slow.
|
|
232
|
+
# config.profile_examples = 10
|
|
233
|
+
|
|
234
|
+
# Run specs in random order to surface order dependencies. If you find an
|
|
235
|
+
# order dependency and want to debug it, you can fix the order by providing
|
|
236
|
+
# the seed, which is printed after each run.
|
|
237
|
+
# --seed 1234
|
|
238
|
+
# config.order = :random
|
|
239
|
+
|
|
240
|
+
# Seed global randomization in this process using the `--seed` CLI option.
|
|
241
|
+
# Setting this allows you to use `--seed` to deterministically reproduce
|
|
242
|
+
# test failures related to randomization by passing the same `--seed` value
|
|
243
|
+
# as the one that triggered the failure.
|
|
244
|
+
# Kernel.srand config.seed
|
|
245
|
+
# end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
# ===
|
|
249
|
+
# Means to suppress pending by running something like:
|
|
250
|
+
# $ SUPPRESS_PENDING=1 rspec -fd
|
|
251
|
+
# ===
|
|
252
|
+
module SuccinctFormatterOverrides
|
|
253
|
+
def example_pending(_) end
|
|
254
|
+
|
|
255
|
+
def dump_pending(_) end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
unless ENV['SUPPRESS_PENDING'].nil?
|
|
259
|
+
RSpec::Core::Formatters::DocumentationFormatter.prepend SuccinctFormatterOverrides
|
|
260
|
+
RSpec::Core::Formatters::ProgressFormatter.prepend SuccinctFormatterOverrides
|
|
261
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# copied from Hyrax
|
|
3
|
+
|
|
4
|
+
module ControllerLevelHelpers
|
|
5
|
+
# This provides some common mock methods for view tests.
|
|
6
|
+
# These are normally provided by the controller.
|
|
7
|
+
module ControllerViewHelpers
|
|
8
|
+
def search_state
|
|
9
|
+
@search_state ||= CatalogController.search_state_class.new(params, blacklight_config, controller)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# This allows you to set the configuration
|
|
13
|
+
# @example: view.blacklight_config = Blacklight::Configuration.new
|
|
14
|
+
attr_writer :blacklight_config
|
|
15
|
+
|
|
16
|
+
def blacklight_config
|
|
17
|
+
@blacklight_config ||= CatalogController.blacklight_config
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def blacklight_configuration_context
|
|
21
|
+
@blacklight_configuration_context ||= Blacklight::Configuration::Context.new(controller)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def initialize_controller_helpers(helper)
|
|
26
|
+
helper.extend ControllerViewHelpers
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Test App Generator
|
|
2
|
+
require 'rails/generators'
|
|
3
|
+
|
|
4
|
+
class TestAppGenerator < Rails::Generators::Base
|
|
5
|
+
source_root './spec/test_app_templates'
|
|
6
|
+
|
|
7
|
+
def install_hyrax
|
|
8
|
+
generate 'hyrax:install', '-f'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def install_engine
|
|
12
|
+
generate 'newspaper_works:install'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def db_migrations
|
|
16
|
+
rake 'db:migrate'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def configure_browse_everything
|
|
20
|
+
generate 'browse_everything:config'
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
RSpec.describe 'catalog/_index_gallery_newspaper_page_wrapper.html.erb', type: :view do
|
|
3
|
+
let(:query) { 'suffrage' }
|
|
4
|
+
let(:document) { build(:newspaper_page_solr_document) }
|
|
5
|
+
let(:current_search_session) { Search.new(query_params: { q: query }) }
|
|
6
|
+
|
|
7
|
+
let(:page) do
|
|
8
|
+
render 'catalog/index_gallery_newspaper_page_wrapper',
|
|
9
|
+
document: document,
|
|
10
|
+
current_search_session: current_search_session,
|
|
11
|
+
document_counter: 0
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
before do
|
|
15
|
+
allow(document).to receive(:has_highlight_field?).and_return(false)
|
|
16
|
+
# we need without_partial_double_verification or we get error:
|
|
17
|
+
# View doesn't implement #current_search_session
|
|
18
|
+
without_partial_double_verification do
|
|
19
|
+
allow(view).to receive(:current_search_session).and_return(current_search_session)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'renders the thumbnail' do
|
|
24
|
+
expect(page).to have_selector("img[src='#{document[:thumbnail_path_ss]}']")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'renders links with the IIIF search anchor' do
|
|
28
|
+
expect(page).to have_link(document[:title_tesim].first,
|
|
29
|
+
href: "/concern/newspaper_pages/#{document[:id]}#?h=#{query}")
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'has data attributes for thumbnail highlighting' do
|
|
33
|
+
expect(page).to have_selector("div[data-fileset='#{document[:file_set_ids_ssim].first}']")
|
|
34
|
+
expect(page).to have_selector("div[data-query='#{query}']")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
RSpec.describe 'catalog/_index_header_list_newspaper_page.html.erb', type: :view do
|
|
3
|
+
let(:query) { 'suffrage' }
|
|
4
|
+
let(:document) { build(:newspaper_page_solr_document) }
|
|
5
|
+
let(:current_search_session) { Search.new(query_params: { q: query }) }
|
|
6
|
+
|
|
7
|
+
let(:page) do
|
|
8
|
+
render 'catalog/index_header_list_newspaper_page',
|
|
9
|
+
document: document,
|
|
10
|
+
current_search_session: current_search_session,
|
|
11
|
+
document_counter: 0
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
before do
|
|
15
|
+
# we need without_partial_double_verification or we get error:
|
|
16
|
+
# View doesn't implement #current_search_session
|
|
17
|
+
without_partial_double_verification do
|
|
18
|
+
allow(view).to receive(:current_search_session).and_return(current_search_session)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'renders the links with the IIIF search anchor' do
|
|
23
|
+
expect(page).to have_link(document[:title_tesim].first,
|
|
24
|
+
href: "/concern/newspaper_pages/#{document[:id]}#?h=#{query}")
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
RSpec.describe 'catalog/_thumbnail_list_newspaper_page.html.erb', type: :view do
|
|
3
|
+
let(:query) { 'suffrage' }
|
|
4
|
+
let(:document) { build(:newspaper_page_solr_document) }
|
|
5
|
+
let(:current_search_session) { Search.new(query_params: { q: query }) }
|
|
6
|
+
|
|
7
|
+
let(:page) do
|
|
8
|
+
render 'catalog/thumbnail_list_newspaper_page',
|
|
9
|
+
document: document,
|
|
10
|
+
current_search_session: current_search_session,
|
|
11
|
+
document_counter: 0
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
before do
|
|
15
|
+
allow(document).to receive(:has_highlight_field?).and_return(false)
|
|
16
|
+
# we need without_partial_double_verification or we get error:
|
|
17
|
+
# View doesn't implement #current_search_session
|
|
18
|
+
without_partial_double_verification do
|
|
19
|
+
allow(view).to receive(:current_search_session).and_return(current_search_session)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'renders the thumbnail' do
|
|
24
|
+
expect(page).to have_selector("img[src='#{document[:thumbnail_path_ss]}']")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'renders the link with the IIIF search anchor' do
|
|
28
|
+
expect(page).to have_selector("a[href='/concern/newspaper_pages/#{document[:id]}#?h=#{query}']")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'has data attributes for thumbnail highlighting' do
|
|
32
|
+
expect(page).to have_selector("div[data-fileset='#{document[:file_set_ids_ssim].first}']")
|
|
33
|
+
expect(page).to have_selector("div[data-query='#{query}']")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
RSpec.describe 'hyrax/newspaper_titles/_all_front_pages_form.html.erb', type: :view do
|
|
3
|
+
let(:presenter) { double }
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
allow(presenter).to receive(:front_page_search_params).and_return(f: { "publication_title_ssi" => ["Wall Street Journal"], "first_page_bsi" => [true] })
|
|
7
|
+
assign(:presenter, presenter)
|
|
8
|
+
render
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
let(:page) { Capybara::Node::Simple.new(rendered) }
|
|
12
|
+
|
|
13
|
+
it "has a link to the front pages view" do
|
|
14
|
+
expect(page).to have_link("View all front pages", href: main_app.search_catalog_path(presenter.front_page_search_params))
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
RSpec.describe 'hyrax/newspaper_titles/_issue_search_form.html.erb', type: :view do
|
|
3
|
+
let(:presenter) { double }
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
allow(view).to receive(:search_form_action).and_return("/catalog")
|
|
7
|
+
allow(view).to receive(:search_state).and_return(search_state)
|
|
8
|
+
allow(view).to receive(:current_search_parameters).and_return(nil)
|
|
9
|
+
allow(view).to receive(:current_user).and_return(nil)
|
|
10
|
+
|
|
11
|
+
allow(presenter).to receive(:title_search_params).and_return(f: { "publication_title_ssi" => ["Wall Street Journal"] })
|
|
12
|
+
assign(:presenter, presenter)
|
|
13
|
+
render
|
|
14
|
+
end
|
|
15
|
+
let(:search_state) { double('SearchState', params_for_search: {}) }
|
|
16
|
+
let(:page) { Capybara::Node::Simple.new(rendered) }
|
|
17
|
+
|
|
18
|
+
it "has a hidden `f[publication_title_ssi][]` form field" do
|
|
19
|
+
expect(page).to have_selector("[name='f\[publication_title_ssi\]\[\]'][value='Wall Street Journal']", visible: false)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it "has hidden `all_fields` form field" do
|
|
23
|
+
expect(page).to have_selector("[name='search_field'][value='all_fields']", visible: false)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "has a `q` form field for query" do
|
|
27
|
+
expect(page).to have_field("q")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it "has a checkbox to limit to front pages" do
|
|
31
|
+
expect(page).to have_field("f_first_page_bsi_")
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
# require 'model_shared'
|
|
3
|
+
RSpec.describe 'hyrax/newspaper_titles/_issue_calendar.html.erb', type: :view do
|
|
4
|
+
let!(:issues) do
|
|
5
|
+
[
|
|
6
|
+
SolrDocument.new(id: '123',
|
|
7
|
+
publication_date_dtsi: '2019-02-13T:00:00:00Z'),
|
|
8
|
+
SolrDocument.new(id: '456',
|
|
9
|
+
publication_date_dtsi: '2019-03-05T:00:00:00Z')
|
|
10
|
+
]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
let(:years) do
|
|
14
|
+
{ current: 2019, previous: nil, next: nil }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'shows calendar' do
|
|
18
|
+
render partial: "issues_calendar.html.erb", locals: { issues: issues, years: years }
|
|
19
|
+
expect(rendered).to have_content 'January'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'has link on dates with issues' do
|
|
23
|
+
render partial: "issues_calendar.html.erb", locals: { issues: issues, years: years }
|
|
24
|
+
links = {}
|
|
25
|
+
issues.each do |issue|
|
|
26
|
+
links[Date.parse(issue["publication_date_dtsi"]).strftime("%-d")] = hyrax_newspaper_issue_path(issue)
|
|
27
|
+
end
|
|
28
|
+
links.each do |day, path|
|
|
29
|
+
expect(rendered).to have_link(day, href: path)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'displays the year' do
|
|
34
|
+
render partial: "issues_calendar.html.erb", locals: { issues: issues, years: years }
|
|
35
|
+
expect(rendered).to have_content "Issues: 2019"
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
RSpec.describe 'hyrax/newspaper_titles/show.html.erb', type: :view do
|
|
3
|
+
let(:work_solr_document) do
|
|
4
|
+
SolrDocument.new(id: '999',
|
|
5
|
+
title_tesim: ['My Title'],
|
|
6
|
+
creator_tesim: ['Doe, John', 'Doe, Jane'],
|
|
7
|
+
date_modified_dtsi: '2011-04-01',
|
|
8
|
+
has_model_ssim: ['NewspaperTitle'],
|
|
9
|
+
depositor_tesim: depositor.user_key,
|
|
10
|
+
description_tesim: ['Lorem ipsum lorem ipsum.'],
|
|
11
|
+
keyword_tesim: ['bacon', 'sausage', 'eggs'],
|
|
12
|
+
rights_statement_tesim: ['http://example.org/rs/1'],
|
|
13
|
+
date_created_tesim: ['2019-01-02'])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
let(:file_set_solr_document) do
|
|
17
|
+
SolrDocument.new(id: '123',
|
|
18
|
+
title_tesim: ['My FileSet'],
|
|
19
|
+
depositor_tesim: depositor.user_key)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
let(:ability) { double }
|
|
23
|
+
|
|
24
|
+
let(:request) { double('request', host: 'test.host') }
|
|
25
|
+
|
|
26
|
+
let(:presenter) do
|
|
27
|
+
Hyrax::NewspaperTitlePresenter.new(work_solr_document, ability, request)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
let(:workflow_presenter) do
|
|
31
|
+
double('workflow_presenter', badge: 'Foobar')
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
let(:representative_presenter) do
|
|
35
|
+
Hyrax::FileSetPresenter.new(file_set_solr_document, ability)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
let(:page) { Capybara::Node::Simple.new(rendered) }
|
|
39
|
+
|
|
40
|
+
let(:depositor) do
|
|
41
|
+
stub_model(User,
|
|
42
|
+
user_key: 'bob',
|
|
43
|
+
twitter_handle: 'bot4lib')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
before do
|
|
47
|
+
allow(presenter).to receive(:year).and_return('2019')
|
|
48
|
+
allow(presenter).to receive(:workflow).and_return(workflow_presenter)
|
|
49
|
+
allow(presenter).to receive(:representative_presenter).and_return(representative_presenter)
|
|
50
|
+
allow(presenter).to receive(:representative_id).and_return('123')
|
|
51
|
+
allow(presenter).to receive(:tweeter).and_return("@#{depositor.twitter_handle}")
|
|
52
|
+
allow(presenter).to receive(:human_readable_type).and_return("Work")
|
|
53
|
+
allow(controller).to receive(:current_user).and_return(depositor)
|
|
54
|
+
allow(User).to receive(:find_by_user_key).and_return(depositor.user_key)
|
|
55
|
+
allow(view).to receive(:blacklight_config).and_return(Blacklight::Configuration.new)
|
|
56
|
+
allow(view).to receive(:signed_in?)
|
|
57
|
+
allow(view).to receive(:on_the_dashboard?).and_return(false)
|
|
58
|
+
stub_template 'hyrax/base/_metadata.html.erb' => ''
|
|
59
|
+
stub_template 'hyrax/base/_relationships.html.erb' => ''
|
|
60
|
+
stub_template 'hyrax/base/_show_actions.html.erb' => ''
|
|
61
|
+
stub_template 'hyrax/base/_social_media.html.erb' => ''
|
|
62
|
+
stub_template 'hyrax/base/_citations.html.erb' => ''
|
|
63
|
+
stub_template 'hyrax/base/_items.html.erb' => ''
|
|
64
|
+
stub_template 'hyrax/base/_workflow_actions_widget.html.erb' => ''
|
|
65
|
+
stub_template 'hyrax/base/_work_type.html.erb' => ''
|
|
66
|
+
stub_template 'hyrax/base/_work_title.html.erb' => ''
|
|
67
|
+
stub_template '_masthead.html.erb' => ''
|
|
68
|
+
stub_template 'hyrax/newspaper_titles/_issues_calendar' => 'Issues List In Calendar'
|
|
69
|
+
assign(:presenter, presenter)
|
|
70
|
+
# render template: 'hyrax/base/show.html.erb', layout: 'layouts/hyrax/1_column'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'shows the issue search form partial' do
|
|
74
|
+
render
|
|
75
|
+
expect(rendered).to render_template(partial: 'hyrax/newspaper_titles/_issue_search_form')
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'shows the front page search form partial' do
|
|
79
|
+
render
|
|
80
|
+
expect(rendered).to render_template(partial: 'hyrax/newspaper_titles/_all_front_pages_form')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'shows the issue calendar partial' do
|
|
84
|
+
render
|
|
85
|
+
expect(rendered).to render_template(partial: '_issues_calendar')
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# hyrax/spec/views/hyrax/base/_attribute_rows.html.erb_spec.rb
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
RSpec.describe 'newspaper_works/base/_attribute_rows.html.erb', type: :view do
|
|
5
|
+
let(:url) { "http://example.com" }
|
|
6
|
+
let(:title) { "There and Back Again" }
|
|
7
|
+
let(:issn) { "2049-3630" }
|
|
8
|
+
let(:place_of_publication_label) { "Salt Lake City, Utah, United States" }
|
|
9
|
+
let(:publication_date) { "2019-01-24" }
|
|
10
|
+
let(:rights_statement_uri) { 'http://rightsstatements.org/vocab/InC/1.0/' }
|
|
11
|
+
let(:ability) { double }
|
|
12
|
+
let(:request) { double(host: 'example.org') }
|
|
13
|
+
let(:work) do
|
|
14
|
+
stub_model(NewspaperIssue,
|
|
15
|
+
title: [title],
|
|
16
|
+
issn: issn,
|
|
17
|
+
place_of_publication_label: [place_of_publication_label],
|
|
18
|
+
publication_date: [publication_date],
|
|
19
|
+
related_url: [url],
|
|
20
|
+
rights_statement: [rights_statement_uri])
|
|
21
|
+
end
|
|
22
|
+
let(:solr_document) do
|
|
23
|
+
SolrDocument.new(has_model_ssim: 'NewspaperIssue',
|
|
24
|
+
title_tesim: [title],
|
|
25
|
+
issn_tesim: [issn],
|
|
26
|
+
place_of_publication_label_tesim: [place_of_publication_label],
|
|
27
|
+
publication_date_dtsi: publication_date,
|
|
28
|
+
rights_statement_tesim: [rights_statement_uri],
|
|
29
|
+
related_url_tesim: [url],
|
|
30
|
+
publication_unique_id_ssi: 'sn1234567')
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
let(:presenter) { Hyrax::NewspaperIssuePresenter.new(solr_document, ability, request) }
|
|
34
|
+
|
|
35
|
+
let(:page) do
|
|
36
|
+
render 'newspaper_works/base/attribute_rows', presenter: presenter
|
|
37
|
+
Capybara::Node::Simple.new(rendered)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'shows issn of the work' do
|
|
41
|
+
expect(page).to have_text("2049-3630")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'shows place of publication label of the work' do
|
|
45
|
+
expect(page).to have_text("Place of publication")
|
|
46
|
+
expect(page).to have_text("Salt Lake City, Utah, United States")
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'shows publication date of the work' do
|
|
50
|
+
expect(page).to have_text("01/24/2019")
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'shows rights statement with link to statement URL' do
|
|
54
|
+
expect(page).to have_link("In Copyright", href: rights_statement_uri)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'shows the permalink' do
|
|
58
|
+
expect(page).to have_text('/newspapers/sn1234567/2019-01-24/ed-1')
|
|
59
|
+
end
|
|
60
|
+
end
|