spec/unit/embargoable_spec.rb in hydra-access-controls-9.2.2 vs spec/unit/embargoable_spec.rb in hydra-access-controls-9.3.0

- old
+ new

@@ -14,12 +14,23 @@ after { Object.send(:remove_const, :TestModel) } let(:future_date) { Date.today+2 } let(:past_date) { Date.today-2 } - subject { TestModel.new } + let(:model) { TestModel.new } + subject { model } + describe '#embargo_indexer_class' do + subject { model.embargo_indexer_class } + it { is_expected.to eq Hydra::AccessControls::EmbargoIndexer } + end + + describe '#lease_indexer_class' do + subject { model.lease_indexer_class } + it { is_expected.to eq Hydra::AccessControls::LeaseIndexer } + end + describe 'validations' do context "with dates" do subject { ModsAsset.new(lease_expiration_date: past_date, embargo_release_date: past_date) } it "validates embargo_release_date and lease_expiration_date" do expect(subject).to_not be_valid @@ -75,27 +86,46 @@ expect(subject).to be_visibility_changed end end end - context 'apply_embargo' do + describe '#apply_embargo' do it "applies appropriate embargo_visibility settings" do expect { subject.apply_embargo(future_date.to_s, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE, Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC) }.to change { subject.visibility_changed? }.from(false).to(true) expect(subject).to be_under_embargo expect(subject.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE expect(subject.embargo_release_date).to eq future_date expect(subject.visibility_after_embargo).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC end - it "relies on default before/after visibility if none provided" do - subject.apply_embargo(future_date.to_s) - expect(subject).to be_under_embargo - expect(subject.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE - expect(subject.embargo_release_date).to eq future_date - expect(subject.visibility_after_embargo).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED + + context "when no before/after visibility is provided" do + it "relies on defaults" do + subject.apply_embargo(future_date.to_s) + expect(subject).to be_under_embargo + expect(subject.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE + expect(subject.embargo_release_date).to eq future_date + expect(subject.visibility_after_embargo).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED + end end + + context "when the same embargo is applied" do + before do + subject.apply_embargo(future_date.to_s) + if ActiveModel.version < Gem::Version.new('4.2.0') + subject.embargo.send(:reset_changes) + else + subject.embargo.send(:clear_changes_information) + end + end + + it "doesn't call visibility_will_change!" do + expect(subject).not_to receive(:visibility_will_change!) + subject.apply_embargo(future_date.to_s) + end + end end context 'deactivate_embargo!' do before do subject.visibility_during_embargo = Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE @@ -150,14 +180,33 @@ expect(subject).to be_visibility_changed expect(subject.visibility).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PUBLIC expect(subject.lease_expiration_date).to eq future_date expect(subject.visibility_after_lease).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE end - it "relies on default before/after visibility if none provided" do - subject.apply_lease(future_date.to_s) - expect(subject.visibility_during_lease).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED - expect(subject.lease_expiration_date).to eq future_date - expect(subject.visibility_after_lease).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE + + context "when before/after visibility is not provided" do + it "sets default values" do + subject.apply_lease(future_date.to_s) + expect(subject.visibility_during_lease).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_AUTHENTICATED + expect(subject.lease_expiration_date).to eq future_date + expect(subject.visibility_after_lease).to eq Hydra::AccessControls::AccessRight::VISIBILITY_TEXT_VALUE_PRIVATE + end + end + + context "when the same lease is applied" do + before do + subject.apply_lease(future_date.to_s) + if ActiveModel.version < Gem::Version.new('4.2.0') + subject.lease.send(:reset_changes) + else + subject.lease.send(:clear_changes_information) + end + end + + it "doesn't call visibility_will_change!" do + expect(subject).not_to receive(:visibility_will_change!) + subject.apply_lease(future_date.to_s) + end end end context "when the initial value is public" do before do