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.
Files changed (164) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -1
  3. data/.rubocop_todo.yml +1 -2
  4. data/.travis.yml +1 -0
  5. data/Gemfile +18 -9
  6. data/README.md +23 -3
  7. data/app/assets/javascripts/sufia.js +4 -1
  8. data/app/assets/javascripts/sufia/app.js +15 -3
  9. data/app/assets/javascripts/sufia/autocomplete.es6 +51 -0
  10. data/app/assets/javascripts/sufia/autocomplete/language.es6 +25 -0
  11. data/app/assets/javascripts/sufia/autocomplete/location.es6 +24 -0
  12. data/app/assets/javascripts/sufia/autocomplete/subject.es6 +26 -0
  13. data/app/assets/javascripts/sufia/batch_edit.js +8 -5
  14. data/app/assets/javascripts/sufia/permissions/control.es6 +7 -3
  15. data/app/assets/javascripts/sufia/save_work/required_fields.es6 +10 -4
  16. data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +14 -4
  17. data/app/assets/stylesheets/sufia/_fixedsticky.scss +23 -21
  18. data/app/assets/stylesheets/sufia/_form-progress.scss +16 -7
  19. data/app/assets/stylesheets/sufia/_header.scss +2 -1
  20. data/app/assets/stylesheets/sufia/_settings.scss +4 -0
  21. data/app/controllers/api/items_controller.rb +2 -2
  22. data/app/controllers/api/zotero_controller.rb +1 -1
  23. data/app/controllers/citations_controller.rb +0 -2
  24. data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +7 -7
  25. data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +9 -3
  26. data/app/controllers/concerns/sufia/singular_subresource_controller.rb +6 -1
  27. data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +1 -1
  28. data/app/controllers/concerns/sufia/users_controller_behavior.rb +3 -3
  29. data/app/controllers/concerns/sufia/works_controller_behavior.rb +11 -4
  30. data/app/controllers/my/highlights_controller.rb +1 -1
  31. data/app/forms/sufia/forms/batch_edit_form.rb +10 -6
  32. data/app/forms/sufia/forms/batch_upload_form.rb +2 -2
  33. data/app/forms/sufia/forms/collection_form.rb +4 -0
  34. data/app/forms/sufia/forms/work_form.rb +4 -0
  35. data/app/helpers/sufia/blacklight_override.rb +0 -20
  36. data/app/helpers/sufia/collections_helper.rb +12 -0
  37. data/app/helpers/sufia/sufia_helper_behavior.rb +84 -56
  38. data/app/jobs/batch_create_job.rb +18 -2
  39. data/app/jobs/content_depositor_change_event_job.rb +13 -6
  40. data/app/jobs/create_work_job.rb +6 -2
  41. data/app/models/batch_upload_item.rb +15 -0
  42. data/app/models/concerns/sufia/ability.rb +7 -4
  43. data/app/models/concerns/sufia/user.rb +0 -11
  44. data/app/models/concerns/sufia/work_behavior.rb +1 -0
  45. data/app/models/concerns/sufia/works/featured.rb +23 -0
  46. data/app/models/file_download_stat.rb +9 -12
  47. data/app/models/file_view_stat.rb +5 -15
  48. data/app/models/proxy_deposit_request.rb +11 -7
  49. data/app/models/sufia/statistic.rb +65 -0
  50. data/app/models/work_view_stat.rb +5 -16
  51. data/app/presenters/file_usage.rb +3 -4
  52. data/app/presenters/sufia/file_set_presenter.rb +1 -3
  53. data/app/presenters/sufia/trophy_presenter.rb +28 -0
  54. data/app/presenters/sufia/user_profile_presenter.rb +1 -1
  55. data/app/presenters/work_usage.rb +5 -4
  56. data/app/search_builders/deposit_search_builder.rb +4 -3
  57. data/app/search_builders/parent_collection_search_builder.rb +1 -1
  58. data/app/services/sufia/collection_member_service.rb +1 -1
  59. data/app/services/sufia/user_stat_importer.rb +11 -6
  60. data/app/views/_controls.html.erb +11 -9
  61. data/app/views/batch_edits/edit.html.erb +8 -2
  62. data/app/views/catalog/_index_list_default.html.erb +2 -1
  63. data/app/views/curation_concerns/base/_form_metadata.html.erb +1 -1
  64. data/app/views/curation_concerns/base/_form_progress.html.erb +1 -1
  65. data/app/views/curation_concerns/base/_form_relationships.html.erb +1 -1
  66. data/app/views/curation_concerns/base/_guts4form.html.erb +6 -2
  67. data/app/views/curation_concerns/base/_items.html.erb +1 -1
  68. data/app/views/curation_concerns/base/edit.html.erb +1 -1
  69. data/app/views/curation_concerns/base/new.html.erb +1 -1
  70. data/app/views/curation_concerns/file_sets/_permission.html.erb +5 -1
  71. data/app/views/curation_concerns/file_sets/media_display/_default.html.erb +1 -1
  72. data/app/views/curation_concerns/file_sets/show.html.erb +1 -1
  73. data/app/views/dashboard/_index_partials/_heading_actions.html.erb +1 -1
  74. data/app/views/{error → errors}/404.html.erb +0 -0
  75. data/app/views/records/edit_fields/_based_near.html.erb +8 -0
  76. data/app/views/records/edit_fields/_language.html.erb +8 -0
  77. data/app/views/records/edit_fields/_subject.html.erb +8 -0
  78. data/app/views/stats/work.html.erb +1 -1
  79. data/app/views/sufia/batch_uploads/_form.html.erb +1 -1
  80. data/app/views/sufia/homepage/_home_header.html.erb +1 -1
  81. data/app/views/sufia/homepage/_sortable_featured.html.erb +1 -1
  82. data/app/views/transfers/new.html.erb +3 -1
  83. data/app/views/users/_contributions.html.erb +1 -1
  84. data/config/locales/sufia.en.yml +3 -2
  85. data/config/routes.rb +0 -7
  86. data/lib/generators/sufia/install_generator.rb +0 -24
  87. data/lib/generators/sufia/templates/catalog_controller.rb +4 -3
  88. data/lib/generators/sufia/templates/config/sufia.rb +4 -2
  89. data/lib/generators/sufia/upgrade700_generator.rb +7 -9
  90. data/lib/generators/sufia/work_generator.rb +56 -0
  91. data/lib/sufia.rb +4 -1
  92. data/lib/sufia/arkivo/actor.rb +1 -1
  93. data/lib/sufia/configuration.rb +15 -3
  94. data/lib/sufia/engine.rb +1 -10
  95. data/lib/sufia/version.rb +1 -1
  96. data/spec/controllers/api/items_controller_spec.rb +20 -7
  97. data/spec/controllers/sufia/batch_uploads_controller_spec.rb +4 -3
  98. data/spec/controllers/transfers_controller_spec.rb +3 -11
  99. data/spec/controllers/users_controller_spec.rb +2 -1
  100. data/spec/features/batch_edit_spec.rb +17 -2
  101. data/spec/forms/sufia/forms/batch_edit_form_spec.rb +2 -0
  102. data/spec/forms/sufia/forms/batch_upload_form_spec.rb +1 -1
  103. data/spec/helpers/blacklight_helper_spec.rb +36 -26
  104. data/spec/helpers/{generic_work_helper_spec.rb → sufia/collections_helper_spec.rb} +1 -1
  105. data/spec/helpers/sufia_helper_spec.rb +70 -32
  106. data/spec/javascripts/autocomplete_spec.js.coffee +7 -7
  107. data/spec/javascripts/save_work_spec.js +20 -20
  108. data/spec/lib/sufia/configuration_spec.rb +30 -0
  109. data/spec/lib/sufia/user_stat_importer_spec.rb +21 -36
  110. data/spec/models/file_download_stat_spec.rb +8 -8
  111. data/spec/models/file_view_stat_spec.rb +8 -8
  112. data/spec/models/generic_work_spec.rb +24 -0
  113. data/spec/models/proxy_deposit_request_spec.rb +2 -4
  114. data/spec/models/sufia/ability_spec.rb +7 -13
  115. data/spec/models/user_spec.rb +0 -14
  116. data/spec/models/work_view_stat_spec.rb +22 -8
  117. data/spec/presenters/sufia/file_usage_spec.rb +0 -4
  118. data/spec/presenters/sufia/trophy_presenter_spec.rb +46 -0
  119. data/spec/presenters/sufia/user_profile_presenter_spec.rb +4 -1
  120. data/spec/presenters/sufia/work_usage_spec.rb +8 -17
  121. data/spec/routing/route_spec.rb +0 -6
  122. data/spec/spec_helper.rb +8 -2
  123. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
  124. data/spec/views/batch_edits/edit.html.erb_spec.rb +8 -2
  125. data/spec/views/catalog/_index_list_default.html.erb_spec.rb +8 -6
  126. data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +3 -0
  127. data/spec/views/curation_concerns/file_sets/_permission.html.erb_spec.rb +16 -0
  128. data/spec/views/curation_concerns/file_sets/show.html.erb_spec.rb +0 -2
  129. data/spec/views/records/edit_fields/_based_near.html.erb_spec.rb +20 -0
  130. data/spec/views/records/edit_fields/_language.html.erb_spec.rb +20 -0
  131. data/spec/views/records/edit_fields/_subject.html.erb_spec.rb +20 -0
  132. data/spec/views/{homepage → sufia/homepage}/_announcement.html.erb_spec.rb +0 -0
  133. data/spec/views/{homepage → sufia/homepage}/_featured_works.html.erb_spec.rb +0 -0
  134. data/spec/views/{homepage → sufia/homepage}/_home_header.html.erb_spec.rb +0 -0
  135. data/spec/views/sufia/homepage/_sortable_featured.html.erb_spec.rb +21 -0
  136. data/spec/views/users/edit.html.erb_spec.rb +5 -5
  137. data/spec/views/users/show.html.erb_spec.rb +5 -3
  138. data/sufia.gemspec +4 -3
  139. data/tasks/noid.rake +2 -2
  140. data/tasks/sufia-dev.rake +1 -1
  141. metadata +73 -68
  142. data/app/assets/javascripts/sufia/edit_metadata.js +0 -87
  143. data/app/controllers/authorities_controller.rb +0 -19
  144. data/app/helpers/generic_work_helper.rb +0 -10
  145. data/app/helpers/sufia_url_helper.rb +0 -14
  146. data/app/models/concerns/sufia/file_stat_utils.rb +0 -33
  147. data/app/models/concerns/sufia/work_stat_utils.rb +0 -33
  148. data/app/models/geo_names_resource.rb +0 -18
  149. data/app/models/local_authority.rb +0 -101
  150. data/app/models/local_authority_entry.rb +0 -3
  151. data/app/models/subject_local_authority_entry.rb +0 -2
  152. data/app/views/curation_concerns/generic_works/_generic_work.html.erb +0 -3
  153. data/app/views/error/401.html.erb +0 -18
  154. data/app/views/error/500.html.erb +0 -9
  155. data/app/views/error/single_use_error.html.erb +0 -19
  156. data/lib/generators/sufia/geonames_username_config_generator.rb +0 -20
  157. data/spec/controllers/authorities_controller_spec.rb +0 -18
  158. data/spec/fixtures/cities15000.tsv +0 -149
  159. data/spec/fixtures/genreForms.nt +0 -471
  160. data/spec/fixtures/lexvo.rdf +0 -3108
  161. data/spec/helpers/sufia_url_helper_spec.rb +0 -18
  162. data/spec/models/geo_names_resource_spec.rb +0 -30
  163. data/spec/models/local_authority_spec.rb +0 -108
  164. 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', helper_method: :index_field_link, field_name: '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', helper_method: :human_readable_date
