sufia 7.0.0.beta3 → 7.0.0.beta4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -0
  3. data/.rubocop_todo.yml +66 -7
  4. data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +0 -1
  5. data/app/controllers/concerns/sufia/collections_controller_behavior.rb +0 -1
  6. data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +6 -3
  7. data/app/controllers/concerns/sufia/controller.rb +0 -7
  8. data/app/controllers/concerns/sufia/file_sets_controller_behavior.rb +1 -1
  9. data/app/controllers/concerns/sufia/uploads_controller_behavior.rb +18 -0
  10. data/app/controllers/concerns/sufia/users_controller_behavior.rb +1 -25
  11. data/app/controllers/concerns/sufia/works_controller_behavior.rb +31 -32
  12. data/app/controllers/curation_concerns/audits_controller.rb +0 -1
  13. data/app/controllers/sufia/resource_sync_controller.rb +41 -0
  14. data/app/controllers/sufia/trophies_controller.rb +17 -0
  15. data/app/controllers/sufia/uploads_controller.rb +1 -12
  16. data/app/helpers/sufia/sufia_helper_behavior.rb +15 -3
  17. data/app/helpers/trophy_helper.rb +1 -1
  18. data/app/models/concerns/sufia/user.rb +0 -12
  19. data/app/models/contact_form.rb +2 -2
  20. data/app/models/local_authority.rb +5 -2
  21. data/app/presenters/sufia/user_profile_presenter.rb +29 -0
  22. data/app/services/sufia/query_service.rb +1 -1
  23. data/app/views/collections/_edit_actions.html.erb +2 -1
  24. data/app/views/collections/_show_actions.html.erb +2 -1
  25. data/app/views/collections/_work_action_menu.html.erb +1 -1
  26. data/app/views/contact_form/new.html.erb +1 -1
  27. data/app/views/curation_concerns/base/_form_progress.html.erb +1 -1
  28. data/app/views/dashboard/_index_partials/_contents.html.erb +1 -1
  29. data/app/views/dashboard/_index_partials/_proxy_rights.html.erb +2 -2
  30. data/app/views/layouts/_head_tag_content.html.erb +1 -0
  31. data/app/views/my/_work_action_menu.html.erb +1 -1
  32. data/app/views/sufia/homepage/_featured_fields.html.erb +1 -5
  33. data/app/views/sufia/homepage/_home_header.html.erb +1 -1
  34. data/app/views/transfers/new.html.erb +1 -1
  35. data/app/views/users/_activity.html.erb +1 -1
  36. data/app/views/users/_contributions.html.erb +5 -5
  37. data/app/views/users/_edit_primary.html.erb +2 -2
  38. data/app/views/users/_profile_actions.html.erb +1 -1
  39. data/app/views/users/_profile_tabs.html.erb +2 -2
  40. data/app/views/users/show.html.erb +2 -5
  41. data/config/locales/sufia.en.yml +1 -1
  42. data/config/routes.rb +7 -8
  43. data/{lib/generators/sufia/templates/migrations/acts_as_follower_migration.rb → db/migrate/20160328222155_acts_as_follower_migration.rb} +0 -0
  44. data/{lib/generators/sufia/templates/migrations/add_social_to_users.rb → db/migrate/20160328222156_add_social_to_users.rb} +0 -0
  45. data/{lib/generators/sufia/templates/migrations/add_ldap_attrs_to_user.rb → db/migrate/20160328222157_add_ldap_attrs_to_user.rb} +0 -0
  46. data/{lib/generators/sufia/templates/migrations/add_avatars_to_users.rb → db/migrate/20160328222158_add_avatars_to_users.rb} +0 -0
  47. data/{lib/generators/sufia/templates/migrations/create_local_authorities.rb → db/migrate/20160328222160_create_local_authorities.rb} +0 -0
  48. data/{lib/generators/sufia/templates/migrations/create_trophies.rb → db/migrate/20160328222161_create_trophies.rb} +0 -0
  49. data/{lib/generators/sufia/templates/migrations/add_linkedin_to_users.rb → db/migrate/20160328222162_add_linkedin_to_users.rb} +0 -0
  50. data/{lib/generators/sufia/templates/migrations/create_tinymce_assets.rb → db/migrate/20160328222163_create_tinymce_assets.rb} +0 -0
  51. data/{lib/generators/sufia/templates/migrations/create_content_blocks.rb → db/migrate/20160328222164_create_content_blocks.rb} +0 -0
  52. data/{lib/generators/sufia/templates/migrations/create_featured_works.rb → db/migrate/20160328222165_create_featured_works.rb} +0 -0
  53. data/{lib/generators/sufia/templates/migrations/add_external_key_to_content_blocks.rb → db/migrate/20160328222166_add_external_key_to_content_blocks.rb} +0 -0
  54. data/{lib/generators/sufia/templates/migrations/create_proxy_deposit_rights.rb → db/migrate/20160328222226_create_proxy_deposit_rights.rb} +0 -0
  55. data/{lib/generators/sufia/templates/migrations/create_proxy_deposit_requests.rb → db/migrate/20160328222227_create_proxy_deposit_requests.rb} +0 -0
  56. data/{lib/generators/sufia/templates/migrations/create_file_view_stats.rb → db/migrate/20160328222228_create_file_view_stats.rb} +0 -0
  57. data/{lib/generators/sufia/templates/migrations/create_file_download_stats.rb → db/migrate/20160328222229_create_file_download_stats.rb} +0 -0
  58. data/{lib/generators/sufia/templates/migrations/add_orcid_to_users.rb → db/migrate/20160328222230_add_orcid_to_users.rb} +0 -0
  59. data/{lib/generators/sufia/templates/migrations/create_user_stats.rb → db/migrate/20160328222231_create_user_stats.rb} +0 -0
  60. data/{lib/generators/sufia/templates/migrations/create_work_view_stats.rb → db/migrate/20160328222232_create_work_view_stats.rb} +0 -0
  61. data/{lib/generators/sufia/templates/migrations/add_works_to_user_stats.rb → db/migrate/20160328222233_add_works_to_user_stats.rb} +0 -0
  62. data/{lib/generators/sufia/templates/migrations/change_trophy_generic_file_id_to_work_id.rb → db/migrate/20160328222236_change_trophy_generic_file_id_to_work_id.rb} +0 -0
  63. data/{lib/generators/sufia/templates/migrations/change_proxy_deposit_generic_file_id_to_work_id.rb → db/migrate/20160328222237_change_proxy_deposit_generic_file_id_to_work_id.rb} +0 -0
  64. data/{lib/generators/sufia/templates/migrations/change_audit_log_generic_file_id_to_file_set_id.rb → db/migrate/20160328222238_change_audit_log_generic_file_id_to_file_set_id.rb} +0 -0
  65. data/{lib/generators/sufia/templates/migrations/change_proxy_deposit_request_generic_file_id_to_work_id.rb → db/migrate/20160328222239_change_proxy_deposit_request_generic_file_id_to_work_id.rb} +0 -0
  66. data/{lib/generators/sufia/templates/migrations/create_uploaded_files.rb → db/migrate/20160401142419_create_uploaded_files.rb} +0 -0
  67. data/{lib/generators/sufia/templates/migrations/change_featured_work_generic_file_id_to_work_id.rb → db/migrate/20160510000007_change_featured_work_generic_file_id_to_work_id.rb} +0 -0
  68. data/{lib/generators/sufia/templates/migrations/add_arkivo_to_users.rb → db/migrate/20160516190435_add_arkivo_to_users.rb} +0 -0
  69. data/lib/generators/sufia/arkivo_api_generator.rb +1 -8
  70. data/lib/generators/sufia/config_generator.rb +3 -11
  71. data/lib/generators/sufia/install_generator.rb +12 -46
  72. data/lib/generators/sufia/templates/catalog_controller.rb +10 -10
  73. data/lib/generators/sufia/templates/config/sufia.rb +11 -14
  74. data/lib/generators/sufia/upgrade700_generator.rb +1 -16
  75. data/lib/sufia.rb +4 -8
  76. data/lib/sufia/configuration.rb +132 -0
  77. data/lib/sufia/engine.rb +6 -46
  78. data/lib/sufia/resource_sync.rb +11 -0
  79. data/lib/sufia/resource_sync/capability_list_writer.rb +31 -0
  80. data/lib/sufia/resource_sync/resource_list_writer.rb +77 -0
  81. data/lib/sufia/resource_sync/source_description_writer.rb +30 -0
  82. data/lib/sufia/version.rb +1 -1
  83. data/spec/actors/{create_with_files_actor_spec.rb → sufia/create_with_files_actor_spec.rb} +0 -0
  84. data/spec/controllers/{admin_stats_controller_spec.rb → admin/stats_controller_spec.rb} +0 -0
  85. data/spec/controllers/batch_edits_controller_spec.rb +5 -9
  86. data/spec/controllers/contact_form_controller_spec.rb +88 -0
  87. data/spec/controllers/{file_sets_controller_spec.rb → curation_concerns/file_sets_controller_spec.rb} +1 -2
  88. data/spec/controllers/{generic_works_controller_spec.rb → curation_concerns/generic_works_controller_spec.rb} +1 -1
  89. data/spec/controllers/depositors_controller_spec.rb +1 -1
  90. data/spec/controllers/featured_works_controller_spec.rb +1 -1
  91. data/spec/controllers/mailbox_controller_spec.rb +1 -1
  92. data/spec/controllers/my/highlights_controller_spec.rb +15 -11
  93. data/spec/controllers/stats_controller_spec.rb +1 -1
  94. data/spec/controllers/{homepage_controller_spec.rb → sufia/homepage_controller_spec.rb} +1 -1
  95. data/spec/controllers/sufia/resource_sync_controller_spec.rb +52 -0
  96. data/spec/controllers/sufia/trophies_controller_spec.rb +27 -0
  97. data/spec/controllers/transfers_controller_spec.rb +7 -7
  98. data/spec/controllers/users_controller_spec.rb +22 -60
  99. data/spec/features/browse_catalog_spec.rb +1 -1
  100. data/spec/features/collection_spec.rb +6 -7
  101. data/spec/features/contact_form_spec.rb +2 -89
  102. data/spec/features/search_spec.rb +7 -7
  103. data/spec/features/users_spec.rb +1 -1
  104. data/spec/forms/curation_concerns/{work_form_spec.rb → generic_work_form_spec.rb} +0 -0
  105. data/spec/forms/sufia/{batch_edit_form_spec.rb → forms/batch_edit_form_spec.rb} +0 -0
  106. data/spec/forms/sufia/{batch_upload_form_spec.rb → forms/batch_upload_form_spec.rb} +0 -0
  107. data/spec/forms/sufia/{collection_form_spec.rb → forms/collection_form_spec.rb} +0 -0
  108. data/spec/helpers/blacklight_helper_spec.rb +91 -0
  109. data/spec/helpers/dashboard_helper_spec.rb +2 -2
  110. data/spec/helpers/sufia_helper_spec.rb +7 -12
  111. data/spec/helpers/trophy_helper_spec.rb +1 -1
  112. data/spec/javascripts/jasmine_spec.rb +1 -1
  113. data/spec/lib/sufia/resource_sync/capability_list_writer_spec.rb +26 -0
  114. data/spec/lib/sufia/resource_sync/resource_list_writer_spec.rb +24 -0
  115. data/spec/lib/sufia/resource_sync/source_description_writer_spec.rb +21 -0
  116. data/spec/models/featured_work_spec.rb +1 -1
  117. data/spec/models/generic_work_spec.rb +7 -10
  118. data/spec/models/local_authority_spec.rb +3 -11
  119. data/spec/models/{ability_spec.rb → sufia/ability_spec.rb} +0 -0
  120. data/spec/models/sufia/download_spec.rb +13 -0
  121. data/spec/models/sufia/pageview_spec.rb +13 -0
  122. data/spec/models/sufia/uploaded_file_spec.rb +1 -1
  123. data/spec/models/{user_usage_stats_spec.rb → sufia/user_usage_stats_spec.rb} +0 -0
  124. data/spec/models/trophy_spec.rb +5 -7
  125. data/spec/models/user_spec.rb +12 -12
  126. data/spec/presenters/{file_usage_spec.rb → sufia/file_usage_spec.rb} +4 -4
  127. data/spec/presenters/{presenter_renderer_spec.rb → sufia/presenter_renderer_spec.rb} +0 -0
  128. data/spec/presenters/sufia/user_profile_presenter_spec.rb +23 -0
  129. data/spec/presenters/{work_usage_spec.rb → sufia/work_usage_spec.rb} +4 -4
  130. data/spec/requests/legacy_routing_spec.rb +1 -1
  131. data/spec/routing/ownership_transfers_route_spec.rb +2 -2
  132. data/spec/routing/route_spec.rb +19 -16
  133. data/spec/services/{collection_member_service_spec.rb → sufia/collection_member_service_spec.rb} +0 -0
  134. data/spec/services/{collection_size_service_spec.rb → sufia/collection_size_service_spec.rb} +0 -0
  135. data/spec/services/{file_set_csv_service_spec.rb → sufia/file_set_csv_service_spec.rb} +0 -0
  136. data/spec/services/{repository_audit_service_spec.rb → sufia/repository_audit_service_spec.rb} +0 -0
  137. data/spec/services/{statistics → sufia/statistics}/collections/over_time_spec.rb +0 -0
  138. data/spec/services/{statistics → sufia/statistics}/depositors/summary_spec.rb +0 -0
  139. data/spec/services/{statistics → sufia/statistics}/file_sets/by_format_spec.rb +0 -0
  140. data/spec/services/{statistics → sufia/statistics}/system_stats_spec.rb +0 -0
  141. data/spec/services/{statistics → sufia/statistics}/works/by_depositor_spec.rb +0 -0
  142. data/spec/services/{statistics → sufia/statistics}/works/by_resource_type_spec.rb +0 -0
  143. data/spec/services/{statistics → sufia/statistics}/works/count_spec.rb +0 -0
  144. data/spec/services/{statistics → sufia/statistics}/works/over_time_spec.rb +0 -0
  145. data/spec/spec_helper.rb +12 -15
  146. data/spec/tasks/rake_spec.rb +0 -28
  147. data/spec/views/_toolbar.html.erb_spec.rb +1 -1
  148. data/spec/views/admin/stats/index.html.erb_spec.rb +2 -4
  149. data/spec/views/batch_edits/edit.html.erb_spec.rb +1 -2
  150. data/spec/views/catalog/_index_list_default.html.erb_spec.rb +14 -19
  151. data/spec/views/catalog/index.html.erb_spec.rb +1 -1
  152. data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +9 -10
  153. data/spec/views/collections/_form.html.erb_spec.rb +2 -2
  154. data/spec/views/collections/_form_for_select_collection.html.erb_spec.rb +1 -2
  155. data/spec/views/collections/edit.html.erb_spec.rb +1 -1
  156. data/spec/views/collections/show.html.erb_spec.rb +1 -1
  157. data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +11 -33
  158. data/spec/views/curation_concerns/base/_form_progress.html.erb_spec.rb +3 -3
  159. data/spec/views/curation_concerns/base/_relationships.html.erb_spec.rb +1 -1
  160. data/spec/views/curation_concerns/base/edit.html.erb_spec.rb +1 -1
  161. data/spec/views/curation_concerns/file_sets/_versioning.html.erb_spec.rb +1 -3
  162. data/spec/views/curation_concerns/permissions/confirm.html.erb_spec.rb +1 -1
  163. data/spec/views/dashboard/index_spec.rb +2 -4
  164. data/spec/views/homepage/_announcement.html.erb_spec.rb +1 -2
  165. data/spec/views/homepage/_featured_works.html.erb_spec.rb +9 -2
  166. data/spec/views/homepage/_home_header.html.erb_spec.rb +1 -1
  167. data/spec/views/my/_list_collections.html.erb_spec.rb +1 -1
  168. data/spec/views/my/_list_works.html.erb_spec.rb +1 -1
  169. data/spec/views/sufia/batch_uploads/_form.html.erb_spec.rb +4 -4
  170. data/spec/views/users/edit.html.erb_spec.rb +0 -3
  171. data/spec/views/users/show.html.erb_spec.rb +9 -7
  172. data/sufia.gemspec +1 -0
  173. metadata +124 -96
  174. data/app/controllers/directory_controller.rb +0 -30
  175. data/lib/generators/sufia/abstract_migration_generator.rb +0 -31
  176. data/lib/generators/sufia/cached_stats_generator.rb +0 -24
  177. data/lib/generators/sufia/cached_work_stats_generator.rb +0 -24
  178. data/lib/generators/sufia/citation_config_generator.rb +0 -22
  179. data/lib/generators/sufia/minimagick_config_generator.rb +0 -18
  180. data/lib/generators/sufia/orcid_field_generator.rb +0 -19
  181. data/lib/generators/sufia/proxies_generator.rb +0 -24
  182. data/lib/generators/sufia/usagestats_generator.rb +0 -18
  183. data/lib/generators/sufia/user_stats_generator.rb +0 -31
  184. data/spec/models/download_spec.rb +0 -17
  185. data/spec/models/pageview_spec.rb +0 -17
  186. data/tasks/migrate.rake +0 -20
