sufia 7.2.0 → 7.3.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +2 -0
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +1 -2
- data/.travis.yml +0 -1
- data/Gemfile +2 -1
- data/README.md +23 -106
- data/app/actors/sufia/apply_permission_template_actor.rb +19 -0
- data/app/actors/sufia/create_with_remote_files_actor.rb +2 -2
- data/app/actors/sufia/default_admin_set_actor.rb +42 -0
- data/app/actors/sufia/interpret_visibility_actor.rb +115 -0
- data/app/assets/images/collection.png +0 -0
- data/app/assets/javascripts/sufia.js +6 -0
- data/app/assets/javascripts/sufia/admin/admin_set/participants.es6 +9 -0
- data/app/assets/javascripts/sufia/admin/admin_set/visibility.es6 +134 -0
- data/app/assets/javascripts/sufia/admin/admin_set_controls.es6 +11 -0
- data/app/assets/javascripts/sufia/app.js +27 -5
- data/app/assets/javascripts/sufia/autocomplete.es6 +15 -0
- data/app/assets/javascripts/sufia/autocomplete/work.es6 +29 -0
- data/app/assets/javascripts/sufia/dashboard_actions.js +2 -4
- data/app/assets/javascripts/sufia/save_work/save_work_control.es6 +14 -2
- data/app/assets/javascripts/sufia/save_work/uploaded_files.es6 +7 -2
- data/app/assets/javascripts/sufia/save_work/visibility_component.es6 +245 -4
- data/app/assets/javascripts/sufia/select_work_type.es6 +38 -0
- data/app/assets/javascripts/sufia/workflow_actions_affix.js +14 -0
- data/app/assets/stylesheets/sufia/_dashboard.scss +50 -29
- data/app/assets/stylesheets/sufia/_footer.scss +30 -0
- data/app/assets/stylesheets/sufia/_header.scss +3 -4
- data/app/assets/stylesheets/sufia/_home-page.scss +10 -8
- data/app/assets/stylesheets/sufia/_select_work_type.scss +43 -0
- data/app/assets/stylesheets/sufia/_sufia.scss +4 -1
- data/app/assets/stylesheets/sufia/_variables.scss +3 -0
- data/app/assets/stylesheets/sufia/admin.scss +66 -169
- data/app/assets/stylesheets/sufia/blacklight_gallery.scss +17 -0
- data/app/authorities/qa/authorities/find_works.rb +15 -0
- data/app/controllers/concerns/sufia/batch_edits_controller_behavior.rb +2 -1
- data/app/controllers/concerns/sufia/batch_uploads_controller_behavior.rb +26 -13
- data/app/controllers/concerns/sufia/collections_controller_behavior.rb +25 -0
- data/app/controllers/concerns/sufia/controller.rb +8 -0
- data/app/controllers/concerns/sufia/deny_access_override_behavior.rb +1 -1
- data/app/controllers/concerns/sufia/file_sets_controller_behavior.rb +5 -14
- data/app/controllers/concerns/sufia/homepage_controller_behavior.rb +2 -0
- data/app/controllers/concerns/sufia/users_controller_behavior.rb +18 -7
- data/app/controllers/concerns/sufia/works_controller_behavior.rb +13 -10
- data/app/controllers/my/collections_controller.rb +5 -0
- data/app/controllers/my/shares_controller.rb +5 -0
- data/app/controllers/my/works_controller.rb +5 -0
- data/app/controllers/stats_controller.rb +1 -1
- data/app/controllers/sufia/admin/admin_sets_controller.rb +20 -2
- data/app/controllers/sufia/admin/permission_template_accesses_controller.rb +15 -0
- data/app/controllers/sufia/admin/permission_templates_controller.rb +29 -0
- data/app/controllers/sufia/admin_controller.rb +2 -0
- data/app/controllers/sufia/trophies_controller.rb +0 -2
- data/app/forms/sufia/forms/admin_set_form.rb +19 -0
- data/app/forms/sufia/forms/batch_edit_form.rb +16 -6
- data/app/forms/sufia/forms/batch_upload_form.rb +3 -2
- data/app/forms/sufia/forms/permission_template_form.rb +115 -0
- data/app/forms/sufia/forms/work_form.rb +6 -0
- data/app/helpers/batch_edits_helper.rb +1 -1
- data/app/helpers/sufia/citations_behavior.rb +0 -5
- data/app/helpers/sufia/citations_behaviors/formatters.rb +0 -1
- data/app/helpers/sufia/sufia_helper_behavior.rb +38 -6
- data/app/indexers/sufia/collection_indexer.rb +6 -0
- data/app/jobs/batch_create_job.rb +7 -15
- data/app/models/batch_upload_item.rb +2 -0
- data/app/models/concerns/sufia/ability.rb +12 -1
- data/app/models/sufia/permission_template.rb +102 -0
- data/app/models/sufia/permission_template_access.rb +18 -0
- data/app/presenters/sufia/admin_set_presenter.rb +1 -1
- data/app/presenters/sufia/model_icon.rb +7 -0
- data/app/presenters/sufia/select_type_list_presenter.rb +37 -0
- data/app/presenters/sufia/select_type_presenter.rb +35 -0
- data/app/presenters/sufia/work_show_presenter.rb +0 -2
- data/app/search_builders/collection_search_builder.rb +0 -2
- data/app/search_builders/sufia/admin_set_search_builder.rb +24 -0
- data/app/search_builders/sufia/catalog_search_builder.rb +10 -4
- data/app/search_builders/sufia/find_works_search_builder.rb +44 -0
- data/app/search_builders/sufia/my_search_builder_behavior.rb +0 -4
- data/app/search_builders/sufia/my_works_search_builder.rb +1 -1
- data/app/services/sufia/actor_factory.rb +6 -2
- data/app/services/sufia/admin_set_create_service.rb +22 -0
- data/app/services/sufia/admin_set_service.rb +46 -16
- data/app/services/sufia/collection_thumbnail_path_service.rb +10 -0
- data/app/services/sufia/workflow/abstract_notification.rb +39 -0
- data/app/services/sufia/workflow/changes_required_notification.rb +22 -0
- data/app/services/sufia/workflow/complete_notification.rb +22 -0
- data/app/services/sufia/workflow/pending_review_notification.rb +21 -0
- data/app/services/sufia/workflow/workflow_by_admin_set_strategy.rb +15 -0
- data/app/views/_masthead.html.erb +4 -4
- data/app/views/_toolbar.html.erb +31 -9
- data/app/views/_user_util_links.html.erb +7 -7
- data/app/views/batch_edits/edit.html.erb +24 -12
- data/app/views/catalog/_thumbnail_list_collection.html.erb +1 -1
- data/app/views/collections/_form.html.erb +2 -2
- data/app/views/collections/_media_display.html.erb +1 -1
- data/app/views/curation_concerns/base/_find_work_widget.html.erb +16 -0
- data/app/views/curation_concerns/base/_form.html.erb +6 -0
- data/app/views/curation_concerns/base/_form_child_work_relationships.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_metadata.html.erb +1 -1
- data/app/views/curation_concerns/base/_form_parent_work_relationships.html.erb +43 -0
- data/app/views/curation_concerns/base/_form_progress.html.erb +7 -4
- data/app/views/curation_concerns/base/_form_relationships.html.erb +6 -6
- data/app/views/curation_concerns/base/_form_share.html.erb +1 -2
- data/app/views/curation_concerns/base/_guts4form.html.erb +1 -1
- data/app/views/curation_concerns/base/_social_media.html.erb +1 -1
- data/app/views/curation_concerns/base/_workflow_actions_widget.erb +3 -0
- data/app/views/curation_concerns/base/edit.html.erb +1 -1
- data/app/views/curation_concerns/base/new.html.erb +1 -1
- data/app/views/curation_concerns/base/show.html.erb +4 -1
- data/app/views/curation_concerns/file_sets/_show_actions.html.erb +0 -3
- data/app/views/dashboard/_create_work_action.html.erb +20 -0
- data/app/views/dashboard/_index_partials/_heading_actions.html.erb +9 -22
- data/app/views/layouts/admin.html.erb +8 -68
- data/app/views/layouts/curation_concerns/1_column.html.erb +4 -31
- data/app/views/layouts/homepage.html.erb +15 -45
- data/app/views/layouts/sufia-dashboard.html.erb +1 -36
- data/app/views/layouts/sufia.html.erb +49 -0
- data/app/views/my/_document_list.html.erb +1 -1
- data/app/views/my/_facet_limit.html.erb +2 -2
- data/app/views/my/_index_partials/_default_group.html.erb +10 -10
- data/app/views/my/_index_partials/_list_collections.html.erb +1 -1
- data/app/views/my/_sort_and_per_page.html.erb +8 -8
- data/app/views/records/edit_fields/_rights.html.erb +0 -1
- data/app/views/shared/_footer.html.erb +1 -1
- data/app/views/shared/_select_work_type_modal.html.erb +34 -0
- data/app/views/sufia/admin/_collections.html.erb +31 -0
- data/app/views/sufia/admin/_sidebar.html.erb +35 -23
- data/app/views/sufia/admin/admin_sets/_form.html.erb +38 -15
- data/app/views/sufia/admin/admin_sets/_form_metadata.html.erb +2 -0
- data/app/views/sufia/admin/admin_sets/_form_participant_table.html.erb +21 -0
- data/app/views/sufia/admin/admin_sets/_form_participants.html.erb +68 -0
- data/app/views/sufia/admin/admin_sets/_form_visibility.html.erb +58 -0
- data/app/views/sufia/admin/admin_sets/index.html.erb +29 -33
- data/app/views/sufia/admin/admin_sets/show.html.erb +3 -0
- data/app/views/sufia/admin/show.html.erb +22 -19
- data/app/views/sufia/batch_uploads/_form.html.erb +2 -1
- data/app/views/sufia/homepage/index.html.erb +11 -3
- data/app/views/sufia/uploads/_js_templates.html.erb +15 -11
- data/app/views/users/_user_row.html.erb +10 -0
- data/app/views/users/index.html.erb +1 -12
- data/config/features.rb +2 -0
- data/config/locales/sufia.en.yml +122 -37
- data/config/routes.rb +4 -1
- data/db/migrate/20161021175854_create_permission_template.rb +11 -0
- data/db/migrate/20161021180154_create_permission_template_access.rb +11 -0
- data/db/migrate/20161116222307_add_release_to_permission_templates.rb +6 -0
- data/lib/generators/sufia/install_generator.rb +12 -3
- data/lib/generators/sufia/templates/catalog_controller.rb +3 -13
- data/lib/generators/sufia/templates/workflow.json.erb +65 -0
- data/lib/generators/sufia/upgrade700_generator.rb +1 -1
- data/lib/generators/sufia/work/templates/locale.en.yml.erb +37 -0
- data/lib/generators/sufia/{work_generator.rb → work/work_generator.rb} +25 -5
- data/lib/sufia.rb +0 -1
- data/lib/sufia/engine.rb +7 -0
- data/lib/sufia/move_all_works_to_admin_set.rb +8 -0
- data/lib/sufia/version.rb +1 -1
- data/lib/tasks/migrate.rake +8 -0
- data/spec/actors/sufia/apply_permission_template_actor_spec.rb +64 -0
- data/spec/actors/sufia/create_with_remote_files_actor_spec.rb +8 -0
- data/spec/actors/sufia/default_admin_set_actor_spec.rb +43 -0
- data/spec/actors/sufia/interpret_visibility_actor_spec.rb +266 -0
- data/spec/authorities/qa/authorities/find_works_spec.rb +55 -0
- data/spec/controllers/batch_edits_controller_spec.rb +1 -6
- data/spec/controllers/citations_controller_spec.rb +49 -10
- data/spec/controllers/collections_controller_spec.rb +39 -0
- data/spec/controllers/curation_concerns/generic_works_controller_spec.rb +22 -1
- data/spec/controllers/dashboard_controller_spec.rb +0 -8
- data/spec/controllers/depositors_controller_spec.rb +2 -2
- data/spec/controllers/downloads_controller_spec.rb +2 -2
- data/spec/controllers/my/collections_controller_spec.rb +5 -0
- data/spec/controllers/my/shares_controller_spec.rb +5 -0
- data/spec/controllers/my/works_controller_spec.rb +5 -0
- data/spec/controllers/stats_controller_spec.rb +1 -1
- data/spec/controllers/sufia/admin/admin_sets_controller_spec.rb +33 -5
- data/spec/controllers/sufia/admin/permission_template_accesses_controller_spec.rb +36 -0
- data/spec/controllers/sufia/admin/permission_templates_controller_spec.rb +46 -0
- data/spec/controllers/sufia/admin_controller_spec.rb +6 -0
- data/spec/controllers/sufia/batch_uploads_controller_spec.rb +40 -42
- data/spec/controllers/sufia/homepage_controller_spec.rb +14 -0
- data/spec/controllers/sufia/trophies_controller_spec.rb +17 -4
- data/spec/controllers/users_controller_spec.rb +13 -4
- data/spec/factories/permission_template_accesses.rb +5 -0
- data/spec/factories/permission_templates.rb +5 -0
- data/spec/factories/sipity_entities.rb +7 -0
- data/spec/factories/users.rb +4 -0
- data/spec/factories/workflow_states.rb +6 -0
- data/spec/factories/workflows.rb +5 -0
- data/spec/features/admin_admin_set_spec.rb +6 -4
- data/spec/features/batch_edit_spec.rb +0 -1
- data/spec/features/collection_spec.rb +4 -4
- data/spec/features/edit_work_spec.rb +1 -0
- data/spec/features/work_show_spec.rb +10 -0
- data/spec/forms/sufia/forms/admin_set_form_spec.rb +2 -1
- data/spec/forms/sufia/forms/batch_edit_form_spec.rb +30 -0
- data/spec/forms/sufia/forms/permission_template_form_spec.rb +196 -0
- data/spec/forms/sufia/forms/work_form_spec.rb +35 -1
- data/spec/helpers/batch_edits_helper_spec.rb +4 -4
- data/spec/helpers/blacklight_helper_spec.rb +1 -1
- data/spec/helpers/sufia_helper_spec.rb +39 -7
- data/spec/indexers/sufia/collection_indexer_spec.rb +12 -0
- data/spec/javascripts/autocomplete_spec.js.coffee +46 -6
- data/spec/javascripts/visibility_component_spec.js +491 -0
- data/spec/jobs/batch_create_job_spec.rb +27 -28
- data/spec/lib/sufia/arkivo_spec.rb +14 -0
- data/spec/lib/sufia/controlled_vocabulary/importer/downloader_spec.rb +31 -0
- data/spec/lib/sufia/move_all_works_to_admin_set_spec.rb +13 -0
- data/spec/lib/sufia/zotero_spec.rb +8 -0
- data/spec/models/sufia/ability_spec.rb +54 -14
- data/spec/models/sufia/permission_template_spec.rb +144 -0
- data/spec/models/sufia/user_usage_stats_spec.rb +8 -2
- data/spec/presenters/sufia/homepage_presenter_spec.rb +1 -1
- data/spec/presenters/sufia/select_type_list_presenter_spec.rb +26 -0
- data/spec/presenters/sufia/select_type_presenter_spec.rb +21 -0
- data/spec/search_builder/sufia/admin_set_search_builder_spec.rb +57 -0
- data/spec/search_builder/sufia/catalog_search_builder_spec.rb +40 -14
- data/spec/search_builder/sufia/find_works_search_builder_spec.rb +60 -0
- data/spec/search_builder/sufia/my_shares_search_builder_spec.rb +4 -1
- data/spec/search_builder/sufia/single_admin_set_search_builder_spec.rb +5 -1
- data/spec/services/sufia/actor_factory_spec.rb +13 -5
- data/spec/services/sufia/admin_set_create_service_spec.rb +27 -0
- data/spec/services/sufia/admin_set_service_spec.rb +104 -17
- data/spec/services/sufia/workflow/changes_required_notification_spec.rb +32 -0
- data/spec/services/sufia/workflow/complete_notification_spec.rb +32 -0
- data/spec/services/sufia/workflow/pending_review_notification_spec.rb +31 -0
- data/spec/services/sufia/workflow/workflow_by_admin_set_strategy_spec.rb +22 -0
- data/spec/spec_helper.rb +24 -5
- data/spec/support/proxies.rb +1 -1
- data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -0
- data/spec/views/_toolbar.html.erb_spec.rb +23 -6
- data/spec/views/batch_edits/edit.html.erb_spec.rb +7 -1
- data/spec/views/collections/_form_for_select_collection.html.erb_spec.rb +1 -3
- data/spec/views/curation_concerns/base/_find_work_widget.html.erb_spec.rb +22 -0
- data/spec/views/curation_concerns/base/_form.html.erb_spec.rb +7 -0
- data/spec/views/curation_concerns/base/_form_child_work_relationships.html.erb_spec.rb +1 -0
- data/spec/views/curation_concerns/base/_form_parent_work_relationships.html.erb_spec.rb +114 -0
- data/spec/views/curation_concerns/base/_form_progress.html.erb_spec.rb +3 -2
- data/spec/views/curation_concerns/base/_social_media.html.erb_spec.rb +1 -1
- data/spec/views/curation_concerns/base/edit.html.erb_spec.rb +1 -1
- data/spec/views/curation_concerns/base/show.html.erb_spec.rb +5 -1
- data/spec/views/curation_concerns/file_sets/_show_actions.html.erb_spec.rb +2 -2
- data/spec/views/dashboard/create_work_action.html.erb_spec.rb +27 -0
- data/spec/views/dashboard/index_spec.rb +7 -2
- data/spec/views/my/_sort_and_per_page.html.erb_spec.rb +33 -0
- data/spec/views/shared/select_work_type_modal.html.erb_spec.rb +32 -0
- data/spec/views/sufia/admin/admin_sets/_form.html.erb_spec.rb +18 -0
- data/spec/views/sufia/admin/admin_sets/_form_participants.html.erb_spec.rb +13 -0
- data/spec/views/sufia/admin/admin_sets/_form_visibility.html.erb_spec.rb +23 -0
- data/spec/views/sufia/batch_uploads/_form.html.erb_spec.rb +2 -12
- data/spec/views/sufia/homepage/index.html.erb_spec.rb +29 -8
- data/sufia.gemspec +5 -6
- data/tasks/sufia-dev.rake +6 -10
- data/template.rb +15 -0
- metadata +140 -28
- data/app/assets/stylesheets/sufia/widgets.css +0 -288
- data/app/helpers/sufia/citations_behaviors/formatters/endnote_formatter.rb +0 -49
- data/app/models/domain_term.rb +0 -4
- data/app/views/citations/file.html.erb +0 -0
- data/app/views/records/_rights_modal.html.erb +0 -1
- data/db/migrate/20160328222160_create_local_authorities.rb +0 -50
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Sufia::Workflow::ChangesRequiredNotification do
|
4
|
+
let(:approver) { create(:user) }
|
5
|
+
let(:depositor) { create(:user) }
|
6
|
+
let(:to_user) { create(:user) }
|
7
|
+
let(:cc_user) { create(:user) }
|
8
|
+
let(:work) { create(:generic_work, user: depositor) }
|
9
|
+
let(:entity) { create(:sipity_entity, proxy_for_global_id: work.to_global_id.to_s) }
|
10
|
+
let(:comment) { double("comment", comment: 'A pleasant read') }
|
11
|
+
let(:recipients) { { 'to' => [to_user], 'cc' => [cc_user] } }
|
12
|
+
|
13
|
+
describe ".send_notification" do
|
14
|
+
it 'sends a message to all users' do
|
15
|
+
expect(approver).to receive(:send_message).once.and_call_original
|
16
|
+
|
17
|
+
expect { described_class.send_notification(entity: entity, user: approver, comment: comment, recipients: recipients) }
|
18
|
+
.to change { depositor.mailbox.inbox.count }.by(1)
|
19
|
+
.and change { to_user.mailbox.inbox.count }.by(1)
|
20
|
+
.and change { cc_user.mailbox.inbox.count }.by(1)
|
21
|
+
end
|
22
|
+
context 'without carbon-copied users' do
|
23
|
+
let(:recipients) { { 'to' => [to_user] } }
|
24
|
+
it 'sends a message to the to user(s)' do
|
25
|
+
expect(approver).to receive(:send_message).once.and_call_original
|
26
|
+
expect { described_class.send_notification(entity: entity, user: approver, comment: comment, recipients: recipients) }
|
27
|
+
.to change { depositor.mailbox.inbox.count }.by(1)
|
28
|
+
.and change { to_user.mailbox.inbox.count }.by(1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Sufia::Workflow::CompleteNotification do
|
4
|
+
let(:approver) { create(:user) }
|
5
|
+
let(:depositor) { create(:user) }
|
6
|
+
let(:to_user) { create(:user) }
|
7
|
+
let(:cc_user) { create(:user) }
|
8
|
+
let(:work) { create(:generic_work, user: depositor) }
|
9
|
+
let(:entity) { create(:sipity_entity, proxy_for_global_id: work.to_global_id.to_s) }
|
10
|
+
let(:comment) { double("comment", comment: 'A pleasant read') }
|
11
|
+
let(:recipients) { { 'to' => [to_user], 'cc' => [cc_user] } }
|
12
|
+
|
13
|
+
describe ".send_notification" do
|
14
|
+
it 'sends a message to all users' do
|
15
|
+
expect(approver).to receive(:send_message).once.and_call_original
|
16
|
+
|
17
|
+
expect { described_class.send_notification(entity: entity, user: approver, comment: comment, recipients: recipients) }
|
18
|
+
.to change { depositor.mailbox.inbox.count }.by(1)
|
19
|
+
.and change { to_user.mailbox.inbox.count }.by(1)
|
20
|
+
.and change { cc_user.mailbox.inbox.count }.by(1)
|
21
|
+
end
|
22
|
+
context 'without carbon-copied users' do
|
23
|
+
let(:recipients) { { 'to' => [to_user] } }
|
24
|
+
it 'sends a message to the to user(s)' do
|
25
|
+
expect(approver).to receive(:send_message).once.and_call_original
|
26
|
+
expect { described_class.send_notification(entity: entity, user: approver, comment: comment, recipients: recipients) }
|
27
|
+
.to change { depositor.mailbox.inbox.count }.by(1)
|
28
|
+
.and change { to_user.mailbox.inbox.count }.by(1)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Sufia::Workflow::PendingReviewNotification do
|
4
|
+
let(:depositor) { create(:user) }
|
5
|
+
let(:to_user) { create(:user) }
|
6
|
+
let(:cc_user) { create(:user) }
|
7
|
+
let(:work) { create(:generic_work, user: depositor) }
|
8
|
+
let(:entity) { create(:sipity_entity, proxy_for_global_id: work.to_global_id.to_s) }
|
9
|
+
let(:comment) { double("comment", comment: 'A pleasant read') }
|
10
|
+
let(:recipients) { { 'to' => [to_user], 'cc' => [cc_user] } }
|
11
|
+
|
12
|
+
describe ".send_notification" do
|
13
|
+
it 'sends a message to all users except depositor' do
|
14
|
+
expect(depositor).to receive(:send_message).once.and_call_original
|
15
|
+
|
16
|
+
expect { described_class.send_notification(entity: entity, user: depositor, comment: comment, recipients: recipients) }
|
17
|
+
.to change { depositor.mailbox.inbox.count }.by(1)
|
18
|
+
.and change { to_user.mailbox.inbox.count }.by(1)
|
19
|
+
.and change { cc_user.mailbox.inbox.count }.by(1)
|
20
|
+
end
|
21
|
+
context 'without carbon-copied users' do
|
22
|
+
let(:recipients) { { 'to' => [to_user] } }
|
23
|
+
it 'sends a message to the to user(s)' do
|
24
|
+
expect(depositor).to receive(:send_message).once.and_call_original
|
25
|
+
expect { described_class.send_notification(entity: entity, user: depositor, comment: comment, recipients: recipients) }
|
26
|
+
.to change { depositor.mailbox.inbox.count }.by(1)
|
27
|
+
.and change { to_user.mailbox.inbox.count }.by(1)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
describe Sufia::Workflow::WorkflowByAdminSetStrategy, :no_clean do
|
2
|
+
context "when using default workflow strategy" do
|
3
|
+
let(:workflow_strategy) { described_class.new(nil, {}) }
|
4
|
+
|
5
|
+
describe '#workflow_name' do
|
6
|
+
subject { workflow_strategy.workflow_name }
|
7
|
+
it { is_expected.to eq 'default' }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "when using a non-default workflow strategy" do
|
12
|
+
let!(:admin_set) { AdminSet.create(title: ["test"]) }
|
13
|
+
let!(:permission_template) { Sufia::PermissionTemplate.create(workflow_name: workflow_name, admin_set_id: admin_set.id) }
|
14
|
+
let(:workflow_name) { 'work' }
|
15
|
+
let(:workflow_strategy) { described_class.new(nil, admin_set_id: admin_set.id) }
|
16
|
+
|
17
|
+
describe '#workflow_name' do
|
18
|
+
subject { workflow_strategy.workflow_name }
|
19
|
+
it { is_expected.to eq workflow_name }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'coveralls'
|
2
|
-
Coveralls.wear!
|
3
|
-
|
4
1
|
ENV["RAILS_ENV"] ||= 'test'
|
5
2
|
require "bundler/setup"
|
6
3
|
|
@@ -11,12 +8,16 @@ end
|
|
11
8
|
|
12
9
|
if coverage_needed?
|
13
10
|
require 'simplecov'
|
11
|
+
require 'coveralls'
|
14
12
|
SimpleCov.root(File.expand_path('../..', __FILE__))
|
15
13
|
SimpleCov.formatter = Coveralls::SimpleCov::Formatter
|
16
14
|
SimpleCov.start('rails') do
|
17
15
|
add_filter '/.internal_test_app'
|
18
16
|
add_filter '/lib/generators'
|
19
17
|
add_filter '/spec'
|
18
|
+
add_filter '/tasks'
|
19
|
+
add_filter '/lib/sufia/version.rb'
|
20
|
+
add_filter '/lib/sufia/engine.rb'
|
20
21
|
end
|
21
22
|
SimpleCov.command_name 'spec'
|
22
23
|
end
|
@@ -47,6 +48,21 @@ require 'byebug' unless ENV['TRAVIS']
|
|
47
48
|
Capybara.default_driver = :rack_test # This is a faster driver
|
48
49
|
Capybara.javascript_driver = :poltergeist # This is slower
|
49
50
|
Capybara.default_max_wait_time = ENV['TRAVIS'] ? 30 : 15
|
51
|
+
# Adding the below to deal with random Capybara-related timeouts in CI.
|
52
|
+
# Found in this thread: https://github.com/teampoltergeist/poltergeist/issues/375
|
53
|
+
poltergeist_options = {
|
54
|
+
js_errors: true,
|
55
|
+
timeout: 30,
|
56
|
+
logger: nil,
|
57
|
+
phantomjs_logger: StringIO.new,
|
58
|
+
phantomjs_options: [
|
59
|
+
'--load-images=no',
|
60
|
+
'--ignore-ssl-errors=yes'
|
61
|
+
]
|
62
|
+
}
|
63
|
+
Capybara.register_driver(:poltergeist) do |app|
|
64
|
+
Capybara::Poltergeist::Driver.new(app, poltergeist_options)
|
65
|
+
end
|
50
66
|
|
51
67
|
ActiveJob::Base.queue_adapter = :inline
|
52
68
|
|
@@ -170,7 +186,6 @@ RSpec.configure do |config|
|
|
170
186
|
config.include Shoulda::Matchers::Independent
|
171
187
|
|
172
188
|
if Devise::VERSION >= '4.2'
|
173
|
-
# This is for an unreleased version of Devise (will either be 4.2 or 5.0)
|
174
189
|
config.include Devise::Test::ControllerHelpers, type: :controller
|
175
190
|
else
|
176
191
|
config.include Devise::TestHelpers, type: :controller
|
@@ -182,7 +197,11 @@ RSpec.configure do |config|
|
|
182
197
|
|
183
198
|
config.include EngineRoutes, type: :controller
|
184
199
|
config.include Warden::Test::Helpers, type: :feature
|
185
|
-
config.after(:each, type: :feature)
|
200
|
+
config.after(:each, type: :feature) do
|
201
|
+
Warden.test_reset!
|
202
|
+
Capybara.reset_sessions!
|
203
|
+
page.driver.reset!
|
204
|
+
end
|
186
205
|
|
187
206
|
config.include Capybara::RSpecMatchers, type: :input
|
188
207
|
config.include FactoryGirl::Syntax::Methods
|
data/spec/support/proxies.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
describe '/_toolbar.html.erb', type: :view do
|
2
|
+
let(:presenter) { instance_double(Sufia::SelectTypeListPresenter, many?: false, first_model: GenericWork) }
|
2
3
|
before do
|
4
|
+
allow(view).to receive(:create_work_presenter).and_return(presenter)
|
3
5
|
allow(view).to receive(:user_signed_in?).and_return(true)
|
4
6
|
allow(controller).to receive(:current_user).and_return(stub_model(User, user_key: 'userX'))
|
5
7
|
allow(view).to receive(:can?).and_call_original
|
@@ -38,25 +40,40 @@ describe '/_toolbar.html.erb', type: :view do
|
|
38
40
|
expect(rendered).to have_link 'Shares', href: sufia.dashboard_shares_path
|
39
41
|
end
|
40
42
|
|
41
|
-
describe "New Work
|
42
|
-
context "when the user can create
|
43
|
+
describe "New Work link" do
|
44
|
+
context "when the user can create multiple work types" do
|
45
|
+
let(:presenter) { instance_double(Sufia::SelectTypeListPresenter, many?: true) }
|
46
|
+
it "has a link to upload" do
|
47
|
+
render
|
48
|
+
expect(rendered).to have_selector 'a[data-behavior="select-work"][data-target="#worktypes-to-create"][data-create-type="single"]'
|
49
|
+
expect(rendered).to have_link('New Work', href: '#')
|
50
|
+
|
51
|
+
expect(rendered).to have_selector 'a[data-behavior="select-work"][data-target="#worktypes-to-create"][data-create-type="batch"]'
|
52
|
+
expect(rendered).to have_link('Batch Create', href: '#')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "when the user can create a single work type" do
|
57
|
+
let(:presenter) { instance_double(Sufia::SelectTypeListPresenter, many?: false, first_model: GenericWork) }
|
43
58
|
it "has a link to upload" do
|
44
|
-
allow(view).to receive(:can?).with(:create, GenericWork).and_return(true)
|
45
59
|
render
|
46
60
|
expect(rendered).to have_link('New Work', href: new_curation_concerns_generic_work_path)
|
61
|
+
expect(rendered).to have_link('Batch Create', href: sufia.new_batch_upload_path(payload_concern: 'GenericWork'))
|
47
62
|
end
|
48
63
|
end
|
49
64
|
|
50
|
-
context "when the user can't create
|
65
|
+
context "when the user can't create any work types" do
|
66
|
+
before do
|
67
|
+
allow(view).to receive(:can_ever_create_works?).and_return(false)
|
68
|
+
end
|
51
69
|
it "does not have a link to upload" do
|
52
|
-
allow(view).to receive(:can?).with(:create, GenericWork).and_return(false)
|
53
70
|
render
|
54
71
|
expect(rendered).not_to have_link('New Work')
|
55
72
|
end
|
56
73
|
end
|
57
74
|
end
|
58
75
|
|
59
|
-
describe "New Collection
|
76
|
+
describe "New Collection link" do
|
60
77
|
context "when the user can create collections" do
|
61
78
|
it "has a link to upload" do
|
62
79
|
allow(view).to receive(:can?).with(:create, Collection).and_return(true)
|
@@ -17,8 +17,14 @@ describe 'batch_edits/edit.html.erb', type: :view do
|
|
17
17
|
render
|
18
18
|
end
|
19
19
|
|
20
|
-
it "draws
|
20
|
+
it "draws the page" do
|
21
21
|
expect(rendered).to have_selector 'form[data-model="generic_work"]'
|
22
|
+
# Help for the description
|
22
23
|
expect(rendered).to have_selector ".generic_work_description p.help-block"
|
24
|
+
|
25
|
+
# param key for the permissions javascript
|
26
|
+
expect(rendered).to have_selector 'form#form_permissions[data-param-key="generic_work"]'
|
27
|
+
# batch ids for the permissions update form
|
28
|
+
expect(rendered).to have_selector "input[name=\"batch_document_ids[]\"]", visible: false
|
23
29
|
end
|
24
30
|
end
|
@@ -9,9 +9,7 @@ describe 'collections/_form_for_select_collection.html.erb', type: :view do
|
|
9
9
|
end
|
10
10
|
let(:solr_collections) do
|
11
11
|
collections.map do |c|
|
12
|
-
SolrDocument.new(c.to_solr
|
13
|
-
sd['system_create_dtsi'] = c.create_date.to_s
|
14
|
-
end
|
12
|
+
SolrDocument.new(c.to_solr.merge('system_create_dtsi' => c.create_date.to_s))
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'curation_concerns/base/_find_work_widget.html.erb', type: :view do
|
4
|
+
let(:work) { stub_model(GenericWork) }
|
5
|
+
let(:form) do
|
6
|
+
view.simple_form_for(work, url: '/update') do |work_form|
|
7
|
+
return work_form
|
8
|
+
end
|
9
|
+
end
|
10
|
+
before do
|
11
|
+
allow(view).to receive(:current_user).and_return(stub_model(User))
|
12
|
+
render 'curation_concerns/base/find_work_widget',
|
13
|
+
f: form,
|
14
|
+
id_name: 'work_child_members_ids',
|
15
|
+
id_type: 'ordered_member_ids',
|
16
|
+
user_email: 'foo@bar.com',
|
17
|
+
id: '999'
|
18
|
+
end
|
19
|
+
it "has a widget" do
|
20
|
+
expect(rendered).to have_selector('input[data-autocomplete-url="/authorities/search/find_works"]')
|
21
|
+
end
|
22
|
+
end
|
@@ -68,6 +68,10 @@ describe 'curation_concerns/base/_form.html.erb', type: :view do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
context "for a persisted object" do
|
71
|
+
before do
|
72
|
+
# Add an error to the work
|
73
|
+
work.errors.add :base, 'broken'
|
74
|
+
end
|
71
75
|
it "draws the page" do
|
72
76
|
expect(page).to have_selector("form[action='/concern/generic_works/456']")
|
73
77
|
expect(page).to have_selector("select#generic_work_resource_type", count: 1)
|
@@ -75,6 +79,9 @@ describe 'curation_concerns/base/_form.html.erb', type: :view do
|
|
75
79
|
expect(page).to have_selector("select#generic_work_representative_id", count: 1)
|
76
80
|
expect(page).not_to have_link('Batch upload', href: '/batch_uploads')
|
77
81
|
expect(page).to have_link("Cancel", href: "/dashboard")
|
82
|
+
|
83
|
+
# It diplays form errors
|
84
|
+
expect(page).to have_content("broken")
|
78
85
|
end
|
79
86
|
end
|
80
87
|
end
|
@@ -29,6 +29,7 @@ describe "curation_concerns/base/_form_child_work_relationships.html.erb", type:
|
|
29
29
|
allow(view).to receive(:f).and_return(f)
|
30
30
|
allow(f).to receive(:object).and_return(form)
|
31
31
|
allow(controller).to receive(:current_user).and_return(stub_model(User))
|
32
|
+
stub_template '_find_work_widget.html.erb' => "<input value=''/>"
|
32
33
|
assign(:form, form)
|
33
34
|
end
|
34
35
|
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "curation_concerns/base/_form_parent_work_relationships.html.erb", type: :view do
|
4
|
+
let(:work) do
|
5
|
+
stub_model(GenericWork, id: '456', title: ["MyWork"])
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:work_2) do
|
9
|
+
stub_model(GenericWork, id: '567', title: ["Parent Work"])
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:ability) { double }
|
13
|
+
|
14
|
+
let(:form) do
|
15
|
+
Sufia::Forms::WorkForm.new(work, ability)
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:f) { double }
|
19
|
+
|
20
|
+
let(:page) do
|
21
|
+
render
|
22
|
+
Capybara::Node::Simple.new(rendered)
|
23
|
+
end
|
24
|
+
|
25
|
+
before do
|
26
|
+
view.lookup_context.view_paths.push 'app/views/curation_concerns'
|
27
|
+
allow(view).to receive(:params).and_return(id: work.id)
|
28
|
+
allow(view).to receive(:curation_concern).and_return(work)
|
29
|
+
allow(view).to receive(:f).and_return(f)
|
30
|
+
allow(f).to receive(:object).and_return(form)
|
31
|
+
allow(controller).to receive(:current_user).and_return(stub_model(User))
|
32
|
+
stub_template '_find_work_widget.html.erb' => "<input value=''/>"
|
33
|
+
assign(:form, form)
|
34
|
+
end
|
35
|
+
|
36
|
+
context "When editing a work" do
|
37
|
+
context "and no parent works are present" do
|
38
|
+
before do
|
39
|
+
allow(work).to receive(:in_works).and_return([])
|
40
|
+
end
|
41
|
+
it "has 1 empty parent work input" do
|
42
|
+
expect(page).to have_selector("input[value='']", count: 1)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "will not display the remove button in the actions" do
|
46
|
+
expect(page).to have_selector(".btn-remove-row", visible: false)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "will display the add button in the actions" do
|
50
|
+
expect(page).to have_selector(".btn-add-row", visible: true, count: 1)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
context "When 1 parent work is present" do
|
54
|
+
let(:work_2) do
|
55
|
+
stub_model(GenericWork, id: '567', title: ["Test Parent Work"])
|
56
|
+
end
|
57
|
+
|
58
|
+
before do
|
59
|
+
allow(work).to receive(:in_works).and_return([work_2])
|
60
|
+
end
|
61
|
+
it "has 1 empty parent work input with add button" do
|
62
|
+
expect(page).to have_selector("input[value='']", count: 1)
|
63
|
+
expect(page).to have_selector(".btn-add-row", visible: true, count: 1)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "has an input box that is filled in with the parent id" do
|
67
|
+
expect(page).to have_selector("input[value='#{work_2.id}']", count: 1)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "generates a link for the parents first title" do
|
71
|
+
expect(page).to have_link("Test Parent Work")
|
72
|
+
end
|
73
|
+
|
74
|
+
it "has an edit and remove button" do
|
75
|
+
within ".old-row" do
|
76
|
+
expect(page).to have_selector(".btn-remove-row", visible: true, count: 1)
|
77
|
+
expect(page).to have_selector(".btn-edit-row", visible: true, count: 1)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
context "When multiple parent works are present" do
|
82
|
+
let(:work_2) do
|
83
|
+
stub_model(GenericWork, id: '567', title: ["Test Parent Work"])
|
84
|
+
end
|
85
|
+
let(:work_3) do
|
86
|
+
stub_model(GenericWork, id: '789', title: ["Test Parent Work 2"])
|
87
|
+
end
|
88
|
+
before do
|
89
|
+
allow(work).to receive(:in_works).and_return([work_2, work_3])
|
90
|
+
end
|
91
|
+
it "has 1 empty parent work input with add button" do
|
92
|
+
expect(page).to have_selector("input[value='']", count: 1)
|
93
|
+
expect(page).to have_selector(".btn-add-row", visible: true, count: 1)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "has an input box that is filled in with the parent ids" do
|
97
|
+
expect(page).to have_selector("input[value='#{work_2.id}']", count: 1)
|
98
|
+
expect(page).to have_selector("input[value='#{work_3.id}']", count: 1)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "generates a link for the parents first title" do
|
102
|
+
expect(page).to have_link("Test Parent Work")
|
103
|
+
expect(page).to have_link("Test Parent Work 2")
|
104
|
+
end
|
105
|
+
|
106
|
+
it "has an edit and remove button" do
|
107
|
+
within ".old-row" do
|
108
|
+
expect(page).to have_selector(".btn-remove-row", visible: true, count: 2)
|
109
|
+
expect(page).to have_selector(".btn-edit-row", visible: true, count: 2)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|