sufia 4.0.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/History.md +247 -215
- data/README.md +7 -3
- data/SUFIA_VERSION +1 -1
- data/app/assets/javascripts/sufia.js +5 -2
- data/app/assets/javascripts/sufia/proxy_rights.js +68 -0
- data/app/assets/javascripts/sufia/transfers.js +3 -0
- data/app/assets/javascripts/sufia/user_search.js +31 -0
- data/app/assets/stylesheets/jquery-ui.css +17 -17
- data/app/assets/stylesheets/sufia.css.scss +3 -2
- data/app/assets/stylesheets/sufia/_proxy-rights.scss +10 -0
- data/app/controllers/concerns/sufia/contact_form_controller_behavior.rb +22 -23
- data/app/controllers/concerns/sufia/depositors_controller_behavior.rb +41 -0
- data/app/controllers/concerns/sufia/files_controller_behavior.rb +1 -0
- data/app/controllers/concerns/sufia/transfers_controller_behavior.rb +76 -0
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +9 -11
- data/app/controllers/depositors_controller.rb +3 -0
- data/app/controllers/transfers_controller.rb +3 -0
- data/app/helpers/sufia/dashboard_helper_behavior.rb +15 -0
- data/app/helpers/sufia/sufia_helper_behavior.rb +24 -2
- data/app/jobs/content_depositor_change_event_job.rb +50 -0
- data/app/views/dashboard/_index_partials/_contents.html.erb +18 -0
- data/app/views/dashboard/_index_partials/_proxy_rights.html.erb +23 -0
- data/app/views/dashboard/_index_partials/_transfers.html.erb +14 -0
- data/app/views/generic_files/proxy.html.erb +5 -0
- data/app/views/generic_files/upload/_form.html.erb +7 -2
- data/app/views/my/_action_menu.html.erb +3 -1
- data/app/views/records/edit_fields/_default.html.erb +1 -1
- data/app/views/transfers/_received.html.erb +58 -0
- data/app/views/transfers/_sent.html.erb +38 -0
- data/app/views/transfers/index.html.erb +7 -0
- data/app/views/transfers/new.html.erb +23 -0
- data/app/views/users/_proxies.html.erb +8 -0
- data/app/views/users/_user_util_links_extra.html.erb +1 -0
- data/app/views/users/edit.html.erb +6 -1
- data/config/locales/sufia.en.yml +9 -4
- data/config/routes.rb +14 -3
- data/lib/sufia.rb +7 -5
- data/lib/sufia/version.rb +1 -1
- data/spec/controllers/authorities_controller_spec.rb +6 -6
- data/spec/controllers/batch_controller_spec.rb +29 -29
- data/spec/controllers/batch_edits_controller_spec.rb +7 -7
- data/spec/controllers/catalog_controller_spec.rb +9 -9
- data/spec/controllers/collections_controller_spec.rb +28 -28
- data/spec/controllers/content_blocks_controller_spec.rb +3 -3
- data/spec/controllers/dashboard_controller_spec.rb +1 -1
- data/spec/controllers/depositors_controller_spec.rb +50 -0
- data/spec/controllers/downloads_controller_spec.rb +22 -22
- data/spec/controllers/featured_work_lists_controller_spec.rb +1 -1
- data/spec/controllers/featured_works_controller_spec.rb +1 -1
- data/spec/controllers/generic_files_controller_spec.rb +98 -90
- data/spec/controllers/homepage_controller_spec.rb +1 -1
- data/spec/controllers/mailbox_controller_spec.rb +10 -10
- data/spec/controllers/my/collections_controller_spec.rb +1 -1
- data/spec/controllers/my/files_controller_spec.rb +1 -1
- data/spec/controllers/my/highlights_controller_spec.rb +1 -1
- data/spec/controllers/my/shares_controller_spec.rb +1 -1
- data/spec/controllers/my_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +1 -1
- data/spec/controllers/single_use_links_controller_spec.rb +46 -50
- data/spec/controllers/single_use_links_viewer_controller_spec.rb +16 -16
- data/spec/controllers/static_controller_spec.rb +9 -9
- data/spec/controllers/tinymce_assets_controller_spec.rb +1 -1
- data/spec/controllers/transfers_controller_spec.rb +212 -0
- data/spec/controllers/users_controller_spec.rb +1 -1
- data/spec/factories/generic_files.rb +4 -4
- data/spec/factories/proxy_deposit_requests.rb +6 -0
- data/spec/features/browse_dashboard_files_spec.rb +25 -36
- data/spec/features/browse_files_spec.rb +18 -13
- data/spec/features/catalog_search_spec.rb +3 -6
- data/spec/features/cloud_upload_spec.rb +5 -7
- data/spec/features/collection_spec.rb +28 -35
- data/spec/features/contact_form_spec.rb +24 -24
- data/spec/features/display_dashboard_spec.rb +11 -11
- data/spec/features/ingest_upload_files_spec.rb +10 -10
- data/spec/features/notifications_spec.rb +11 -11
- data/spec/features/ownership_transfer_spec.rb +111 -0
- data/spec/features/proxy_spec.rb +52 -0
- data/spec/features/search_spec.rb +1 -1
- data/spec/features/single_use_links_spec.rb +28 -18
- data/spec/features/users_spec.rb +3 -3
- data/spec/helpers/batch_edits_helper_spec.rb +1 -1
- data/spec/helpers/content_block_helper_spec.rb +1 -1
- data/spec/helpers/dashboard_helper_spec.rb +1 -1
- data/spec/helpers/generic_file_helper_spec.rb +1 -1
- data/spec/helpers/records_helper_spec.rb +1 -1
- data/spec/helpers/sufia_helper_spec.rb +8 -8
- data/spec/helpers/trophy_helper_spec.rb +1 -1
- data/spec/jobs/audit_job_spec.rb +5 -5
- data/spec/jobs/batch_update_job_spec.rb +14 -14
- data/spec/jobs/content_depositor_change_event_job_spec.rb +22 -0
- data/spec/jobs/event_jobs_spec.rb +104 -104
- data/spec/jobs/import_url_job_spec.rb +2 -2
- data/spec/jobs/ingest_local_file_job_spec.rb +1 -1
- data/spec/lib/sufia/breadcrumbs_spec.rb +3 -3
- data/spec/lib/sufia/id_service_spec.rb +1 -1
- data/spec/lib/sufia/upload_complete_behavior_spec.rb +4 -4
- data/spec/models/ability_spec.rb +59 -15
- data/spec/models/batch_spec.rb +16 -16
- data/spec/models/characterization_spec.rb +1 -1
- data/spec/models/checksum_audit_log_spec.rb +34 -26
- data/spec/models/collection_spec.rb +1 -1
- data/spec/models/download_spec.rb +1 -1
- data/spec/models/featured_work_list_spec.rb +1 -1
- data/spec/models/featured_work_spec.rb +15 -4
- data/spec/models/file_content_datastream_spec.rb +14 -14
- data/spec/models/file_usage_spec.rb +1 -1
- data/spec/models/fits_datastream_spec.rb +1 -1
- data/spec/models/generic_file/reload_on_save_spec.rb +4 -4
- data/spec/models/generic_file/visibility_spec.rb +1 -1
- data/spec/models/generic_file/web_form_spec.rb +6 -5
- data/spec/models/generic_file_rdf_datastream_spec.rb +1 -1
- data/spec/models/generic_file_spec.rb +254 -220
- data/spec/models/geo_names_resource_spec.rb +2 -2
- data/spec/models/local_authority_spec.rb +60 -59
- data/spec/models/pageview_spec.rb +1 -1
- data/spec/models/properties_datastream_spec.rb +29 -10
- data/spec/models/proxy_deposit_request_spec.rb +107 -0
- data/spec/models/single_use_link_spec.rb +13 -13
- data/spec/models/solr_document_spec.rb +1 -1
- data/spec/models/trophy_spec.rb +6 -6
- data/spec/models/user_spec.rb +38 -22
- data/spec/routing/featured_works_route_spec.rb +1 -1
- data/spec/routing/ownership_transfers_route_spec.rb +45 -0
- data/spec/routing/route_spec.rb +42 -42
- data/spec/services/noid_spec.rb +2 -2
- data/spec/spec_helper.rb +10 -5
- data/spec/support/cleaner.rb +12 -0
- data/spec/support/features.rb +5 -0
- data/spec/support/features/session_helpers.rb +3 -17
- data/spec/support/locations.rb +36 -0
- data/spec/support/poltergeist.rb +11 -0
- data/spec/support/proxies.rb +14 -0
- data/spec/support/selectors.rb +122 -0
- data/spec/views/batch/edit.html.erb_spec.rb +1 -1
- data/spec/views/batch_edits/check_all_spec.rb +4 -4
- data/spec/views/catalog/index.html.erb_spec.rb +1 -1
- data/spec/views/catalog/sort_and_per_page.html.erb_spec.rb +1 -1
- data/spec/views/collections/_form.html.erb_spec.rb +3 -1
- data/spec/views/collections/_show_descriptions.html.erb_spec.rb +1 -1
- data/spec/views/dashboard/index_spec.rb +3 -6
- data/spec/views/generic_file/edit.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/show.html.erb_spec.rb +1 -1
- data/spec/views/generic_file/stats.html.erb_spec.rb +1 -1
- data/spec/views/my/facet.html.erb_spec.rb +2 -2
- data/spec/views/users/_follower_modal.html.erb_spec.rb +1 -1
- data/spec/views/users/_following_modal.html.erb_spec.rb +1 -1
- data/spec/views/users/_notify_number.html.erb_spec.rb +1 -1
- data/spec/views/users/_user_util_links.html.erb_spec.rb +1 -1
- data/spec/views/users/index.html.erb_spec.rb +2 -2
- data/spec/views/users/show.html.erb_spec.rb +2 -2
- data/sufia-models/app/models/concerns/sufia/ability.rb +22 -0
- data/sufia-models/app/models/concerns/sufia/generic_file.rb +1 -0
- data/sufia-models/app/models/concerns/sufia/generic_file/proxy_deposit.rb +22 -0
- data/sufia-models/app/models/concerns/sufia/properties_datastream_behavior.rb +3 -0
- data/sufia-models/app/models/concerns/sufia/user.rb +9 -0
- data/sufia-models/app/models/proxy_deposit_request.rb +85 -0
- data/sufia-models/app/models/proxy_deposit_rights.rb +4 -0
- data/sufia-models/app/models/sufia/avatar_uploader.rb +2 -3
- data/sufia-models/lib/generators/sufia/models/install_generator.rb +9 -1
- data/sufia-models/lib/generators/sufia/models/proxies_generator.rb +53 -0
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_requests.rb +16 -0
- data/sufia-models/lib/generators/sufia/models/templates/migrations/create_proxy_deposit_rights.rb +11 -0
- data/sufia-models/lib/sufia/models/engine.rb +1 -1
- data/sufia-models/lib/sufia/models/version.rb +1 -1
- data/sufia.gemspec +2 -1
- data/tasks/sufia-dev.rake +5 -0
- metadata +82 -6
- data/tasks/sufia-db.rake +0 -21
data/config/locales/sufia.en.yml
CHANGED
|
@@ -72,6 +72,11 @@ en:
|
|
|
72
72
|
user_notiticiations: "User Notifications"
|
|
73
73
|
no_notifications: "User has no notifications"
|
|
74
74
|
additional_notifications: "See all notifications"
|
|
75
|
+
proxy_activity: "Proxy Activity"
|
|
76
|
+
transfer_of_ownership: "Transfer of Ownership"
|
|
77
|
+
transfer_files_link: "Select files to transfer"
|
|
78
|
+
no_transfer_requests: "You haven't received any file transfer requests"
|
|
79
|
+
no_transfers: "You haven't transferred any files"
|
|
75
80
|
stats:
|
|
76
81
|
heading: "Your Statistics"
|
|
77
82
|
files: "Files you've deposited"
|
|
@@ -103,14 +108,14 @@ en:
|
|
|
103
108
|
multiple:
|
|
104
109
|
link: "These files"
|
|
105
110
|
tag: "have been saved."
|
|
106
|
-
title: "Files uploaded successfully"
|
|
111
|
+
title: "Files uploaded successfully"
|
|
107
112
|
subject: "Batch upload complete"
|
|
108
113
|
failure:
|
|
109
114
|
single: "could not be updated. You do not have sufficient privileges to edit it."
|
|
110
115
|
multiple:
|
|
111
|
-
link: "These files"
|
|
116
|
+
link: "These files"
|
|
112
117
|
tag: "could not be updated. You do not have sufficient privileges to edit them."
|
|
113
|
-
title: "Files failed"
|
|
118
|
+
title: "Files failed"
|
|
114
119
|
subject: "Batch upload permission denied"
|
|
115
120
|
metadata_help:
|
|
116
121
|
resource_type: "Pre-defined categories to describe the type of file content being uploaded, such as \"article\" or \"dataset.\" More than one type may be selected."
|
|
@@ -127,7 +132,7 @@ en:
|
|
|
127
132
|
language: "The language of the file content."
|
|
128
133
|
publisher: "The person or group making the file available. Generally this is the institution."
|
|
129
134
|
rights: "Licensing and distribution information governing access to the file. Select from the provided drop-down list. <em>This is a required field</em>."
|
|
130
|
-
aria_label:
|
|
135
|
+
aria_label:
|
|
131
136
|
default: "Usage information for %{title}"
|
|
132
137
|
based_near: "Usage information for location"
|
|
133
138
|
description: "Usage information for abstract or summary"
|
data/config/routes.rb
CHANGED
|
@@ -20,12 +20,17 @@ Sufia::Engine.routes.draw do
|
|
|
20
20
|
resources :generic_files, path: :files, except: :index do
|
|
21
21
|
member do
|
|
22
22
|
resource :featured_work, only: [:create, :destroy]
|
|
23
|
+
resources :transfers, as: :generic_file_transfers, only: [:new, :create]
|
|
23
24
|
get 'citation'
|
|
24
25
|
get 'stats'
|
|
25
26
|
post 'audit'
|
|
26
27
|
end
|
|
27
28
|
end
|
|
28
29
|
|
|
30
|
+
# Depositors routes for proxy deposit
|
|
31
|
+
post 'users/:user_id/depositors' => 'depositors#create', as: 'user_depositors'
|
|
32
|
+
delete 'users/:user_id/depositors/:id' => 'depositors#destroy', as: 'user_depositor'
|
|
33
|
+
|
|
29
34
|
resources :featured_work_lists, path: 'featured_works', only: :create
|
|
30
35
|
|
|
31
36
|
# Downloads controller route
|
|
@@ -51,6 +56,12 @@ Sufia::Engine.routes.draw do
|
|
|
51
56
|
resources :dashboard, only: :index do
|
|
52
57
|
collection do
|
|
53
58
|
get 'activity', action: :activity, as: :dashboard_activity
|
|
59
|
+
resources :transfers, only: [:index, :destroy] do
|
|
60
|
+
member do
|
|
61
|
+
put 'accept'
|
|
62
|
+
put 'reject'
|
|
63
|
+
end
|
|
64
|
+
end
|
|
54
65
|
end
|
|
55
66
|
end
|
|
56
67
|
|
|
@@ -61,15 +72,15 @@ Sufia::Engine.routes.draw do
|
|
|
61
72
|
get '/files', controller: 'my/files', action: :index, as: 'dashboard_files'
|
|
62
73
|
get '/files/page/:page', controller: 'my/files', action: :index
|
|
63
74
|
get '/files/facet/:id', controller: 'my/files', action: :facet, as: 'dashboard_files_facet'
|
|
64
|
-
|
|
75
|
+
|
|
65
76
|
get '/collections', controller: 'my/collections', action: :index, as: 'dashboard_collections'
|
|
66
77
|
get '/collections/page/:page', controller: 'my/collections', action: :index
|
|
67
78
|
get '/collections/facet/:id', controller: 'my/collections', action: :facet, as: 'dashboard_collections_facet'
|
|
68
|
-
|
|
79
|
+
|
|
69
80
|
get '/highlights', controller: 'my/highlights', action: :index, as: 'dashboard_highlights'
|
|
70
81
|
get '/highlights/page/:page', controller: 'my/highlights', action: :index
|
|
71
82
|
get '/highlights/facet/:id', controller: 'my/highlights', action: :facet, as: 'dashboard_highlights_facet'
|
|
72
|
-
|
|
83
|
+
|
|
73
84
|
get '/shares', controller: 'my/shares', action: :index, as: 'dashboard_shares'
|
|
74
85
|
get '/shares/page/:page', controller: 'my/shares', action: :index
|
|
75
86
|
get '/shares/facet/:id', controller: 'my/shares', action: :facet, as: 'dashboard_shares_facet'
|
data/lib/sufia.rb
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
require "sufia/version"
|
|
2
|
-
require 'blacklight'
|
|
3
|
-
require 'blacklight_advanced_search'
|
|
4
|
-
require 'blacklight/gallery'
|
|
5
1
|
require 'hydra/head'
|
|
6
|
-
require 'hydra-batch-edit'
|
|
7
2
|
require 'hydra-editor'
|
|
3
|
+
require 'blacklight/gallery'
|
|
4
|
+
require 'select2-rails'
|
|
5
|
+
require 'hydra-batch-edit'
|
|
8
6
|
require 'browse-everything'
|
|
7
|
+
require "sufia/version"
|
|
8
|
+
require 'blacklight'
|
|
9
|
+
require 'blacklight_advanced_search'
|
|
9
10
|
require 'sufia/models'
|
|
10
11
|
|
|
11
12
|
require 'rails_autolink'
|
|
@@ -18,6 +19,7 @@ module Sufia
|
|
|
18
19
|
|
|
19
20
|
class Engine < ::Rails::Engine
|
|
20
21
|
engine_name 'sufia'
|
|
22
|
+
|
|
21
23
|
# Breadcrumbs on rails must be required outside of an initializer or it doesn't get loaded.
|
|
22
24
|
require 'breadcrumbs_on_rails'
|
|
23
25
|
|
data/lib/sufia/version.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe AuthoritiesController do
|
|
3
|
+
describe AuthoritiesController, :type => :controller do
|
|
4
4
|
describe "#query" do
|
|
5
5
|
it "should return an array of hashes" do
|
|
6
6
|
mock_hits = [{label: "English", uri: "http://example.org/eng"},
|
|
@@ -9,12 +9,12 @@ describe AuthoritiesController do
|
|
|
9
9
|
{label: "Edgar", uri: "http://example.org/edga"},
|
|
10
10
|
{label: "Eddie", uri: "http://example.org/edd"},
|
|
11
11
|
{label: "Economics", uri: "http://example.org/eco"}]
|
|
12
|
-
LocalAuthority.
|
|
12
|
+
expect(LocalAuthority).to receive(:entries_by_term).and_return(mock_hits)
|
|
13
13
|
xhr :get, :query, model: "generic_files", term: "subject", q: "E"
|
|
14
|
-
response.
|
|
15
|
-
JSON.parse(response.body).count.
|
|
16
|
-
JSON.parse(response.body)[0]["label"].
|
|
17
|
-
JSON.parse(response.body)[0]["uri"].
|
|
14
|
+
expect(response).to be_success
|
|
15
|
+
expect(JSON.parse(response.body).count).to eq(6)
|
|
16
|
+
expect(JSON.parse(response.body)[0]["label"]).to eq("English")
|
|
17
|
+
expect(JSON.parse(response.body)[0]["uri"]).to eq("http://example.org/eng")
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe BatchController do
|
|
3
|
+
describe BatchController, :type => :controller do
|
|
4
4
|
before do
|
|
5
|
-
controller.
|
|
5
|
+
allow(controller).to receive(:has_access?).and_return(true)
|
|
6
6
|
@user = FactoryGirl.find_or_create(:jill)
|
|
7
7
|
sign_in @user
|
|
8
|
-
User.
|
|
9
|
-
controller.
|
|
8
|
+
allow_any_instance_of(User).to receive(:groups).and_return([])
|
|
9
|
+
allow(controller).to receive(:clear_session_user) ## Don't clear out the authenticated session
|
|
10
10
|
end
|
|
11
11
|
after do
|
|
12
12
|
@user.delete
|
|
@@ -35,82 +35,82 @@ describe BatchController do
|
|
|
35
35
|
it "should enqueue a batch update job" do
|
|
36
36
|
params = {'generic_file' => {'read_groups_string' => '', 'read_users_string' => 'archivist1, archivist2', 'tag' => ['']}, 'id' => @batch.pid, 'controller' => 'batch', 'action' => 'update'}
|
|
37
37
|
s1 = double('one')
|
|
38
|
-
BatchUpdateJob.
|
|
39
|
-
Sufia.queue.
|
|
38
|
+
expect(BatchUpdateJob).to receive(:new).with(@user.user_key, params).and_return(s1)
|
|
39
|
+
expect(Sufia.queue).to receive(:push).with(s1).once
|
|
40
40
|
post :update, id: @batch.pid, "generic_file" => {"read_groups_string" => "", "read_users_string" => "archivist1, archivist2", "tag" => [""]}
|
|
41
41
|
end
|
|
42
42
|
it "should show flash messages" do
|
|
43
43
|
post :update, id: @batch.pid, "generic_file" => {"read_groups_string" => "","read_users_string" => "archivist1, archivist2", "tag" => [""]}
|
|
44
|
-
response.
|
|
45
|
-
flash[:notice].
|
|
46
|
-
flash[:notice].
|
|
47
|
-
flash[:notice].
|
|
44
|
+
expect(response).to redirect_to @routes.url_helpers.dashboard_files_path
|
|
45
|
+
expect(flash[:notice]).not_to be_nil
|
|
46
|
+
expect(flash[:notice]).not_to be_empty
|
|
47
|
+
expect(flash[:notice]).to include("Your files are being processed")
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
describe "when user has edit permissions on a file" do
|
|
51
51
|
it "should set the groups" do
|
|
52
52
|
post :update, id: @batch.pid, "generic_file"=>{"permissions"=>{"group"=>{"public"=>"1", "registered"=>"2"}}}
|
|
53
|
-
@file.reload.read_groups.
|
|
54
|
-
@file.reload.edit_groups.
|
|
55
|
-
response.
|
|
53
|
+
expect(@file.reload.read_groups).to eq([])
|
|
54
|
+
expect(@file.reload.edit_groups).to eq([])
|
|
55
|
+
expect(response).to redirect_to @routes.url_helpers.dashboard_files_path
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
it "should set the users with read access" do
|
|
59
59
|
post :update, id: @batch.pid, "generic_file"=>{"read_groups_string"=>"", "read_users_string"=>"archivist1, archivist2", "tag"=>[""]}
|
|
60
60
|
file = GenericFile.find(@file.pid)
|
|
61
|
-
file.read_users.
|
|
61
|
+
expect(file.read_users).to eq(['archivist1', 'archivist2'])
|
|
62
62
|
|
|
63
|
-
response.
|
|
63
|
+
expect(response).to redirect_to @routes.url_helpers.dashboard_files_path
|
|
64
64
|
end
|
|
65
65
|
it "should set the groups with read access" do
|
|
66
66
|
post :update, id: @batch.pid, "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}
|
|
67
67
|
file = GenericFile.find(@file.pid)
|
|
68
|
-
file.read_groups.
|
|
68
|
+
expect(file.read_groups).to eq(['group1', 'group2'])
|
|
69
69
|
end
|
|
70
70
|
it "should set public read access" do
|
|
71
71
|
post :update, id: @batch.pid, "visibility"=>"open", "generic_file"=>{"read_groups_string"=>"", "read_users_string"=>"", "tag"=>[""]}
|
|
72
72
|
file = GenericFile.find(@file.pid)
|
|
73
|
-
file.read_groups.
|
|
73
|
+
expect(file.read_groups).to eq(['public'])
|
|
74
74
|
end
|
|
75
75
|
it "should set public read access and groups at the same time" do
|
|
76
76
|
post :update, id: @batch.pid, "visibility"=>"open", "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}
|
|
77
77
|
file = GenericFile.find(@file.pid)
|
|
78
|
-
file.read_groups.
|
|
78
|
+
expect(file.read_groups).to eq(['group1', 'group2', 'public'])
|
|
79
79
|
end
|
|
80
80
|
it "should set public discover access and groups at the same time" do
|
|
81
81
|
post :update, id: @batch.pid, "permission"=>{"group"=>{"public"=>"none"}}, "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}
|
|
82
82
|
file = GenericFile.find(@file.pid)
|
|
83
|
-
file.read_groups.
|
|
84
|
-
file.discover_groups.
|
|
83
|
+
expect(file.read_groups).to eq(['group1', 'group2'])
|
|
84
|
+
expect(file.discover_groups).to eq([])
|
|
85
85
|
end
|
|
86
86
|
it "should set metadata like title" do
|
|
87
87
|
post :update, id: @batch.pid, "generic_file"=>{"tag"=>["footag", "bartag"]}, "title"=>{@file.pid=>["New Title"]}
|
|
88
88
|
file = GenericFile.find(@file.pid)
|
|
89
|
-
file.title.
|
|
90
|
-
file.tag.
|
|
89
|
+
expect(file.title).to eq(["New Title"])
|
|
90
|
+
expect(file.tag).to eq(["footag", "bartag"])
|
|
91
91
|
end
|
|
92
92
|
it "should not set any tags" do
|
|
93
93
|
post :update, id: @batch.pid, "generic_file"=>{"read_groups_string"=>"", "read_users_string"=>"archivist1", "tag"=>[""]}
|
|
94
94
|
file = GenericFile.find(@file.pid)
|
|
95
|
-
file.tag.
|
|
95
|
+
expect(file.tag).to be_empty
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
describe "when user does not have edit permissions on a file" do
|
|
99
99
|
it "should not modify the object" do
|
|
100
100
|
file = GenericFile.find(@file2.pid)
|
|
101
101
|
file.title = ["Original Title"]
|
|
102
|
-
file.read_groups.
|
|
102
|
+
expect(file.read_groups).to eq([])
|
|
103
103
|
file.save
|
|
104
104
|
post :update, id: @batch.pid, "generic_file"=>{"read_groups_string"=>"group1, group2", "read_users_string"=>"", "tag"=>[""]}, "title"=>{@file2.pid=>["Title Wont Change"]}
|
|
105
105
|
file = GenericFile.find(@file2.pid)
|
|
106
|
-
file.title.
|
|
107
|
-
file.read_groups.
|
|
106
|
+
expect(file.title).to eq(["Original Title"])
|
|
107
|
+
expect(file.read_groups).to eq([])
|
|
108
108
|
end
|
|
109
109
|
end
|
|
110
110
|
end
|
|
111
111
|
describe "#edit" do
|
|
112
112
|
before do
|
|
113
|
-
User.
|
|
113
|
+
allow_any_instance_of(User).to receive(:display_name).and_return("Jill Z. User")
|
|
114
114
|
@b1 = Batch.new
|
|
115
115
|
@b1.save
|
|
116
116
|
@file = GenericFile.new(batch: @b1, label: 'f1')
|
|
@@ -127,8 +127,8 @@ describe BatchController do
|
|
|
127
127
|
end
|
|
128
128
|
it "should default creator" do
|
|
129
129
|
get :edit, id: @b1.id
|
|
130
|
-
assigns[:generic_file].creator[0].
|
|
131
|
-
assigns[:generic_file].title[0].
|
|
130
|
+
expect(assigns[:generic_file].creator[0]).to eq(@user.display_name)
|
|
131
|
+
expect(assigns[:generic_file].title[0]).to eq('f1')
|
|
132
132
|
end
|
|
133
133
|
end
|
|
134
134
|
end
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe BatchEditsController do
|
|
3
|
+
describe BatchEditsController, :type => :controller do
|
|
4
4
|
before do
|
|
5
|
-
controller.
|
|
5
|
+
allow(controller).to receive(:has_access?).and_return(true)
|
|
6
6
|
@user = FactoryGirl.find_or_create(:jill)
|
|
7
7
|
sign_in @user
|
|
8
|
-
User.
|
|
9
|
-
controller.
|
|
8
|
+
allow_any_instance_of(User).to receive(:groups).and_return([])
|
|
9
|
+
allow(controller).to receive(:clear_session_user) ## Don't clear out the authenticated session
|
|
10
10
|
request.env["HTTP_REFERER"] = 'test.host/original_page'
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -26,9 +26,9 @@ describe BatchEditsController do
|
|
|
26
26
|
end
|
|
27
27
|
it "should be successful" do
|
|
28
28
|
get :edit
|
|
29
|
-
response.
|
|
30
|
-
assigns[:terms].
|
|
31
|
-
:date_created, :subject, :language, :identifier, :based_near, :related_url]
|
|
29
|
+
expect(response).to be_successful
|
|
30
|
+
expect(assigns[:terms]).to eq([:creator, :contributor, :description, :tag, :rights, :publisher,
|
|
31
|
+
:date_created, :subject, :language, :identifier, :based_near, :related_url])
|
|
32
32
|
expect(assigns[:show_file].creator).to eq ["Fred", "Wilma"]
|
|
33
33
|
expect(assigns[:show_file].publisher).to eq ["Rand McNally"]
|
|
34
34
|
expect(assigns[:show_file].language).to eq ["en"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe CatalogController do
|
|
3
|
+
describe CatalogController, :type => :controller do
|
|
4
4
|
routes { Rails.application.class.routes }
|
|
5
5
|
|
|
6
6
|
let(:user) { @user }
|
|
@@ -38,8 +38,8 @@ describe CatalogController do
|
|
|
38
38
|
get :index, q: 'full_textfull_text'
|
|
39
39
|
expect(response).to be_success
|
|
40
40
|
expect(response).to render_template('catalog/index')
|
|
41
|
-
assigns(:document_list).count.
|
|
42
|
-
assigns(:document_list).map(&:id).
|
|
41
|
+
expect(assigns(:document_list).count).to eql(1)
|
|
42
|
+
expect(assigns(:document_list).map(&:id)).to eq([@gf2.id])
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -47,10 +47,10 @@ describe CatalogController do
|
|
|
47
47
|
it "should find records" do
|
|
48
48
|
get :index, q: "pdf", owner: 'all'
|
|
49
49
|
expect(response).to be_success
|
|
50
|
-
response.
|
|
51
|
-
assigns(:document_list).map(&:id).
|
|
52
|
-
assigns(:document_list).count.
|
|
53
|
-
assigns(:document_list).first['desc_metadata__title_tesim'].
|
|
50
|
+
expect(response).to render_template('catalog/index')
|
|
51
|
+
expect(assigns(:document_list).map(&:id)).to eq([@gf1.id])
|
|
52
|
+
expect(assigns(:document_list).count).to eql(1)
|
|
53
|
+
expect(assigns(:document_list).first['desc_metadata__title_tesim']).to eq(['Test Document PDF'])
|
|
54
54
|
end
|
|
55
55
|
end
|
|
56
56
|
|
|
@@ -61,8 +61,8 @@ describe CatalogController do
|
|
|
61
61
|
end
|
|
62
62
|
it "should find facet files" do
|
|
63
63
|
expect(response).to be_success
|
|
64
|
-
response.
|
|
65
|
-
assigns(:document_list).count.
|
|
64
|
+
expect(response).to render_template('catalog/index')
|
|
65
|
+
expect(assigns(:document_list).count).to eql(1)
|
|
66
66
|
end
|
|
67
67
|
end
|
|
68
68
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
describe CollectionsController do
|
|
3
|
+
describe CollectionsController, :type => :controller do
|
|
4
4
|
before(:each) { @routes = Hydra::Collections::Engine.routes }
|
|
5
5
|
before do
|
|
6
|
-
controller.
|
|
7
|
-
User.
|
|
6
|
+
allow(controller).to receive(:has_access?).and_return(true)
|
|
7
|
+
allow_any_instance_of(User).to receive(:groups).and_return([])
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
let(:user) { FactoryGirl.create(:user) }
|
|
@@ -22,7 +22,7 @@ describe CollectionsController do
|
|
|
22
22
|
|
|
23
23
|
it 'should assign @collection' do
|
|
24
24
|
get :new
|
|
25
|
-
assigns(:collection).
|
|
25
|
+
expect(assigns(:collection)).to be_kind_of(Collection)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|
|
@@ -32,10 +32,10 @@ describe CollectionsController do
|
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
it "should create a Collection" do
|
|
35
|
-
controller.
|
|
35
|
+
expect(controller).to receive(:has_access?).and_return(true)
|
|
36
36
|
old_count = Collection.count
|
|
37
37
|
post :create, collection: {title: "My First Collection ", description: "The Description\r\n\r\nand more"}
|
|
38
|
-
Collection.count.
|
|
38
|
+
expect(Collection.count).to eq(old_count+1)
|
|
39
39
|
end
|
|
40
40
|
it "should create a Collection with files I can access" do
|
|
41
41
|
@asset1 = GenericFile.new(title: ["First of the Assets"])
|
|
@@ -47,15 +47,15 @@ describe CollectionsController do
|
|
|
47
47
|
@asset3 = GenericFile.new(title: ["Third of the Assets"], depositor:'abc')
|
|
48
48
|
@asset3.apply_depositor_metadata('abc')
|
|
49
49
|
@asset3.save
|
|
50
|
-
controller.
|
|
50
|
+
expect(controller).to receive(:has_access?).and_return(true)
|
|
51
51
|
old_count = Collection.count
|
|
52
52
|
post :create, collection: { title: "My own Collection", description: "The Description\r\n\r\nand more" },
|
|
53
53
|
batch_document_ids: [@asset1.id, @asset2.id, @asset3.id]
|
|
54
|
-
Collection.count.
|
|
54
|
+
expect(Collection.count).to eq(old_count+1)
|
|
55
55
|
collection = assigns(:collection)
|
|
56
|
-
collection.members.
|
|
57
|
-
collection.members.
|
|
58
|
-
collection.members.to_a.
|
|
56
|
+
expect(collection.members).to include (@asset1)
|
|
57
|
+
expect(collection.members).to include (@asset2)
|
|
58
|
+
expect(collection.members.to_a).not_to include (@asset3) # .to_a to avoid a call to any? which doesn't exist in AF::HABTM
|
|
59
59
|
@asset1.destroy
|
|
60
60
|
@asset2.destroy
|
|
61
61
|
@asset3.destroy
|
|
@@ -67,13 +67,13 @@ describe CollectionsController do
|
|
|
67
67
|
@asset1.save
|
|
68
68
|
post :create, batch_document_ids: [@asset1.id],
|
|
69
69
|
collection: { title: "My Secong Collection ", description: "The Description\r\n\r\nand more" }
|
|
70
|
-
assigns[:collection].members.
|
|
70
|
+
expect(assigns[:collection].members).to eq([@asset1])
|
|
71
71
|
asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset1.id}\""],fl:['id',Solrizer.solr_name(:collection)]}
|
|
72
|
-
asset_results["response"]["numFound"].
|
|
72
|
+
expect(asset_results["response"]["numFound"]).to eq(1)
|
|
73
73
|
doc = asset_results["response"]["docs"].first
|
|
74
|
-
doc["id"].
|
|
74
|
+
expect(doc["id"]).to eq(@asset1.id)
|
|
75
75
|
afterupdate = GenericFile.find(@asset1.pid)
|
|
76
|
-
doc[Solrizer.solr_name(:collection)].
|
|
76
|
+
expect(doc[Solrizer.solr_name(:collection)]).to eq(afterupdate.to_solr[Solrizer.solr_name(:collection)])
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
end
|
|
@@ -103,21 +103,21 @@ describe CollectionsController do
|
|
|
103
103
|
|
|
104
104
|
it "should set collection on members" do
|
|
105
105
|
put :update, id: @collection.id, collection: {members:"add"}, batch_document_ids: [@asset3.pid, @asset1.pid, @asset2.pid]
|
|
106
|
-
response.
|
|
107
|
-
assigns[:collection].members.map{|m| m.pid}.sort.
|
|
106
|
+
expect(response).to redirect_to Hydra::Collections::Engine.routes.url_helpers.collection_path(@collection.noid)
|
|
107
|
+
expect(assigns[:collection].members.map{|m| m.pid}.sort).to eq([@asset2, @asset3, @asset1].map {|m| m.pid}.sort)
|
|
108
108
|
asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset2.pid}\""],fl:['id',Solrizer.solr_name(:collection)]}
|
|
109
|
-
asset_results["response"]["numFound"].
|
|
109
|
+
expect(asset_results["response"]["numFound"]).to eq(1)
|
|
110
110
|
doc = asset_results["response"]["docs"].first
|
|
111
|
-
doc["id"].
|
|
111
|
+
expect(doc["id"]).to eq(@asset2.id)
|
|
112
112
|
afterupdate = GenericFile.find(@asset2.pid)
|
|
113
|
-
doc[Solrizer.solr_name(:collection)].
|
|
113
|
+
expect(doc[Solrizer.solr_name(:collection)]).to eq(afterupdate.to_solr[Solrizer.solr_name(:collection)])
|
|
114
114
|
put :update, id: @collection.id, collection: {members:"remove"}, batch_document_ids: [@asset2]
|
|
115
115
|
asset_results = ActiveFedora::SolrService.instance.conn.get "select", params:{fq:["id:\"#{@asset2.pid}\""],fl:['id',Solrizer.solr_name(:collection)]}
|
|
116
|
-
asset_results["response"]["numFound"].
|
|
116
|
+
expect(asset_results["response"]["numFound"]).to eq(1)
|
|
117
117
|
doc = asset_results["response"]["docs"].first
|
|
118
|
-
doc["id"].
|
|
118
|
+
expect(doc["id"]).to eq(@asset2.pid)
|
|
119
119
|
afterupdate = GenericFile.find(@asset2.pid)
|
|
120
|
-
doc[Solrizer.solr_name(:collection)].
|
|
120
|
+
expect(doc[Solrizer.solr_name(:collection)]).to be_nil
|
|
121
121
|
end
|
|
122
122
|
end
|
|
123
123
|
|
|
@@ -141,8 +141,8 @@ describe CollectionsController do
|
|
|
141
141
|
@collection.apply_depositor_metadata(user.user_key)
|
|
142
142
|
@collection.members = [@asset1,@asset2,@asset3]
|
|
143
143
|
@collection.save!
|
|
144
|
-
controller.
|
|
145
|
-
controller.
|
|
144
|
+
allow(controller).to receive(:authorize!).and_return(true)
|
|
145
|
+
allow(controller).to receive(:apply_gated_search)
|
|
146
146
|
end
|
|
147
147
|
context "when signed in" do
|
|
148
148
|
before do
|
|
@@ -152,7 +152,7 @@ describe CollectionsController do
|
|
|
152
152
|
it "should return the collection and its members" do
|
|
153
153
|
get :show, id: @collection.id
|
|
154
154
|
expect(response).to be_successful
|
|
155
|
-
assigns[:collection].title.
|
|
155
|
+
expect(assigns[:collection].title).to eq(@collection.title)
|
|
156
156
|
ids = assigns[:member_docs].map(&:id)
|
|
157
157
|
expect(ids).to include @asset1.pid, @asset2.pid, @asset3.pid
|
|
158
158
|
expect(ids).to_not include @asset4.pid
|
|
@@ -165,7 +165,7 @@ describe CollectionsController do
|
|
|
165
165
|
context "not signed in" do
|
|
166
166
|
it "should not show me files in the collection" do
|
|
167
167
|
get :show, id: @collection.id
|
|
168
|
-
assigns[:member_docs].count.
|
|
168
|
+
expect(assigns[:member_docs].count).to eq(0)
|
|
169
169
|
end
|
|
170
170
|
end
|
|
171
171
|
end
|
|
@@ -179,7 +179,7 @@ describe CollectionsController do
|
|
|
179
179
|
end
|
|
180
180
|
it "should not show flash" do
|
|
181
181
|
get :edit, id: @collection.id
|
|
182
|
-
flash[:notice].
|
|
182
|
+
expect(flash[:notice]).to be_nil
|
|
183
183
|
end
|
|
184
184
|
end
|
|
185
185
|
end
|