@@ -0,0 +1,11 @@
1
+ module Sufia
2
+ module ResourceSync
3
+ extend ActiveSupport::Autoload
4
+
5
+ eager_autoload do
6
+ autoload :CapabilityListWriter
7
+ autoload :ResourceListWriter
8
+ autoload :SourceDescriptionWriter
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,31 @@
1
+ module Sufia
2
+ module ResourceSync
3
+ class CapabilityListWriter
4
+ attr_reader :resource_list_url, :description_url
5
+ def initialize(resource_list_url:, description_url:)
6
+ @resource_list_url = resource_list_url
7
+ @description_url = description_url
8
+ end
9
+
10
+ def write
11
+ builder.to_xml
12
+ end
13
+
14
+ private
15
+
16
+ def builder
17
+ Nokogiri::XML::Builder.new do |xml|
18
+ xml.urlset('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
19
+ 'xmlns:rs' => 'http://www.openarchives.org/rs/terms/') do
20
+ xml['rs'].ln(rel: "up", href: description_url)
21
+ xml['rs'].md(capability: "capabilitylist")
22
+ xml.url do
23
+ xml.loc resource_list_url
24
+ xml['rs'].md(capability: 'resourcelist')
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,77 @@
1
+ module Sufia
2
+ module ResourceSync
3
+ # TODO: the big assumption I'm making here is that the repository has fewer
4
+ # than 50,000 resources to list. The Sitemap protocol is limited at 50,000
5
+ # items, so if we require more than that, we must have multiple Resource
6
+ # lists and add a Resource List Index to point to all of them.
7
+ class ResourceListWriter
8
+ attr_reader :resource_host, :capability_list_url
9
+
10
+ def initialize(resource_host:, capability_list_url:)
11
+ @resource_host = resource_host
12
+ @capability_list_url = capability_list_url
13
+ end
14
+
15
+ def write
16
+ builder.to_xml
17
+ end
18
+
19
+ private
20
+
21
+ def builder(capability_list_url: 'http://example.com/dataset1/capabilitylist.xml')
22
+ Nokogiri::XML::Builder.new do |xml|
23
+ xml.urlset('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
24
+ 'xmlns:rs' => 'http://www.openarchives.org/rs/terms/') do
25
+ xml['rs'].ln(rel: "up", href: capability_list_url)
26
+ xml['rs'].md(capability: "resourcelist", at: Time.now.utc.iso8601)
27
+ build_collections(xml)
28
+ build_works(xml)
29
+ build_files(xml)
30
+ end
31
+ end
32
+ end
33
+
34
+ def build_collections(xml)
35
+ Collection.search_in_batches(public_access) do |doc_set|
36
+ build_resources(xml, doc_set)
37
+ end
38
+ end
39
+
40
+ def build_works(xml)
41
+ CurationConcerns::WorkRelation.new.search_in_batches(public_access) do |doc_set|
42
+ build_resources(xml, doc_set)
43
+ end
44
+ end
45
+
46
+ def build_files(xml)
47
+ FileSet.search_in_batches(public_access) do |doc_set|
48
+ build_resources(xml, doc_set)
49
+ end
50
+ end
51
+
52
+ def build_resources(xml, doc_set)
53
+ doc_set.each do |doc|
54
+ build_resource(xml, doc)
55
+ end
56
+ end
57
+
58
+ def build_resource(xml, doc)
59
+ xml.url do
60
+ key = doc.fetch('has_model_ssim', []).first.constantize.model_name.singular_route_key
61
+ xml.loc routes.send(key + "_url", doc['id'], host: resource_host)
62
+ xml.lastmod doc['system_modified_dtsi']
63
+ end
64
+ end
65
+
66
+ def routes
67
+ Rails.application.routes.url_helpers
68
+ end
69
+
70
+ delegate :collection_url, to: :routes
71
+
72
+ def public_access
73
+ { Hydra.config.permissions.read.group => 'public' }
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,30 @@
1
+ module Sufia
2
+ module ResourceSync
3
+ class SourceDescriptionWriter
4
+ attr_reader :capability_list_url
5
+ def initialize(capability_list_url: 'http://example.com/dataset1/capabilitylist.xml')
6
+ @capability_list_url = capability_list_url
7
+ end
8
+
9
+ def write
10
+ builder.to_xml
11
+ end
12
+
13
+ private
14
+
15
+ def builder
16
+ Nokogiri::XML::Builder.new do |xml|
17
+ xml.urlset('xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
18
+ 'xmlns:rs' => 'http://www.openarchives.org/rs/terms/') do
19
+ xml['rs'].ln(rel: "up", href: capability_list_url)
20
+ xml['rs'].md(capability: "description")
21
+ xml.url do
22
+ xml.loc capability_list_url
23
+ xml['rs'].md(capability: 'capabilitylist')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
data/lib/sufia/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sufia
2
- VERSION = "7.0.0.beta3".freeze
2
+ VERSION = "7.0.0.beta4".freeze
3
3
  end
