sufia 7.0.0.beta4 → 7.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +0 -1
- data/.rubocop_todo.yml +1 -2
- data/.travis.yml +1 -0
- data/Gemfile +18 -9
- data/README.md +23 -3
- data/app/assets/javascripts/sufia.js +4 -1
- data/app/assets/javascripts/sufia/app.js +15 -3
- data/app/assets/javascripts/sufia/autocomplete.es6 +51 -0
- data/app/assets/javascripts/sufia/autocomplete/language.es6 +25 -0
- data/app/assets/javascripts/sufia/autocomplete/location.es6 +24 -0
- data/app/assets/javascripts/sufia/autocomplete/subject.es6 +26 -0
- data/app/assets/javascripts/sufia/batch_edit.js +8 -5
- data/app/assets/javascripts/sufia/permissions/control.es6 +7 -3
- data/app/assets/javascripts/sufia/save_work/required_fields.es6 +10 -4
- data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +14 -4
- data/app/assets/stylesheets/sufia/_fixedsticky.scss +23 -21
- data/app/assets/stylesheets/sufia/_form-progress.scss +16 -7
- data/app/assets/stylesheets/sufia/_header.scss +2 -1
- data/app/assets/stylesheets/sufia/_settings.scss +4 -0
- data/app/controllers/api/items_controller.rb +2 -2
- data/app/controllers/api/zotero_controller.rb +1 -1
- data/app/controllers/citations_controller.rb +0 -2
- data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +7 -7
- data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +9 -3
- data/app/controllers/concerns/sufia/singular_subresource_controller.rb +6 -1
- data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +1 -1
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +3 -3
- data/app/controllers/concerns/sufia/works_controller_behavior.rb +11 -4
- data/app/controllers/my/highlights_controller.rb +1 -1
- data/app/forms/sufia/forms/batch_edit_form.rb +10 -6
- data/app/forms/sufia/forms/batch_upload_form.rb +2 -2
- data/app/forms/sufia/forms/collection_form.rb +4 -0
- data/app/forms/sufia/forms/work_form.rb +4 -0
- data/app/helpers/sufia/blacklight_override.rb +0 -20
- data/app/helpers/sufia/collections_helper.rb +12 -0
- data/app/helpers/sufia/sufia_helper_behavior.rb +84 -56
- data/app/jobs/batch_create_job.rb +18 -2
- data/app/jobs/content_depositor_change_event_job.rb +13 -6
- data/app/jobs/create_work_job.rb +6 -2
- data/app/models/batch_upload_item.rb +15 -0
- data/app/models/concerns/sufia/ability.rb +7 -4
- data/app/models/concerns/sufia/user.rb +0 -11
- data/app/models/concerns/sufia/work_behavior.rb +1 -0
- data/app/models/concerns/sufia/works/featured.rb +23 -0
- data/app/models/file_download_stat.rb +9 -12
- data/app/models/file_view_stat.rb +5 -15
- data/app/models/proxy_deposit_request.rb +11 -7
- data/app/models/sufia/statistic.rb +65 -0
- data/app/models/work_view_stat.rb +5 -16
- data/app/presenters/file_usage.rb +3 -4
- data/app/presenters/sufia/file_set_presenter.rb +1 -3
- data/app/presenters/sufia/trophy_presenter.rb +28 -0
- data/app/presenters/sufia/user_profile_presenter.rb +1 -1
- data/app/presenters/work_usage.rb +5 -4
- data/app/search_builders/deposit_search_builder.rb +4 -3
- data/app/search_builders/parent_collection_search_builder.rb +1 -1
- data/app/services/sufia/collection_member_service.rb +1 -1
- data/app/services/sufia/user_stat_importer.rb +11 -6
- data/app/views/_controls.html.erb +11 -9
- data/app/views/batch_edits/edit.html.erb +8 -2
- data/app/views/catalog/_index_list_default.html.erb +2 -1
- data/app/views/curation_concerns/base/_form_metadata.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_progress.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_relationships.html.erb +1 -1
- data/app/views/curation_concerns/base/_guts4form.html.erb +6 -2
- data/app/views/curation_concerns/base/_items.html.erb +1 -1
- data/app/views/curation_concerns/base/edit.html.erb +1 -1
- data/app/views/curation_concerns/base/new.html.erb +1 -1
- data/app/views/curation_concerns/file_sets/_permission.html.erb +5 -1
- data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +1 -1
- data/app/views/curation_concerns/file_sets/show.html.erb +1 -1
- data/app/views/dashboard/_index_partials/_heading_actions.html.erb +1 -1
- data/app/views/{error → errors}/404.html.erb +0 -0
- data/app/views/records/edit_fields/_based_near.html.erb +8 -0
- data/app/views/records/edit_fields/_language.html.erb +8 -0
- data/app/views/records/edit_fields/_subject.html.erb +8 -0
- data/app/views/stats/work.html.erb +1 -1
- data/app/views/sufia/batch_uploads/_form.html.erb +1 -1
- data/app/views/sufia/homepage/_home_header.html.erb +1 -1
- data/app/views/sufia/homepage/_sortable_featured.html.erb +1 -1
- data/app/views/transfers/new.html.erb +3 -1
- data/app/views/users/_contributions.html.erb +1 -1
- data/config/locales/sufia.en.yml +3 -2
- data/config/routes.rb +0 -7
- data/lib/generators/sufia/install_generator.rb +0 -24
- data/lib/generators/sufia/templates/catalog_controller.rb +4 -3
- data/lib/generators/sufia/templates/config/sufia.rb +4 -2
- data/lib/generators/sufia/upgrade700_generator.rb +7 -9
- data/lib/generators/sufia/work_generator.rb +56 -0
- data/lib/sufia.rb +4 -1
- data/lib/sufia/arkivo/actor.rb +1 -1
- data/lib/sufia/configuration.rb +15 -3
- data/lib/sufia/engine.rb +1 -10
- data/lib/sufia/version.rb +1 -1
- data/spec/controllers/api/items_controller_spec.rb +20 -7
- data/spec/controllers/sufia/batch_uploads_controller_spec.rb +4 -3
- data/spec/controllers/transfers_controller_spec.rb +3 -11
- data/spec/controllers/users_controller_spec.rb +2 -1
- data/spec/features/batch_edit_spec.rb +17 -2
- data/spec/forms/sufia/forms/batch_edit_form_spec.rb +2 -0
- data/spec/forms/sufia/forms/batch_upload_form_spec.rb +1 -1
- data/spec/helpers/blacklight_helper_spec.rb +36 -26
- data/spec/helpers/{generic_work_helper_spec.rb → sufia/collections_helper_spec.rb} +1 -1
- data/spec/helpers/sufia_helper_spec.rb +70 -32
- data/spec/javascripts/autocomplete_spec.js.coffee +7 -7
- data/spec/javascripts/save_work_spec.js +20 -20
- data/spec/lib/sufia/configuration_spec.rb +30 -0
- data/spec/lib/sufia/user_stat_importer_spec.rb +21 -36
- data/spec/models/file_download_stat_spec.rb +8 -8
- data/spec/models/file_view_stat_spec.rb +8 -8
- data/spec/models/generic_work_spec.rb +24 -0
- data/spec/models/proxy_deposit_request_spec.rb +2 -4
- data/spec/models/sufia/ability_spec.rb +7 -13
- data/spec/models/user_spec.rb +0 -14
- data/spec/models/work_view_stat_spec.rb +22 -8
- data/spec/presenters/sufia/file_usage_spec.rb +0 -4
- data/spec/presenters/sufia/trophy_presenter_spec.rb +46 -0
- data/spec/presenters/sufia/user_profile_presenter_spec.rb +4 -1
- data/spec/presenters/sufia/work_usage_spec.rb +8 -17
- data/spec/routing/route_spec.rb +0 -6
- data/spec/spec_helper.rb +8 -2
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
- data/spec/views/batch_edits/edit.html.erb_spec.rb +8 -2
- data/spec/views/catalog/_index_list_default.html.erb_spec.rb +8 -6
- data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +3 -0
- data/spec/views/curation_concerns/file_sets/_permission.html.erb_spec.rb +16 -0
- data/spec/views/curation_concerns/file_sets/show.html.erb_spec.rb +0 -2
- data/spec/views/records/edit_fields/_based_near.html.erb_spec.rb +20 -0
- data/spec/views/records/edit_fields/_language.html.erb_spec.rb +20 -0
- data/spec/views/records/edit_fields/_subject.html.erb_spec.rb +20 -0
- data/spec/views/{homepage → sufia/homepage}/_announcement.html.erb_spec.rb +0 -0
- data/spec/views/{homepage → sufia/homepage}/_featured_works.html.erb_spec.rb +0 -0
- data/spec/views/{homepage → sufia/homepage}/_home_header.html.erb_spec.rb +0 -0
- data/spec/views/sufia/homepage/_sortable_featured.html.erb_spec.rb +21 -0
- data/spec/views/users/edit.html.erb_spec.rb +5 -5
- data/spec/views/users/show.html.erb_spec.rb +5 -3
- data/sufia.gemspec +4 -3
- data/tasks/noid.rake +2 -2
- data/tasks/sufia-dev.rake +1 -1
- metadata +73 -68
- data/app/assets/javascripts/sufia/edit_metadata.js +0 -87
- data/app/controllers/authorities_controller.rb +0 -19
- data/app/helpers/generic_work_helper.rb +0 -10
- data/app/helpers/sufia_url_helper.rb +0 -14
- data/app/models/concerns/sufia/file_stat_utils.rb +0 -33
- data/app/models/concerns/sufia/work_stat_utils.rb +0 -33
- data/app/models/geo_names_resource.rb +0 -18
- data/app/models/local_authority.rb +0 -101
- data/app/models/local_authority_entry.rb +0 -3
- data/app/models/subject_local_authority_entry.rb +0 -2
- data/app/views/curation_concerns/generic_works/_generic_work.html.erb +0 -3
- data/app/views/error/401.html.erb +0 -18
- data/app/views/error/500.html.erb +0 -9
- data/app/views/error/single_use_error.html.erb +0 -19
- data/lib/generators/sufia/geonames_username_config_generator.rb +0 -20
- data/spec/controllers/authorities_controller_spec.rb +0 -18
- data/spec/fixtures/cities15000.tsv +0 -149
- data/spec/fixtures/genreForms.nt +0 -471
- data/spec/fixtures/lexvo.rdf +0 -3108
- data/spec/helpers/sufia_url_helper_spec.rb +0 -18
- data/spec/models/geo_names_resource_spec.rb +0 -30
- data/spec/models/local_authority_spec.rb +0 -108
- data/vendor/assets/javascripts/almond.js +0 -430
@@ -47,6 +47,7 @@ class CatalogController < ApplicationController
|
|
47
47
|
config.add_facet_field solr_name("human_readable_type", :facetable), label: "Type", limit: 5
|
48
48
|
config.add_facet_field solr_name("resource_type", :facetable), label: "Resource Type", limit: 5
|
49
49
|
config.add_facet_field solr_name("creator", :facetable), label: "Creator", limit: 5
|
50
|
+
config.add_facet_field solr_name("contributor", :facetable), label: "Contributor", limit: 5
|
50
51
|
config.add_facet_field solr_name("keyword", :facetable), label: "Keyword", limit: 5
|
51
52
|
config.add_facet_field solr_name("subject", :facetable), label: "Subject", limit: 5
|
52
53
|
config.add_facet_field solr_name("language", :facetable), label: "Language", limit: 5
|
@@ -66,14 +67,14 @@ class CatalogController < ApplicationController
|
|
66
67
|
config.add_index_field solr_name("keyword", :stored_searchable), label: "Keyword", itemprop: 'keywords', link_to_search: solr_name("keyword", :facetable)
|
67
68
|
config.add_index_field solr_name("subject", :stored_searchable), label: "Subject", itemprop: 'about', link_to_search: solr_name("subject", :facetable)
|
68
69
|
config.add_index_field solr_name("creator", :stored_searchable), label: "Creator", itemprop: 'creator', link_to_search: solr_name("creator", :facetable)
|
69
|
-
config.add_index_field solr_name("contributor", :stored_searchable), label: "Contributor", itemprop: 'contributor',
|
70
|
+
config.add_index_field solr_name("contributor", :stored_searchable), label: "Contributor", itemprop: 'contributor', link_to_search: solr_name("contributor", :facetable)
|
70
71
|
config.add_index_field solr_name("proxy_depositor", :symbol), label: "Depositor", helper_method: :link_to_profile
|
71
72
|
config.add_index_field solr_name("depositor"), label: "Owner", helper_method: :link_to_profile
|
72
73
|
config.add_index_field solr_name("publisher", :stored_searchable), label: "Publisher", itemprop: 'publisher', link_to_search: solr_name("publisher", :facetable)
|
73
74
|
config.add_index_field solr_name("based_near", :stored_searchable), label: "Location", itemprop: 'contentLocation', link_to_search: solr_name("based_near", :facetable)
|
74
75
|
config.add_index_field solr_name("language", :stored_searchable), label: "Language", itemprop: 'inLanguage', link_to_search: solr_name("language", :facetable)
|
75
|
-
config.add_index_field solr_name("date_uploaded", :stored_sortable, type: :date), label: "Date Uploaded", itemprop: 'datePublished'
|
76
|
-
config.add_index_field solr_name("date_modified", :stored_sortable, type: :date), label: "Date Modified", itemprop: 'dateModified'
|
76
|
+
config.add_index_field solr_name("date_uploaded", :stored_sortable, type: :date), label: "Date Uploaded", itemprop: 'datePublished'
|
77
|
+
config.add_index_field solr_name("date_modified", :stored_sortable, type: :date), label: "Date Modified", itemprop: 'dateModified'
|
77
78
|
config.add_index_field solr_name("date_created", :stored_searchable), label: "Date Created", itemprop: 'dateCreated'
|
78
79
|
config.add_index_field solr_name("rights", :stored_searchable), label: "Rights", helper_method: :rights_statement_links
|
79
80
|
config.add_index_field solr_name("resource_type", :stored_searchable), label: "Resource Type", link_to_search: solr_name("resource_type", :facetable)
|
@@ -1,6 +1,4 @@
|
|
1
1
|
Sufia.config do |config|
|
2
|
-
config.register_curation_concern :generic_work
|
3
|
-
|
4
2
|
# Email recipient of messages sent via the contact form
|
5
3
|
# config.contact_email = "repo-admin@example.org"
|
6
4
|
|
@@ -103,3 +101,7 @@ Sufia.config do |config|
|
|
103
101
|
end
|
104
102
|
|
105
103
|
Date::DATE_FORMATS[:standard] = "%m/%d/%Y"
|
104
|
+
|
105
|
+
Qa::Authorities::Local.register_subauthority('subjects', 'Qa::Authorities::Local::TableBasedAuthority')
|
106
|
+
Qa::Authorities::Local.register_subauthority('languages', 'Qa::Authorities::Local::TableBasedAuthority')
|
107
|
+
Qa::Authorities::Local.register_subauthority('genres', 'Qa::Authorities::Local::TableBasedAuthority')
|
@@ -19,15 +19,13 @@ This generator for upgrading sufia from 6.0.0 to 7.0 makes the following changes
|
|
19
19
|
gsub_file 'app/controllers/catalog_controller.rb', '[:add_access_controls_to_solr_params, :add_advanced_parse_q_to_solr]', '[:add_advanced_parse_q_to_solr] + search_params_logic + [:add_access_controls_to_solr_params]'
|
20
20
|
end
|
21
21
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
inject_into_file file_path, after: /include CurationConcerns::CurationConcernController/ do
|
26
|
-
"\n # Adds Sufia behaviors to the controller.\n" \
|
27
|
-
" include Sufia::WorksControllerBehavior\n"
|
28
|
-
end
|
29
|
-
else
|
30
|
-
puts " \e[31mFailure\e[0m Sufia requires a CurationConcerns::GenericWorksController object. This generator assumes that the model is defined in the file #{file_path}, which does not exist."
|
22
|
+
def qa_routes
|
23
|
+
insert_into_file "config/routes.rb", after: ".draw do" do
|
24
|
+
"\n mount Qa::Engine => '/authorities'\n"
|
31
25
|
end
|
32
26
|
end
|
27
|
+
|
28
|
+
def qa_tables
|
29
|
+
generate 'qa:local:tables'
|
30
|
+
end
|
33
31
|
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'generators/curation_concerns/work/work_generator'
|
2
|
+
|
3
|
+
module Sufia
|
4
|
+
class WorkGenerator < CurationConcerns::WorkGenerator
|
5
|
+
source_root CurationConcerns::WorkGenerator.source_root
|
6
|
+
desc """
|
7
|
+
This generator makes the following changes to your application:
|
8
|
+
1. Generates work model
|
9
|
+
2. Injects sufia behavior into model
|
10
|
+
3. Injects sufia behavior into form
|
11
|
+
"""
|
12
|
+
|
13
|
+
def create_model
|
14
|
+
say_status("info", "GENERATING WORK MODEL", :blue)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def register_work
|
19
|
+
inject_into_file 'config/initializers/sufia.rb', after: "Sufia.config do |config|\n" do
|
20
|
+
" # Injected via `rails g sufia:work #{class_name}`\n" \
|
21
|
+
" config.register_curation_concern :#{file_name}\n"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def inject_sufia_work_behavior
|
26
|
+
insert_into_file "app/models/#{name.underscore}.rb", after: 'include ::CurationConcerns::BasicMetadata' do
|
27
|
+
"\n include Sufia::WorkBehavior" \
|
28
|
+
"\n self.human_readable_type = 'Work'"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def inject_sufia_form
|
33
|
+
file_path = "app/forms/curation_concerns/#{file_name}_form.rb"
|
34
|
+
if File.exist?(file_path)
|
35
|
+
gsub_file file_path, /CurationConcerns::Forms::WorkForm/, "Sufia::Forms::WorkForm"
|
36
|
+
inject_into_file file_path, after: /model_class = ::.*$/ do
|
37
|
+
"\n self.terms += [:resource_type]\n"
|
38
|
+
end
|
39
|
+
else
|
40
|
+
puts " \e[31mFailure\e[0m Sufia requires a #{class_name}Form object. This generator assumes that the model is defined in the file #{file_path}, which does not exist."
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def inject_sufia_work_controller_behavior
|
45
|
+
file_path = "app/controllers/curation_concerns/#{plural_file_name}_controller.rb"
|
46
|
+
if File.exist?(file_path)
|
47
|
+
inject_into_file file_path, after: /include CurationConcerns::CurationConcernController/ do
|
48
|
+
"\n # Adds Sufia behaviors to the controller.\n" \
|
49
|
+
" include Sufia::WorksControllerBehavior\n"
|
50
|
+
end
|
51
|
+
else
|
52
|
+
puts " \e[31mFailure\e[0m Sufia requires a #{controller_class_name} object. This generator assumes that the model is defined in the file #{file_path}, which does not exist."
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/sufia.rb
CHANGED
@@ -4,7 +4,6 @@ require 'redis-namespace'
|
|
4
4
|
require 'mailboxer'
|
5
5
|
require 'acts_as_follower'
|
6
6
|
require 'carrierwave'
|
7
|
-
require "active_resource" # used by FileSet to catch errors & by GeoNamesResource
|
8
7
|
require 'rails_autolink'
|
9
8
|
require 'font-awesome-rails'
|
10
9
|
require 'tinymce-rails'
|
@@ -41,4 +40,8 @@ module Sufia
|
|
41
40
|
|
42
41
|
@config
|
43
42
|
end
|
43
|
+
|
44
|
+
def self.primary_work_type
|
45
|
+
CurationConcerns::WorkRelation::DummyModel.primary_concern
|
46
|
+
end
|
44
47
|
end
|
data/lib/sufia/arkivo/actor.rb
CHANGED
@@ -17,7 +17,7 @@ module Sufia
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def create_work_from_item
|
20
|
-
work =
|
20
|
+
work = Sufia.primary_work_type.new
|
21
21
|
work_actor = CurationConcerns::CurationConcern.actor(work, user)
|
22
22
|
create_attrs = attributes.merge(arkivo_checksum: item['file']['md5'])
|
23
23
|
raise "Unable to create work. #{work.errors.messages}" unless work_actor.create(create_attrs)
|
data/lib/sufia/configuration.rb
CHANGED
@@ -32,6 +32,7 @@ module Sufia
|
|
32
32
|
def analytics
|
33
33
|
@analytics ||= false
|
34
34
|
end
|
35
|
+
|
35
36
|
attr_writer :citations
|
36
37
|
def citations
|
37
38
|
@citations ||= false
|
@@ -52,9 +53,8 @@ module Sufia
|
|
52
53
|
@arkivo_api ||= false
|
53
54
|
end
|
54
55
|
|
55
|
-
|
56
|
-
|
57
|
-
@geonames_username ||= ""
|
56
|
+
def geonames_username=(username)
|
57
|
+
Qa::Authorities::Geonames.username = username
|
58
58
|
end
|
59
59
|
|
60
60
|
attr_writer :active_deposit_agreement_acceptance
|
@@ -86,6 +86,11 @@ module Sufia
|
|
86
86
|
@always_display_share_button
|
87
87
|
end
|
88
88
|
|
89
|
+
attr_writer :google_analytics_id
|
90
|
+
def google_analytics_id
|
91
|
+
@google_analytics_id ||= nil
|
92
|
+
end
|
93
|
+
|
89
94
|
# Defaulting analytic start date to whenever the file was uploaded by leaving it blank
|
90
95
|
attr_writer :analytic_start_date
|
91
96
|
attr_reader :analytic_start_date
|
@@ -128,5 +133,12 @@ module Sufia
|
|
128
133
|
def subject_prefix
|
129
134
|
@subject_prefix ||= "Contact form:"
|
130
135
|
end
|
136
|
+
|
137
|
+
attr_writer :model_to_create
|
138
|
+
# Returns a lambda that takes a hash of attributes and returns a string of the model
|
139
|
+
# name. This is called by the batch upload process
|
140
|
+
def model_to_create
|
141
|
+
@model_to_create ||= ->(_attributes) { Sufia.primary_work_type.model_name.name }
|
142
|
+
end
|
131
143
|
end
|
132
144
|
end
|
data/lib/sufia/engine.rb
CHANGED
@@ -6,6 +6,7 @@ module Sufia
|
|
6
6
|
require 'breadcrumbs_on_rails'
|
7
7
|
require 'jquery-ui-rails'
|
8
8
|
require 'flot-rails'
|
9
|
+
require 'almond-rails'
|
9
10
|
require 'zeroclipboard-rails'
|
10
11
|
|
11
12
|
config.autoload_paths += %W(
|
@@ -65,15 +66,5 @@ module Sufia
|
|
65
66
|
# in this way:
|
66
67
|
# https://github.com/rails/sprockets/issues/73#issuecomment-139113466
|
67
68
|
end
|
68
|
-
|
69
|
-
config.after_initialize do
|
70
|
-
begin
|
71
|
-
LocalAuthority.register_vocabulary('generic_works', "subject", "lc_subjects")
|
72
|
-
LocalAuthority.register_vocabulary('generic_works', "language", "lexvo_languages")
|
73
|
-
LocalAuthority.register_vocabulary('generic_works', "tag", "lc_genres")
|
74
|
-
rescue ActiveRecord::StatementInvalid => e
|
75
|
-
Rails.logger.error "tables for vocabularies missing #{e.class}"
|
76
|
-
end
|
77
|
-
end
|
78
69
|
end
|
79
70
|
end
|
data/lib/sufia/version.rb
CHANGED
@@ -68,8 +68,10 @@ describe API::ItemsController, type: :controller do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
context 'with a resource not found in the repository' do
|
71
|
+
let(:relation) { double }
|
71
72
|
before do
|
72
|
-
allow(
|
73
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
74
|
+
allow(relation).to receive(:find).with(default_work.id).and_raise(ActiveFedora::ObjectNotFoundError)
|
73
75
|
get :show, format: :json, id: default_work.id, token: token
|
74
76
|
end
|
75
77
|
|
@@ -169,10 +171,12 @@ describe API::ItemsController, type: :controller do
|
|
169
171
|
let(:put_item) { FactoryGirl.json(:put_item, token: token) }
|
170
172
|
let(:token) { user.arkivo_token }
|
171
173
|
let(:gw) { build :generic_work, id: '123' }
|
174
|
+
let(:relation) { double }
|
172
175
|
|
173
176
|
before do
|
174
177
|
# Mock ActiveFedora
|
175
|
-
allow(
|
178
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
179
|
+
allow(relation).to receive(:find).with(gw.id).and_return(gw)
|
176
180
|
# Mock Arkivo Actor
|
177
181
|
allow(arkivo_actor).to receive(:update_work_from_item)
|
178
182
|
end
|
@@ -198,12 +202,15 @@ describe API::ItemsController, type: :controller do
|
|
198
202
|
|
199
203
|
context 'with a valid item, matching token, authorized resource, but not Arkivo-deposited' do
|
200
204
|
let(:non_arkivo_gw) { create :generic_work, id: 'abc123xyz', arkivo_checksum: nil }
|
205
|
+
let(:relation) { double }
|
201
206
|
before do
|
202
207
|
# Mock user authorization
|
203
208
|
allow(controller).to receive(:user).and_return(user)
|
204
209
|
allow(user).to receive(:can?).and_return(true)
|
205
210
|
# Mock ActiveFedora for non_arkivo_work
|
206
|
-
allow(
|
211
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
212
|
+
allow(relation).to receive(:find).with(non_arkivo_gw.id).and_return(non_arkivo_gw)
|
213
|
+
|
207
214
|
# Post an update to a work with a nil arkivo_checksum
|
208
215
|
put :update, put_item, id: non_arkivo_gw.id, format: :json
|
209
216
|
end
|
@@ -216,8 +223,10 @@ describe API::ItemsController, type: :controller do
|
|
216
223
|
end
|
217
224
|
|
218
225
|
context 'with a valid item, matching token, missing resource' do
|
226
|
+
let(:relation) { double }
|
219
227
|
before do
|
220
|
-
allow(
|
228
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
229
|
+
allow(relation).to receive(:find).with(gw.id) do
|
221
230
|
raise(ActiveFedora::ObjectNotFoundError)
|
222
231
|
end
|
223
232
|
put :update, put_item, id: gw.id, format: :json
|
@@ -275,10 +284,12 @@ describe API::ItemsController, type: :controller do
|
|
275
284
|
let(:item) { FactoryGirl.json(:post_item, token: token) }
|
276
285
|
let(:item_hash) { JSON.parse(item) }
|
277
286
|
let(:gw) { build :generic_work, id: '123' }
|
287
|
+
let(:relation) { double }
|
278
288
|
|
279
289
|
before do
|
280
290
|
# Mock ActiveFedora
|
281
|
-
allow(
|
291
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
292
|
+
allow(relation).to receive(:find).with(gw.id).and_return(gw)
|
282
293
|
# Mock ArkivoActor destroy work
|
283
294
|
allow(arkivo_actor).to receive(:destroy_work)
|
284
295
|
end
|
@@ -329,7 +340,8 @@ describe API::ItemsController, type: :controller do
|
|
329
340
|
allow(controller).to receive(:user).and_return(user)
|
330
341
|
allow(user).to receive(:can?).and_return(true)
|
331
342
|
# Mock ActiveFedora for non_arkivo_work
|
332
|
-
allow(
|
343
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
344
|
+
allow(relation).to receive(:find).with(non_arkivo_gw.id).and_return(non_arkivo_gw)
|
333
345
|
# Make call to destroy
|
334
346
|
delete :destroy, format: :json, id: non_arkivo_gw.id, token: token
|
335
347
|
end
|
@@ -344,7 +356,8 @@ describe API::ItemsController, type: :controller do
|
|
344
356
|
let(:not_found_id) { '409' }
|
345
357
|
before do
|
346
358
|
# Mock ActiveFedora
|
347
|
-
allow(
|
359
|
+
allow(CurationConcerns::WorkRelation).to receive(:new).and_return(relation)
|
360
|
+
allow(relation).to receive(:find).with(not_found_id).and_raise(ActiveFedora::ObjectNotFoundError)
|
348
361
|
delete :destroy, format: :json, id: not_found_id, token: token
|
349
362
|
end
|
350
363
|
|
@@ -11,6 +11,7 @@ describe Sufia::BatchUploadsController do
|
|
11
11
|
expect(assigns[:form]).to be_kind_of Sufia::Forms::BatchUploadForm
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
14
15
|
describe "#create" do
|
15
16
|
context "enquing a update job" do
|
16
17
|
it "is successful" do
|
@@ -24,7 +25,7 @@ describe Sufia::BatchUploadsController do
|
|
24
25
|
post :create, title: { '1' => 'foo' },
|
25
26
|
resource_type: { '1' => 'Article' },
|
26
27
|
uploaded_files: ['1'],
|
27
|
-
|
28
|
+
batch_upload_item: { keyword: [""], visibility: 'open' }
|
28
29
|
expect(response).to redirect_to Sufia::Engine.routes.url_helpers.dashboard_works_path
|
29
30
|
expect(flash[:notice]).to include("Your files are being processed")
|
30
31
|
end
|
@@ -34,7 +35,7 @@ describe Sufia::BatchUploadsController do
|
|
34
35
|
it "redirects to my shares page" do
|
35
36
|
allow(BatchCreateJob).to receive(:perform_later)
|
36
37
|
post :create,
|
37
|
-
|
38
|
+
batch_upload_item: {
|
38
39
|
permissions_attributes: [
|
39
40
|
{ type: "group", name: "public", access: "read" }
|
40
41
|
],
|
@@ -51,7 +52,7 @@ describe Sufia::BatchUploadsController do
|
|
51
52
|
before do
|
52
53
|
controller.params = { title: { '1' => 'foo' },
|
53
54
|
uploaded_files: ['1'],
|
54
|
-
|
55
|
+
batch_upload_item: { keyword: [""], visibility: 'open' } }
|
55
56
|
end
|
56
57
|
it "excludes uploaded_files and title" do
|
57
58
|
expect(subject).to eq('keyword' => [],
|
@@ -55,17 +55,13 @@ describe TransfersController, type: :controller do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
describe "#new" do
|
58
|
-
let(:work)
|
59
|
-
GenericWork.create!(title: ['a work']) do |w|
|
60
|
-
w.apply_depositor_metadata(user.user_key)
|
61
|
-
end
|
62
|
-
end
|
58
|
+
let(:work) { create(:work, user: user) }
|
63
59
|
context 'when user is the depositor' do
|
64
60
|
it "is successful" do
|
65
61
|
sign_in user
|
66
62
|
get :new, id: work.id
|
67
63
|
expect(response).to be_success
|
68
|
-
expect(assigns[:
|
64
|
+
expect(assigns[:work]).to eq(work)
|
69
65
|
expect(assigns[:proxy_deposit_request]).to be_kind_of ProxyDepositRequest
|
70
66
|
expect(assigns[:proxy_deposit_request].work_id).to eq(work.id)
|
71
67
|
end
|
@@ -73,11 +69,7 @@ describe TransfersController, type: :controller do
|
|
73
69
|
end
|
74
70
|
|
75
71
|
describe "#create" do
|
76
|
-
let(:work)
|
77
|
-
GenericWork.create!(title: ['a work']) do |w|
|
78
|
-
w.apply_depositor_metadata(user.user_key)
|
79
|
-
end
|
80
|
-
end
|
72
|
+
let(:work) { create(:work, user: user) }
|
81
73
|
it "is successful" do
|
82
74
|
allow_any_instance_of(User).to receive(:display_name).and_return("Jill Z. User")
|
83
75
|
expect {
|
@@ -117,7 +117,8 @@ describe UsersController, type: :controller do
|
|
117
117
|
it "show the user profile if user exists" do
|
118
118
|
get :edit, id: user.user_key
|
119
119
|
expect(response).to be_success
|
120
|
-
expect(assigns[:trophies]).to
|
120
|
+
expect(assigns[:trophies]).to all(be_kind_of Sufia::TrophyPresenter)
|
121
|
+
expect(assigns[:trophies].map(&:id)).to match_array [work1.id, work2.id, work3.id]
|
121
122
|
end
|
122
123
|
end
|
123
124
|
end
|
@@ -14,7 +14,13 @@ describe 'Batch management of works', type: :feature do
|
|
14
14
|
before do
|
15
15
|
check 'check_all'
|
16
16
|
click_on 'batch-edit'
|
17
|
-
fields.each
|
17
|
+
fields.each do |f|
|
18
|
+
if f == "resource_type"
|
19
|
+
select_field(f, 'Book')
|
20
|
+
else
|
21
|
+
fill_in_field_fill(f)
|
22
|
+
end
|
23
|
+
end
|
18
24
|
fields.each { |f| fill_in_field_save(f) }
|
19
25
|
fields.each { |f| fill_in_field_wait(f) }
|
20
26
|
work1.reload
|
@@ -32,6 +38,7 @@ describe 'Batch management of works', type: :feature do
|
|
32
38
|
expect(work1.identifier).to eq ['NEW identifier']
|
33
39
|
expect(work1.based_near).to eq ['NEW based_near']
|
34
40
|
expect(work1.related_url).to eq ['NEW related_url']
|
41
|
+
expect(work1.resource_type).to eq ['Book']
|
35
42
|
expect(work2.creator).to eq ['NEW creator']
|
36
43
|
expect(work2.contributor).to eq ['NEW contributor']
|
37
44
|
expect(work2.description).to eq ['NEW description']
|
@@ -43,6 +50,7 @@ describe 'Batch management of works', type: :feature do
|
|
43
50
|
expect(work2.identifier).to eq ['NEW identifier']
|
44
51
|
expect(work2.based_near).to eq ['NEW based_near']
|
45
52
|
expect(work2.related_url).to eq ['NEW related_url']
|
53
|
+
expect(work2.resource_type).to eq ['Book']
|
46
54
|
|
47
55
|
# Reload the form and verify
|
48
56
|
visit '/dashboard/works'
|
@@ -71,6 +79,8 @@ describe 'Batch management of works', type: :feature do
|
|
71
79
|
expect(page).to have_css "input#generic_work_based_near[value*='NEW based_near']"
|
72
80
|
expand("related_url")
|
73
81
|
expect(page).to have_css "input#generic_work_related_url[value*='NEW related_url']"
|
82
|
+
expand("resource_type")
|
83
|
+
expect(page).to have_select "generic_work_resource_type", selected: 'Book'
|
74
84
|
end
|
75
85
|
end
|
76
86
|
|
@@ -90,7 +100,7 @@ describe 'Batch management of works', type: :feature do
|
|
90
100
|
def fields
|
91
101
|
[
|
92
102
|
"creator", "contributor", "description", "keyword", "publisher", "date_created",
|
93
|
-
"subject", "language", "identifier", "based_near", "related_url"
|
103
|
+
"subject", "language", "identifier", "based_near", "related_url", "resource_type"
|
94
104
|
]
|
95
105
|
end
|
96
106
|
|
@@ -122,4 +132,9 @@ describe 'Batch management of works', type: :feature do
|
|
122
132
|
link.click if link["class"].include?("collapsed")
|
123
133
|
end
|
124
134
|
end
|
135
|
+
|
136
|
+
def select_field(id, option)
|
137
|
+
expand(id)
|
138
|
+
select(option, from: "generic_work_#{id}")
|
139
|
+
end
|
125
140
|
end
|
@@ -13,6 +13,7 @@ describe Sufia::Forms::BatchEditForm do
|
|
13
13
|
:contributor,
|
14
14
|
:description,
|
15
15
|
:keyword,
|
16
|
+
:resource_type,
|
16
17
|
:rights,
|
17
18
|
:publisher,
|
18
19
|
:date_created,
|
@@ -29,6 +30,7 @@ describe Sufia::Forms::BatchEditForm do
|
|
29
30
|
expect(form.model.contributor).to eq ["contributor1", "contributor2"]
|
30
31
|
expect(form.model.description).to eq ["description1", "description2"]
|
31
32
|
expect(form.model.keyword).to eq ["abc", "123"]
|
33
|
+
expect(form.model.resource_type).to eq ["bar"]
|
32
34
|
expect(form.model.rights).to eq ["rights1", "rights2"]
|
33
35
|
expect(form.model.publisher).to eq ["Rand McNally"]
|
34
36
|
expect(form.model.subject).to eq ["subject1", "subject2"]
|