# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later require 'rails_helper' describe DeleteCampaignGiftOption do before(:each){ ##stub out the mailing stuff used by campaign creation cm = double(CampaignMailer) allow(cm).to receive(:creation_followup) nam = double(NonprofitAdminMailer) allow(nam).to receive(:supporter_fundraiser) allow(CampaignMailer).to receive(:delay).and_return(cm) allow(NonprofitAdminMailer).to receive(:delay).and_return(nam) } describe '.delete' do let(:profile) {force_create(:profile, :user => force_create(:user))} let(:campaign) { force_create(:campaign, :profile => profile)} let(:campaign_gift_option) { force_create(:campaign_gift_option, :campaign => campaign)} let(:campaign_gift) { force_create(:campaign_gift, :campaign_gift_option => campaign_gift_option)} describe 'param validation' do it 'does basic validation' do expect{ DeleteCampaignGiftOption.delete(nil, nil)} .to(raise_error{|error| expect(error).to be_a ParamValidation::ValidationError expect_validation_errors(error.data, [ { :key => :campaign, :name => :required }, { :key => :campaign, :name => :is_a }, { :key => :campaign_gift_option_id, :name => :required }, { :key => :campaign_gift_option_id, :name => :is_integer } ]) }) end it 'does cgo verification' do expect { DeleteCampaignGiftOption.delete(campaign, 5555)}.to(raise_error{|error| expect(error).to be_a ParamValidation::ValidationError expect_validation_errors(error.data, [{:key => :campaign_gift_option_id}]) }) end end it 'cgo deletion is rejected because a gift has already been sold' do campaign_gift_option campaign_gift expect { DeleteCampaignGiftOption.delete(campaign, campaign_gift_option.id)}.to(raise_error{|error| expect(error).to be_a ParamValidation::ValidationError expect_validation_errors(error.data, [{:key => :campaign_gift_option_id}]) expect(error.message).to eq("#{campaign_gift_option.id} already has campaign gifts. It can't be deleted for safety reasons.") expect(CampaignGiftOption.any?).to eq true }) end it 'cgo deletion succeeds' do Timecop.freeze(2020,10,12) do campaign_gift_option result = DeleteCampaignGiftOption.delete(campaign, campaign_gift_option.id) expect(result).to be_a CampaignGiftOption expect(result.attributes).to eq (campaign_gift_option.attributes) expect(CampaignGiftOption.any?).to eq false end end end end