@@ -9,16 +9,12 @@ describe BatchEditsController, type: :controller do
9
9
  routes { Internal::Application.routes }
10
10
 
11
11
  describe "#edit" do
12
+ let(:one) { create(:work, creator: ["Fred"], title: ["abc"], language: ['en']) }
13
+ let(:two) { create(:work, creator: ["Wilma"], title: ["abc2"], publisher: ['Rand McNally'], language: ['en'], resource_type: ['bar']) }
12
14
  before do
13
- @one = GenericWork.new(creator: ["Fred"], title: ["abc"], language: ['en'])
14
- @one.apply_depositor_metadata('mjg36')
15
- @two = GenericWork.new(creator: ["Wilma"], title: ["abc2"], publisher: ['Rand McNally'], language: ['en'], resource_type: ['bar'])
16
- @two.apply_depositor_metadata('mjg36')
17
- @one.save!
18
- @two.save!
19
- controller.batch = [@one.id, @two.id]
20
- expect(controller).to receive(:can?).with(:edit, @one.id).and_return(true)
21
- expect(controller).to receive(:can?).with(:edit, @two.id).and_return(true)
15
+ controller.batch = [one.id, two.id]
16
+ expect(controller).to receive(:can?).with(:edit, one.id).and_return(true)
17
+ expect(controller).to receive(:can?).with(:edit, two.id).and_return(true)
22
18
  end
