You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
	
	
							104 lines
						
					
					
						
							3.0 KiB
						
					
					
				require "rails_helper" | 
						|
 | 
						|
RSpec.describe LettingsLogPolicy do | 
						|
  subject(:policy) { described_class } | 
						|
 | 
						|
  permissions :destroy? do | 
						|
    let(:log) { create(:lettings_log, :in_progress) } | 
						|
 | 
						|
    context "when log nil" do | 
						|
      before do | 
						|
        allow(log).to receive(:collection_period_open?).and_return(false) | 
						|
      end | 
						|
 | 
						|
      it "does not allow deletion of log" do | 
						|
        expect(policy).not_to permit(build(:user, :support), nil) | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    context "when user nil" do | 
						|
      before do | 
						|
        allow(log).to receive(:collection_period_open?).and_return(false) | 
						|
      end | 
						|
 | 
						|
      it "does not allow deletion of log" do | 
						|
        expect(policy).not_to permit(nil, build(:lettings_log, :in_progress)) | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    context "when collection period closed" do | 
						|
      before do | 
						|
        allow(log).to receive(:collection_period_open?).and_return(false) | 
						|
      end | 
						|
 | 
						|
      it "does not allow deletion of log" do | 
						|
        expect(log).to receive(:collection_period_open?) | 
						|
 | 
						|
        expect(policy).not_to permit(build(:user, :support), log) | 
						|
      end | 
						|
    end | 
						|
 | 
						|
    context "when collection period open" do | 
						|
      before do | 
						|
        allow(log).to receive(:collection_period_open?).and_return(true) | 
						|
      end | 
						|
 | 
						|
      context "when not started" do | 
						|
        it "allows deletion of log" do | 
						|
          expect(policy).to permit(build(:user, :support), create(:lettings_log)) | 
						|
        end | 
						|
      end | 
						|
 | 
						|
      [ | 
						|
        %i[lettings_log in_progress], | 
						|
        %i[lettings_log completed], | 
						|
      ].each do |type, status| | 
						|
        let(:log) { create(type, status) } | 
						|
        context "when #{type} status: #{status}" do | 
						|
          context "when user is data coordinator" do | 
						|
            let(:user) { create(:user, :data_coordinator) } | 
						|
            let(:user_of_managing_org) { create(:user, :data_coordinator, organisation: log.managing_organisation) } | 
						|
 | 
						|
            it "does not allow deletion of log" do | 
						|
              expect(log).to receive(:collection_period_open?) | 
						|
 | 
						|
              expect(policy).not_to permit(user, log) | 
						|
            end | 
						|
 | 
						|
            it "allows deletion of log" do | 
						|
              expect(log).to receive(:collection_period_open?) | 
						|
 | 
						|
              expect(policy).to permit(user_of_managing_org, log) | 
						|
            end | 
						|
          end | 
						|
 | 
						|
          context "when user is support" do | 
						|
            let(:user) { create(:user, :support) } | 
						|
 | 
						|
            it "allows deletion of log" do | 
						|
              expect(policy).to permit(user, log) | 
						|
            end | 
						|
          end | 
						|
 | 
						|
          context "when user is data provider" do | 
						|
            let(:user) { create(:user) } | 
						|
 | 
						|
            it "does not allow deletion of log" do | 
						|
              expect(log).to receive(:collection_period_open?) | 
						|
 | 
						|
              expect(policy).not_to permit(user, log) | 
						|
            end | 
						|
 | 
						|
            context "when the log is assigned to the user" do | 
						|
              let(:log) { create(:lettings_log, :in_progress, assigned_to: user) } | 
						|
 | 
						|
              it "does allow deletion of log" do | 
						|
                expect(policy).to permit(user, log) | 
						|
              end | 
						|
            end | 
						|
          end | 
						|
        end | 
						|
      end | 
						|
    end | 
						|
  end | 
						|
end
 | 
						|
 |