hyrax 2.3.3 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +1 -1
- data/.github/stale.yml +19 -0
- data/README.md +2 -2
- data/app/actors/hyrax/actors/apply_permission_template_actor.rb +2 -4
- data/app/actors/hyrax/actors/create_with_files_ordered_members_actor.rb +45 -0
- data/app/actors/hyrax/actors/create_with_remote_files_ordered_members_actor.rb +96 -0
- data/app/actors/hyrax/actors/file_set_ordered_members_actor.rb +16 -0
- data/app/actors/hyrax/actors/ordered_members_actor.rb +28 -0
- data/app/assets/javascripts/hyrax/collections.js +2 -0
- data/app/assets/stylesheets/hyrax/_file-listing.scss +2 -1
- data/app/assets/stylesheets/hyrax/_work-show.scss +4 -0
- data/app/controllers/concerns/hyrax/embargoes_controller_behavior.rb +1 -1
- data/app/controllers/concerns/hyrax/works_controller_behavior.rb +5 -2
- data/app/controllers/hyrax/dashboard/nest_collections_controller.rb +2 -9
- data/app/helpers/hyrax/batch_edits_helper.rb +0 -1
- data/app/helpers/hyrax/hyrax_helper_behavior.rb +1 -0
- data/app/helpers/hyrax/iiif_helper.rb +12 -0
- data/app/jobs/attach_files_to_work_with_ordered_members_job.rb +41 -0
- data/app/presenters/hyrax/work_show_presenter.rb +29 -2
- data/app/services/hyrax/permission_template_applicator.rb +48 -0
- data/app/views/hyrax/admin/collection_types/_form_settings.html.erb +1 -1
- data/app/views/hyrax/admin/collection_types/index.html.erb +1 -1
- data/app/views/hyrax/base/_form_rendering.html.erb +7 -5
- data/app/views/hyrax/base/_form_representative.html.erb +4 -2
- data/app/views/hyrax/base/_form_thumbnail.html.erb +4 -2
- data/app/views/hyrax/base/_member.html.erb +1 -1
- data/app/views/hyrax/base/_representative_media.html.erb +1 -4
- data/app/views/hyrax/base/_show_actions.html.erb +6 -4
- data/app/views/hyrax/base/iiif_viewers/_universal_viewer.html.erb +4 -0
- data/app/views/hyrax/base/show.html.erb +2 -2
- data/app/views/hyrax/dashboard/works/_default_group.html.erb +1 -1
- data/app/views/hyrax/file_sets/_file_set_title.erb +2 -2
- data/app/views/hyrax/homepage/_featured.html.erb +0 -3
- data/app/views/hyrax/my/_collection_action_menu.html.erb +1 -0
- data/app/views/hyrax/my/collections/_default_group.html.erb +1 -9
- data/app/views/hyrax/my/collections/_list_collections.html.erb +1 -1
- data/app/views/hyrax/users/_activity_log.html.erb +1 -1
- data/config/locales/hyrax.de.yml +2 -0
- data/config/locales/hyrax.en.yml +2 -0
- data/config/locales/hyrax.es.yml +2 -0
- data/config/locales/hyrax.fr.yml +2 -0
- data/config/locales/hyrax.it.yml +2 -0
- data/config/locales/hyrax.pt-BR.yml +2 -0
- data/config/locales/hyrax.zh.yml +2 -0
- data/hyrax.gemspec +1 -0
- data/lib/generators/hyrax/templates/config/initializers/hyrax.rb +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.de.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.en.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.es.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.fr.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.it.yml +1 -1
- data/lib/generators/hyrax/templates/config/locales/hyrax.zh.yml +1 -1
- data/lib/hyrax/configuration.rb +1 -1
- data/lib/hyrax/transactions.rb +23 -0
- data/lib/hyrax/transactions/container.rb +63 -0
- data/lib/hyrax/transactions/create_work.rb +47 -0
- data/lib/hyrax/transactions/steps/apply_permission_template.rb +29 -0
- data/lib/hyrax/transactions/steps/ensure_admin_set.rb +23 -0
- data/lib/hyrax/transactions/steps/ensure_permission_template.rb +27 -0
- data/lib/hyrax/transactions/steps/save_work.rb +35 -0
- data/lib/hyrax/transactions/steps/set_default_admin_set.rb +25 -0
- data/lib/hyrax/transactions/steps/set_modified_date.rb +25 -0
- data/lib/hyrax/transactions/steps/set_uploaded_date.rb +28 -0
- data/lib/hyrax/version.rb +1 -1
- data/spec/actors/hyrax/actors/create_with_files_ordered_members_actor_spec.rb +41 -0
- data/spec/actors/hyrax/actors/create_with_remote_files_ordered_members_actor_spec.rb +49 -0
- data/spec/actors/hyrax/actors/file_set_ordered_members_actor_spec.rb +35 -0
- data/spec/actors/hyrax/actors/ordered_members_actor_spec.rb +59 -0
- data/spec/controllers/hyrax/embargoes_controller_spec.rb +2 -0
- data/spec/controllers/hyrax/generic_works_controller_spec.rb +6 -1
- data/spec/factories/generic_works.rb +6 -0
- data/spec/features/collection_multi_membership_spec.rb +6 -6
- data/spec/features/work_show_spec.rb +58 -5
- data/spec/helpers/hyrax/batch_edits_helper_spec.rb +4 -2
- data/spec/helpers/hyrax/iiif_helper_spec.rb +44 -0
- data/spec/hyrax/transactions/create_work_spec.rb +155 -0
- data/spec/hyrax/transactions/steps/apply_permission_template_spec.rb +72 -0
- data/spec/hyrax/transactions/steps/ensure_admin_set_spec.rb +25 -0
- data/spec/hyrax/transactions/steps/ensure_permission_template_spec.rb +33 -0
- data/spec/hyrax/transactions/steps/save_work_spec.rb +32 -0
- data/spec/hyrax/transactions/steps/set_default_admin_set_spec.rb +38 -0
- data/spec/hyrax/transactions/steps/set_modified_date_spec.rb +22 -0
- data/spec/hyrax/transactions/steps/set_uploaded_date_spec.rb +32 -0
- data/spec/jobs/attach_files_to_work_with_ordered_members_job_spec.rb +13 -0
- data/spec/presenters/hyrax/presenter_renderer_spec.rb +4 -2
- data/spec/presenters/hyrax/work_show_presenter_spec.rb +46 -2
- data/spec/services/hyrax/permission_template_applicator_spec.rb +69 -0
- data/spec/spec_helper.rb +13 -2
- data/spec/views/catalog/index.html.erb_spec.rb +7 -4
- data/spec/views/hyrax/admin/admin_sets/_show_actions.html.erb_spec.rb +2 -0
- data/spec/views/hyrax/admin/admin_sets/_show_document_list_row.html.erb_spec.rb +4 -1
- data/spec/views/hyrax/admin/admin_sets/index.html.erb_spec.rb +6 -2
- data/spec/views/hyrax/admin/admin_sets/index.json.erb_spec.rb +1 -2
- data/spec/views/hyrax/admin/collection_types/_form_metadata_admin_set.html.erb_spec.rb +1 -1
- data/spec/views/hyrax/admin/collection_types/_form_settings.html.erb_spec.rb +5 -26
- data/spec/views/hyrax/admin/collection_types/index.html.erb_spec.rb +26 -5
- data/spec/views/hyrax/admin/stats/show.html.erb_spec.rb +1 -0
- data/spec/views/hyrax/base/_attribute_rows.html.erb_spec.rb +5 -1
- data/spec/views/hyrax/base/_attributes.html.erb_spec.rb +1 -0
- data/spec/views/hyrax/base/_form_rendering.html.erb_spec.rb +5 -1
- data/spec/views/hyrax/base/_items.html.erb_spec.rb +2 -0
- data/spec/views/hyrax/base/_relationships.html.erb_spec.rb +2 -1
- data/spec/views/hyrax/base/_show_actions.html.erb_spec.rb +71 -0
- data/spec/views/hyrax/base/file_manager.html.erb_spec.rb +11 -14
- data/spec/views/hyrax/base/show.html.erb_spec.rb +2 -2
- data/spec/views/hyrax/base/show.json.jbuilder_spec.rb +3 -1
- data/spec/views/hyrax/collections/_show_document_list_row.html.erb_spec.rb +6 -1
- data/spec/views/hyrax/collections/_show_parent_collections.html.erb_spec.rb +5 -5
- data/spec/views/hyrax/collections/_subcollection_list.html.erb_spec.rb +1 -1
- data/spec/views/hyrax/collections/show.html.erb_spec.rb +3 -2
- data/spec/views/hyrax/dashboard/collections/_form_share.erb_spec.rb +1 -1
- data/spec/views/hyrax/dashboard/collections/_form_share_table.html.erb_spec.rb +1 -1
- data/spec/views/hyrax/dashboard/collections/_show_document_list_row.html.erb_spec.rb +6 -1
- data/spec/views/hyrax/dashboard/collections/_subcollection_list.html.erb_spec.rb +1 -1
- data/spec/views/hyrax/dashboard/collections/edit.html.erb_spec.rb +3 -1
- data/spec/views/hyrax/dashboard/profiles/show.html.erb_spec.rb +2 -3
- data/spec/views/hyrax/file_sets/_show_characterization_details.html.erb_spec.rb +1 -2
- data/spec/views/hyrax/file_sets/_single_use_links.html.erb_spec.rb +1 -2
- data/spec/views/hyrax/homepage/_sortable_featured.html.erb_spec.rb +1 -1
- data/spec/views/hyrax/my/_collection_action_menu.html.erb_spec.rb +5 -5
- data/spec/views/hyrax/my/collections/_list_collections.html.erb_spec.rb +11 -8
- data/spec/views/hyrax/users/index.html.erb_spec.rb +1 -0
- data/spec/views/hyrax/users/show.html.erb_spec.rb +3 -0
- data/template.rb +1 -1
- metadata +65 -3
- data/app/views/hyrax/dashboard/collections/_form_default_group_delt.html.erb +0 -27
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'hyrax/transactions'
|
4
|
+
|
5
|
+
RSpec.describe Hyrax::Transactions::Steps::EnsureAdminSet do
|
6
|
+
subject(:step) { described_class.new }
|
7
|
+
let(:work) { build(:generic_work) }
|
8
|
+
|
9
|
+
describe '#call' do
|
10
|
+
context 'without an admin set' do
|
11
|
+
it 'is a failure' do
|
12
|
+
expect(step.call(work).failure).to eq :no_admin_set_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with an admin set' do
|
17
|
+
let(:admin_set) { create(:admin_set) }
|
18
|
+
let(:work) { build(:generic_work, admin_set_id: admin_set.id) }
|
19
|
+
|
20
|
+
it 'is a success' do
|
21
|
+
expect(step.call(work)).to be_success
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'hyrax/transactions'
|
4
|
+
|
5
|
+
RSpec.describe Hyrax::Transactions::Steps::EnsurePermissionTemplate do
|
6
|
+
subject(:step) { described_class.new }
|
7
|
+
let(:work) { build(:generic_work) }
|
8
|
+
|
9
|
+
describe '#call' do
|
10
|
+
context 'without an admin_set' do
|
11
|
+
it 'is a failure' do
|
12
|
+
expect(step.call(work).failure).to eq :no_permission_template
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'with an admin_set' do
|
17
|
+
let(:work) { build(:generic_work, admin_set: admin_set) }
|
18
|
+
let(:admin_set) { create(:admin_set, with_permission_template: true) }
|
19
|
+
|
20
|
+
it 'is success' do
|
21
|
+
expect(step.call(work)).to be_success
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'missing PermissionTemplate' do
|
25
|
+
let(:admin_set) { create(:admin_set, with_permission_template: false) }
|
26
|
+
|
27
|
+
it 'fails with missing template' do
|
28
|
+
expect(step.call(work).failure).to eq :no_permission_template
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'hyrax/transactions'
|
4
|
+
|
5
|
+
RSpec.describe Hyrax::Transactions::Steps::SaveWork do
|
6
|
+
subject(:step) { described_class.new }
|
7
|
+
let(:work) { build(:generic_work) }
|
8
|
+
|
9
|
+
describe '#call' do
|
10
|
+
it 'is success' do
|
11
|
+
expect(step.call(work)).to be_success
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'persists the work' do
|
15
|
+
expect { step.call(work) }
|
16
|
+
.to change { work.persisted? }
|
17
|
+
.to true
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'if the work is invalid' do
|
21
|
+
let(:work) { build(:invalid_generic_work) }
|
22
|
+
|
23
|
+
it 'returns failure' do
|
24
|
+
expect(step.call(work)).to be_failure
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'gives errors about the work' do
|
28
|
+
expect(step.call(work).failure).to eq work.errors
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'hyrax/transactions'
|
4
|
+
|
5
|
+
RSpec.describe Hyrax::Transactions::Steps::SetDefaultAdminSet do
|
6
|
+
subject(:step) { described_class.new }
|
7
|
+
let(:work) { build(:generic_work) }
|
8
|
+
|
9
|
+
describe '#call' do
|
10
|
+
let(:admin_set_id) { AdminSet.find_or_create_default_admin_set_id }
|
11
|
+
|
12
|
+
it 'is success' do
|
13
|
+
expect(step.call(work)).to be_success
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'sets the default admin_set' do
|
17
|
+
expect { step.call(work) }
|
18
|
+
.to change { work.admin_set&.id }
|
19
|
+
.from(nil)
|
20
|
+
.to(admin_set_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
context 'when the work has an admin_set' do
|
24
|
+
let(:admin_set) { create(:admin_set) }
|
25
|
+
let(:work) { build(:generic_work, admin_set: admin_set) }
|
26
|
+
|
27
|
+
it 'is success' do
|
28
|
+
expect(step.call(work)).to be_success
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'does not change the admin_set' do
|
32
|
+
expect { step.call(work) }
|
33
|
+
.not_to change { work.admin_set&.id }
|
34
|
+
.from(admin_set.id)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'hyrax/transactions'
|
4
|
+
|
5
|
+
RSpec.describe Hyrax::Transactions::Steps::SetModifiedDate do
|
6
|
+
subject(:step) { described_class.new }
|
7
|
+
let(:work) { build(:generic_work) }
|
8
|
+
|
9
|
+
let(:xmas) { DateTime.parse('2018-12-25 11:30').iso8601 }
|
10
|
+
|
11
|
+
before { allow(Hyrax::TimeService).to receive(:time_in_utc).and_return(xmas) }
|
12
|
+
|
13
|
+
describe '#call' do
|
14
|
+
it 'is success' do
|
15
|
+
expect(step.call(work)).to be_success
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'sets the modified date' do
|
19
|
+
expect { step.call(work) }.to change { work.date_modified }.to xmas
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'hyrax/transactions'
|
4
|
+
|
5
|
+
RSpec.describe Hyrax::Transactions::Steps::SetUploadedDate do
|
6
|
+
subject(:step) { described_class.new }
|
7
|
+
let(:work) { build(:generic_work) }
|
8
|
+
let(:xmas) { DateTime.parse('2018-12-25 11:30').iso8601 }
|
9
|
+
|
10
|
+
before { allow(Hyrax::TimeService).to receive(:time_in_utc).and_return(xmas) }
|
11
|
+
|
12
|
+
describe '#call' do
|
13
|
+
it 'is success' do
|
14
|
+
expect(step.call(work)).to be_success
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'sets the uploaded date' do
|
18
|
+
expect { step.call(work) }.to change { work.date_uploaded }.to xmas
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'when a modified date exists' do
|
22
|
+
let(:work) { build(:generic_work, date_modified: xmas_past) }
|
23
|
+
let(:xmas_past) { DateTime.parse('2009-12-25 11:30').iso8601 }
|
24
|
+
|
25
|
+
it 'sets the uploaded date to the modified date' do
|
26
|
+
expect { step.call(work) }
|
27
|
+
.to change { work.date_uploaded }
|
28
|
+
.to work.date_modified
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
RSpec.describe AttachFilesToWorkWithOrderedMembersJob, perform_enqueued: [AttachFilesToWorkWithOrderedMembersJob] do
|
2
|
+
let(:file1) { File.open(fixture_path + '/world.png') }
|
3
|
+
let(:file2) { File.open(fixture_path + '/image.jp2') }
|
4
|
+
let(:uploaded_file1) { build(:uploaded_file, file: file1) }
|
5
|
+
let(:uploaded_file2) { build(:uploaded_file, file: file2) }
|
6
|
+
let(:generic_work) { create(:public_generic_work) }
|
7
|
+
|
8
|
+
it "attaches files and passes ordered_members to OrderedMembersActor" do
|
9
|
+
expect(Hyrax::Actors::OrderedMembersActor).to receive(:new).with([FileSet, FileSet], User).and_return(Hyrax::Actors::OrderedMembersActor)
|
10
|
+
expect(Hyrax::Actors::OrderedMembersActor).to receive(:attach_ordered_members_to_work).with(generic_work)
|
11
|
+
described_class.perform_now(generic_work, [uploaded_file1, uploaded_file2])
|
12
|
+
end
|
13
|
+
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
RSpec.describe Hyrax::PresenterRenderer, type: :view do
|
2
|
-
let(:work) { GenericWork.new }
|
3
2
|
let(:ability) { double }
|
4
|
-
let(:document) { SolrDocument.new(
|
3
|
+
let(:document) { SolrDocument.new(data) }
|
4
|
+
let(:data) do
|
5
|
+
{ id: '123', date_created_tesim: 'foo', date_uploaded_tesim: 'bar', has_model_ssim: 'GenericWork' }
|
6
|
+
end
|
5
7
|
let(:presenter) { Hyrax::WorkShowPresenter.new(document, ability) }
|
6
8
|
let(:renderer) { described_class.new(presenter, view) }
|
7
9
|
|
@@ -45,7 +45,7 @@ RSpec.describe Hyrax::WorkShowPresenter do
|
|
45
45
|
it { is_expected.to eq 'http://example.org/concern/generic_works/888888/manifest' }
|
46
46
|
end
|
47
47
|
|
48
|
-
describe '#
|
48
|
+
describe '#iiif_viewer?' do
|
49
49
|
let(:id_present) { false }
|
50
50
|
let(:representative_presenter) { double('representative', present?: false) }
|
51
51
|
let(:image_boolean) { false }
|
@@ -64,7 +64,7 @@ RSpec.describe Hyrax::WorkShowPresenter do
|
|
64
64
|
allow(Hyrax.config).to receive(:iiif_image_server?).and_return(iiif_enabled)
|
65
65
|
end
|
66
66
|
|
67
|
-
subject { presenter.
|
67
|
+
subject { presenter.iiif_viewer? }
|
68
68
|
|
69
69
|
context 'with no representative_id' do
|
70
70
|
it { is_expected.to be false }
|
@@ -533,4 +533,48 @@ RSpec.describe Hyrax::WorkShowPresenter do
|
|
533
533
|
end
|
534
534
|
end
|
535
535
|
end
|
536
|
+
|
537
|
+
describe "#show_deposit_for?" do
|
538
|
+
subject { presenter }
|
539
|
+
|
540
|
+
context "when user has depositable collections" do
|
541
|
+
let(:user_collections) { double }
|
542
|
+
|
543
|
+
it "returns true" do
|
544
|
+
expect(subject.show_deposit_for?(collections: user_collections)).to be true
|
545
|
+
end
|
546
|
+
end
|
547
|
+
|
548
|
+
context "when user does not have depositable collections" do
|
549
|
+
let(:user_collections) { nil }
|
550
|
+
|
551
|
+
context "and user can create a collection" do
|
552
|
+
before do
|
553
|
+
allow(ability).to receive(:can?).with(:create_any, Collection).and_return(true)
|
554
|
+
end
|
555
|
+
|
556
|
+
it "returns true" do
|
557
|
+
expect(subject.show_deposit_for?(collections: user_collections)).to be true
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
561
|
+
context "and user can NOT create a collection" do
|
562
|
+
before do
|
563
|
+
allow(ability).to receive(:can?).with(:create_any, Collection).and_return(false)
|
564
|
+
end
|
565
|
+
|
566
|
+
it "returns false" do
|
567
|
+
expect(subject.show_deposit_for?(collections: user_collections)).to be false
|
568
|
+
end
|
569
|
+
end
|
570
|
+
end
|
571
|
+
end
|
572
|
+
|
573
|
+
describe '#iiif_viewer' do
|
574
|
+
subject { presenter.iiif_viewer }
|
575
|
+
|
576
|
+
it 'defaults to universal viewer' do
|
577
|
+
expect(subject).to be :universal_viewer
|
578
|
+
end
|
579
|
+
end
|
536
580
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
RSpec.describe Hyrax::PermissionTemplateApplicator do
|
2
|
+
subject(:applicator) { described_class.new(template: template) }
|
3
|
+
let(:manage_groups) { ['edit_group_1', 'edit_group_2'] }
|
4
|
+
let(:manage_users) { ['moomin', 'snork'] }
|
5
|
+
let(:template) { :not_a_template }
|
6
|
+
let(:view_groups) { ['read_group_1', 'read_group_2'] }
|
7
|
+
let(:view_users) { ['snufkin', 'too-ticky'] }
|
8
|
+
let(:work) { build(:work) }
|
9
|
+
|
10
|
+
describe '.apply' do
|
11
|
+
it 'initializes with template' do
|
12
|
+
expect(described_class.apply(template))
|
13
|
+
.to have_attributes(template: template)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#apply_to' do
|
18
|
+
let(:template) do
|
19
|
+
create(:permission_template,
|
20
|
+
manage_groups: manage_groups,
|
21
|
+
manage_users: manage_users,
|
22
|
+
view_groups: view_groups,
|
23
|
+
view_users: view_users)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'applies edit groups' do
|
27
|
+
edit_after_application = work.edit_groups + manage_groups
|
28
|
+
|
29
|
+
expect { applicator.apply_to(model: work) }
|
30
|
+
.to change { work.edit_groups }
|
31
|
+
.to contain_exactly(*edit_after_application)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'applies edit users' do
|
35
|
+
edit_after_application = work.edit_users + manage_users
|
36
|
+
|
37
|
+
expect { applicator.apply_to(model: work) }
|
38
|
+
.to change { work.edit_users }
|
39
|
+
.to contain_exactly(*edit_after_application)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'applies read groups' do
|
43
|
+
read_after_application = work.read_groups + view_groups
|
44
|
+
|
45
|
+
expect { applicator.apply_to(model: work) }
|
46
|
+
.to change { work.read_groups }
|
47
|
+
.to contain_exactly(*read_after_application)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'applies read users' do
|
51
|
+
read_after_application = work.read_users + view_users
|
52
|
+
|
53
|
+
expect { applicator.apply_to(model: work) }
|
54
|
+
.to change { work.read_users }
|
55
|
+
.to contain_exactly(*read_after_application)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#template' do
|
60
|
+
let(:new_template) { :not_another_template }
|
61
|
+
|
62
|
+
it 'has a template attribute' do
|
63
|
+
expect { applicator.template = new_template }
|
64
|
+
.to change { applicator.template }
|
65
|
+
.from(template)
|
66
|
+
.to new_template
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,10 @@ def coverage_needed?
|
|
5
5
|
ENV['COVERAGE'] || ENV['TRAVIS']
|
6
6
|
end
|
7
7
|
|
8
|
+
def ci_build?
|
9
|
+
ENV['TRAVIS'] || ENV['CIRCLE']
|
10
|
+
end
|
11
|
+
|
8
12
|
if coverage_needed?
|
9
13
|
require 'simplecov'
|
10
14
|
require 'coveralls'
|
@@ -60,7 +64,7 @@ require 'webmock/rspec'
|
|
60
64
|
WebMock.disable_net_connect!(allow_localhost: true)
|
61
65
|
|
62
66
|
require 'i18n/debug' if ENV['I18N_DEBUG']
|
63
|
-
require 'byebug' unless
|
67
|
+
require 'byebug' unless ci_build?
|
64
68
|
|
65
69
|
# @note In January 2018, TravisCI disabled Chrome sandboxing in its Linux
|
66
70
|
# container build environments to mitigate Meltdown/Spectre
|
@@ -141,7 +145,7 @@ RSpec.configure do |config|
|
|
141
145
|
config.include Shoulda::Matchers::ActiveRecord, type: :model
|
142
146
|
config.include Shoulda::Matchers::ActiveModel, type: :form
|
143
147
|
config.include Shoulda::Callback::Matchers::ActiveModel
|
144
|
-
config.full_backtrace = true if
|
148
|
+
config.full_backtrace = true if ci_build?
|
145
149
|
config.expect_with :rspec do |c|
|
146
150
|
c.syntax = :expect
|
147
151
|
end
|
@@ -165,6 +169,13 @@ RSpec.configure do |config|
|
|
165
169
|
DatabaseCleaner.start
|
166
170
|
end
|
167
171
|
|
172
|
+
if example.metadata[:type] == :view
|
173
|
+
# View tests should not hit any services. This ensures the tests are unit
|
174
|
+
# testing only the views and run fast.
|
175
|
+
WebMock.disable_net_connect!(allow_localhost: false)
|
176
|
+
else
|
177
|
+
WebMock.disable_net_connect!(allow_localhost: true)
|
178
|
+
end
|
168
179
|
# using :workflow is preferable to :clean_repo, use the former if possible
|
169
180
|
# It's important that this comes after DatabaseCleaner.start
|
170
181
|
ensure_deposit_available_for(user) if example.metadata[:workflow]
|
@@ -1,6 +1,9 @@
|
|
1
1
|
RSpec.describe 'catalog/index.html.erb', type: :view do
|
2
|
-
let(:
|
3
|
-
|
2
|
+
let(:doc) do
|
3
|
+
SolrDocument.new(id: "abc123",
|
4
|
+
has_model_ssim: ['Collection'],
|
5
|
+
title_tesim: ['Collection Title 999'])
|
6
|
+
end
|
4
7
|
|
5
8
|
before do
|
6
9
|
view.extend Hyrax::CollectionsHelper
|
@@ -30,7 +33,7 @@ RSpec.describe 'catalog/index.html.erb', type: :view do
|
|
30
33
|
before { allow(view).to receive(:can?).and_return(false) }
|
31
34
|
it 'appears on page without error' do
|
32
35
|
render
|
33
|
-
expect(rendered).to include(
|
36
|
+
expect(rendered).to include('Collection Title 999')
|
34
37
|
page = Capybara::Node::Simple.new(rendered)
|
35
38
|
expect(page).to have_selector("span.fa.fa-cubes.collection-icon-search")
|
36
39
|
end
|
@@ -39,7 +42,7 @@ RSpec.describe 'catalog/index.html.erb', type: :view do
|
|
39
42
|
before { allow(view).to receive(:can?).and_return(true) }
|
40
43
|
it 'appears on page without error' do
|
41
44
|
render
|
42
|
-
expect(rendered).to include(
|
45
|
+
expect(rendered).to include('Collection Title 999')
|
43
46
|
page = Capybara::Node::Simple.new(rendered)
|
44
47
|
expect(page).to have_selector("span.fa.fa-cubes.collection-icon-search")
|
45
48
|
end
|
@@ -20,6 +20,7 @@ RSpec.describe 'hyrax/admin/admin_sets/_show_actions.html.erb', type: :view do
|
|
20
20
|
context "when presenter has delete disabled" do
|
21
21
|
before do
|
22
22
|
allow(presenter).to receive(:disable_delete?).and_return(true)
|
23
|
+
allow(presenter).to receive(:disabled_message).and_return('')
|
23
24
|
render
|
24
25
|
end
|
25
26
|
it "displays a disabled delete button" do
|
@@ -43,6 +44,7 @@ RSpec.describe 'hyrax/admin/admin_sets/_show_actions.html.erb', type: :view do
|
|
43
44
|
context "with default admin set" do
|
44
45
|
before do
|
45
46
|
allow(presenter).to receive(:disable_delete?).and_return(true)
|
47
|
+
allow(presenter).to receive(:disabled_message).and_return('')
|
46
48
|
render
|
47
49
|
end
|
48
50
|
it "displays a disabled delete button" do
|
@@ -3,13 +3,16 @@ RSpec.describe 'hyrax/admin/admin_sets/_show_document_list_row.html.erb', type:
|
|
3
3
|
let(:ability) { Ability.new(user) }
|
4
4
|
|
5
5
|
let(:work) do
|
6
|
-
|
6
|
+
stub_model(GenericWork, title: ['One Hundred Years of Solitude'])
|
7
7
|
end
|
8
8
|
|
9
9
|
before do
|
10
10
|
view.blacklight_config = Blacklight::Configuration.new
|
11
11
|
allow(controller).to receive(:current_ability).and_return(ability)
|
12
12
|
allow(view).to receive(:current_user).and_return(user)
|
13
|
+
allow(view).to receive(:render_collection_links).and_return('')
|
14
|
+
allow(view).to receive(:render_visibility_link).and_return('')
|
15
|
+
|
13
16
|
allow(work).to receive(:title_or_label).and_return("One Hundred Years of Solitude")
|
14
17
|
allow(work).to receive(:edit_groups).and_return([user])
|
15
18
|
allow(work).to receive(:edit_people).and_return([user])
|