23
19
 
24
20
  it "is successful" do
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe ContactFormController do
4
+ let(:user) { create(:user) }
5
+ let(:required_params) do
6
+ {
7
+ category: "Depositing content",
8
+ name: "Rose Tyler",
9
+ email: "rose@timetraveler.org",
10
+ subject: "The Doctor",
11
+ message: "Run."
12
+ }
13
+ end
14
+
15
+ before { sign_in(user) }
16
+
17
+ describe "#new" do
18
+ subject { response }
19
+ before { get :new }
20
+ it { is_expected.to be_success }
21
+ end
22
+
23
+ describe "#create" do
24
+ subject { flash }
25
+ before { post :create, contact_form: params }
26
+ context "with the required parameters" do
27
+ let(:params) { required_params }
28
+ its(:notice) { is_expected.to eq("Thank you for your message!") }
29
+ end
30
+
31
+ context "without a category" do
32
+ let(:params) { required_params.except(:category) }
33
+ its([:error]) { is_expected.to eq("Sorry, this message was not sent successfully. Category can't be blank") }
34
+ end
35
+
36
+ context "without a name" do
37
+ let(:params) { required_params.except(:name) }
38
+ its([:error]) { is_expected.to eq("Sorry, this message was not sent successfully. Name can't be blank") }
39
+ end
40
+
41
+ context "without an email" do
42
+ let(:params) { required_params.except(:email) }
43
+ its([:error]) { is_expected.to eq("Sorry, this message was not sent successfully. Email can't be blank") }
44
+ end
45
+
46
+ context "without a subject" do
47
+ let(:params) { required_params.except(:subject) }
48
+ its([:error]) { is_expected.to eq("Sorry, this message was not sent successfully. Subject can't be blank") }
49
+ end
50
+
51
+ context "without a message" do
52
+ let(:params) { required_params.except(:message) }
53
+ its([:error]) { is_expected.to eq("Sorry, this message was not sent successfully. Message can't be blank") }
54
+ end
55
+
56
+ context "with an invalid email" do
57
+ let(:params) { required_params.merge(email: "bad-wolf") }
58
+ its([:error]) { is_expected.to eq("Sorry, this message was not sent successfully. Email is invalid") }
59
+ end
60
+ end
61
+
62
+ describe "#after_deliver" do
63
+ context "with a successful email" do
64
+ it "calls #after_deliver" do
65
+ expect(controller).to receive(:after_deliver)
66
+ post :create, contact_form: required_params
67
+ end
68
+ end
69
+ context "with an unsuccessful email" do
70
+ it "does not call #after_deliver" do
71
+ expect(controller).not_to receive(:after_deliver)
72
+ post :create, contact_form: required_params.except(:email)
73
+ end
74
+ end
75
+ end
76
+
77
+ context "when encoutering a RuntimeError" do
78
+ let(:logger) { double }
79
+ before do
80
+ allow(controller).to receive(:logger).and_return(logger)
81
+ allow(ContactForm).to receive(:new).and_raise(RuntimeError)
82
+ end
83
+ it "is logged via Rails" do
84
+ expect(logger).to receive(:error).with("Contact form failed to send: #<RuntimeError: RuntimeError>")
85
+ post :create, contact_form: required_params
86
+ end
87
+ end
88
+ end
@@ -2,7 +2,6 @@ describe CurationConcerns::FileSetsController do
2
2
  routes { Rails.application.routes }