76
- config.add_index_field solr_name("date_modified", :stored_sortable, type: :date), label: "Date Modified", itemprop: 'dateModified', helper_method: :human_readable_date
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 inject_sufia_work_controller_behavior
23
- file_path = "app/controllers/curation_concerns/generic_works_controller.rb"
24
- if File.exist?(file_path)
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
@@ -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
@@ -17,7 +17,7 @@ module Sufia
17
17
  end
18
18
 
19
19
  def create_work_from_item
20
- work = ::GenericWork.new
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)
@@ -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
- attr_writer :geonames_username
56
- def geonames_username
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Sufia
2
- VERSION = "7.0.0.beta4".freeze
2
+ VERSION = "7.0.0.rc1".freeze
3
3
  end
@@ -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(GenericWork).to receive(:find).with(default_work.id).and_raise(ActiveFedora::ObjectNotFoundError)
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(GenericWork).to receive(:find).with(gw.id).and_return(gw)
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(GenericWork).to receive(:find).with(non_arkivo_gw.id).and_return(non_arkivo_gw)
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(GenericWork).to receive(:find).with(gw.id) do
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(GenericWork).to receive(:find).with(gw.id).and_return(gw)
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(GenericWork).to receive(:find).with(non_arkivo_gw.id).and_return(non_arkivo_gw)
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(GenericWork).to receive(:find).with(not_found_id).and_raise(ActiveFedora::ObjectNotFoundError)
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
- generic_work: { keyword: [""], visibility: 'open' }
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
- generic_work: {
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
- generic_work: { keyword: [""], visibility: 'open' } }
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) do
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[:generic_work]).to eq(work)
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) do
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 match_array([work1, work2, work3])
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 { |f| fill_in_field_fill(f) }
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"]