3
3
  let(:user) { create(:user) }
4
4
  before do
5
- allow(controller).to receive(:has_access?).and_return(true)
6
5
  sign_in user
7
6
  allow_any_instance_of(User).to receive(:groups).and_return([])
8
7
  # prevents characterization and derivative creation
@@ -250,7 +249,7 @@ describe CurationConcerns::FileSetsController do
250
249
  it "shows me the breadcrumbs" do
251
250
  expect(controller).to receive(:add_breadcrumb).with('My Dashboard', Sufia::Engine.routes.url_helpers.dashboard_index_path)
252
251
  expect(controller).to receive(:add_breadcrumb).with('My Works', Sufia::Engine.routes.url_helpers.dashboard_works_path)
253
- expect(controller).to receive(:add_breadcrumb).with('test title', Sufia::Engine.routes.url_helpers.curation_concerns_generic_work_path(work.id))
252
+ expect(controller).to receive(:add_breadcrumb).with('test title', main_app.curation_concerns_generic_work_path(work.id))
254
253
  expect(controller).to receive(:add_breadcrumb).with('test file', main_app.curation_concerns_file_set_path(file_set))
255
254
  get :show, id: file_set
256
255
  expect(response).to be_successful
@@ -83,7 +83,7 @@ describe CurationConcerns::GenericWorksController do
83
83
  it "sets breadcrumbs" do
84
84
  expect(controller).to receive(:add_breadcrumb).with('My Dashboard', Sufia::Engine.routes.url_helpers.dashboard_index_path)
85
85
  expect(controller).to receive(:add_breadcrumb).with('My Works', Sufia::Engine.routes.url_helpers.dashboard_works_path)
86
- expect(controller).to receive(:add_breadcrumb).with('test title', Sufia::Engine.routes.url_helpers.curation_concerns_generic_work_path(work.id))
86
+ expect(controller).to receive(:add_breadcrumb).with('test title', main_app.curation_concerns_generic_work_path(work.id))
87
87
  get :show, id: work
88
88
  expect(response).to be_successful
89
89
  end
@@ -36,7 +36,7 @@ describe DepositorsController do
36
36
  end
37
37
 
38
38
  it 'does not send a message to the user' do
39
- expect { redundant_request_to_grant_proxy }.to_not change { user.mailbox.inbox.count }
39
+ expect { redundant_request_to_grant_proxy }.not_to change { user.mailbox.inbox.count }
40
40
  end
41
41
  end
42
42
  end
@@ -23,7 +23,7 @@ describe FeaturedWorksController, type: :controller do
23
23
  it "does not create another" do
24
24
  expect {
25
25
  post :create, id: '1234abcd', format: :json
26
- }.to_not change { FeaturedWork.count }
26
+ }.not_to change { FeaturedWork.count }
27
27
  expect(response.status).to eq 422
28
28
  end
29
29
  end
@@ -26,7 +26,7 @@ describe MailboxController, type: :controller do
26
26
  it "deletes message" do
27
27
  expect(mock_box).to receive(:destroy).with("4")
28
28
  delete :destroy, id: "4"
29
- expect(response).to redirect_to(@routes.url_helpers.notifications_path)
29
+ expect(response).to redirect_to(routes.url_helpers.notifications_path)
30
30
  end
31
31
  end
32
32
  end
@@ -1,4 +1,3 @@
1
-
2
1
  describe My::HighlightsController, type: :controller do
3
2
  describe "logged in user" do
4
3
  let(:user) { create(:user) }
@@ -8,16 +7,21 @@ describe My::HighlightsController, type: :controller do
8
7
  before do
9
8
  GenericWork.destroy_all
10
9
  Collection.destroy_all
11
- @highlighted_work = create(:generic_work, user: user)
12
- user.trophies.create(work_id: @highlighted_work.id)
10
+ end
13
11
 
14
- @normal_work = create(:generic_work, user: user)
15
- other_user = create(:user)
16
- @unrelated_highlighted_work = create(:generic_work, user: other_user).tap do |r|
12
+ let(:other_user) { create(:user) }
13
+ let(:highlighted_work) { create(:generic_work, user: user) }
14
+ let!(:normal_work) { create(:generic_work, user: user) }
15
+ let(:unrelated_highlighted_work) do
16
+ create(:generic_work, user: other_user).tap do |r|
17
17
  r.edit_users += [user.user_key]
18
18
  r.save!
19
19
  end
20
- other_user.trophies.create(work_id: @unrelated_highlighted_work.id)
20
+ end
21
+
22
+ before do
23
+ user.trophies.create(work_id: highlighted_work.id)
24
+ other_user.trophies.create(work_id: unrelated_highlighted_work.id)
21
25
  end
22
26
 
23
27
  it "paginates" do
@@ -35,17 +39,17 @@ describe My::HighlightsController, type: :controller do
35
39
  get :index
36
40
  expect(response).to be_successful
37
41
  # shows documents I've highlighted
38
- expect(assigns[:document_list].map(&:id)).to include(@highlighted_work.id)
42
+ expect(assigns[:document_list].map(&:id)).to include(highlighted_work.id)
39
43
  # doesn't show non-highlighted files
40
- expect(assigns[:document_list].map(&:id)).to_not include(@normal_work.id)
44
+ expect(assigns[:document_list].map(&:id)).not_to include(normal_work.id)
41
45
  # doesn't show other users' highlighted files
42
- expect(assigns[:document_list].map(&:id)).to_not include(@unrelated_highlighted_work.id)
46
+ expect(assigns[:document_list].map(&:id)).not_to include(unrelated_highlighted_work.id)
43
47
  end
44
48
  end
45
49
 
46
50
  describe "when user has no highlights" do
47
51
  it "skips the call to Solr" do
48
- expect(controller).to_not receive(:search_results)
52
+ expect(controller).not_to receive(:search_results)
49
53
  get :index
50
54
  end
51
55
  end
@@ -59,7 +59,7 @@ describe StatsController do
59
59
  expect(WorkUsage).to receive(:new).with(work.id).and_return(usage)
60
60
  expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.my.works'), Sufia::Engine.routes.url_helpers.dashboard_works_path)
61
61
  expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.dashboard.title'), Sufia::Engine.routes.url_helpers.dashboard_index_path)
62
- expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.work.browse_view'), curation_concerns_generic_work_path(work))
62
+ expect(controller).to receive(:add_breadcrumb).with(I18n.t('sufia.work.browse_view'), main_app.curation_concerns_generic_work_path(work))
63
63
  get :work, id: work
64
64
  expect(response).to be_success
65
65
  expect(response).to render_template('stats/work')
@@ -44,7 +44,7 @@ describe Sufia::HomepageController, type: :controller do
44
44
  get :index
45
45
  expect(response).to be_success
46
46
  titles = assigns(:recent_documents).map { |d| d['title_tesim'][0] }
47
- expect(titles).to_not include('Test Private Document')
47
+ expect(titles).not_to include('Test Private Document')
48
48
  end
49
49
 
50
50
  it "includes only GenericWork objects in recent documents" do
@@ -0,0 +1,52 @@
1
+ RSpec.describe Sufia::ResourceSyncController do
2
+ before do
3
+ Rails.cache.clear
4
+ end
5
+
6
+ describe "source_description" do
7
+ let(:writer) { double }
8
+ let(:document) { '<xml>' }
9
+ let(:capability_list) { Sufia::Engine.routes.url_helpers.capability_list_url(host: 'test.host') }
10
+
11
+ it "is successful" do
12
+ allow(Sufia::ResourceSync::SourceDescriptionWriter).to receive(:new).with(capability_list_url: capability_list).and_return(writer)
13
+ expect(writer).to receive(:write).and_return(document)
14
+ get :source_description
15
+ expect(response.content_type).to eq 'application/xml'
16
+ expect(response.body).to eq document
17
+ end
18
+ end
19
+
20
+ describe "capability_list" do
21
+ let(:writer) { double }
22
+ let(:document) { '<xml>' }
23
+ let(:capability_list) { Sufia::Engine.routes.url_helpers.capability_list_url(host: 'test.host') }
24
+
25
+ it "is successful" do
26
+ allow(Sufia::ResourceSync::CapabilityListWriter).to receive(:new).with(resource_list_url: "http://test.host/resourcelist",
27
+ description_url: "http://test.host/.well-known/resourcesync").and_return(writer)
28
+ expect(writer).to receive(:write).and_return(document)
29
+ get :capability_list
30
+ expect(response.content_type).to eq 'application/xml'
31
+ expect(response.body).to eq document
32
+ end
33
+ end
34
+
35
+ describe "resource_list" do
36
+ before do
37
+ Rails.cache.clear
38
+ end
39
+
40
+ let(:writer) { double }
41
+ let(:document) { '<xml>' }
42
+ let(:capability_list) { Sufia::Engine.routes.url_helpers.capability_list_url(host: 'test.host') }
43
+
44
+ it "is successful" do
45
+ allow(Sufia::ResourceSync::ResourceListWriter).to receive(:new).with(capability_list_url: capability_list, resource_host: "test.host").and_return(writer)
46
+ expect(writer).to receive(:write).and_return(document)
47
+ get :resource_list
48
+ expect(response.content_type).to eq 'application/xml'
49
+ expect(response.body).to eq document
50
+ end
51
+ end
52
+ end